Inhalt/Content

Konferenzmanagement mit LaTeX

Die Organisation von Veranstaltungen wie Konferenzen, Tagungen oder Workshops erfordert eine ganze Reihe von Rechnungen, Teilnehmerlisten, Namensschildern und anderen Dokumenten. LaTeX stellt für alle diese Dokumenttypen geeignete Klassen bereit, über das datatool Paket von Nicola Talbot kann man ihnen den Zugriff auf CSV-Dateien ermöglichen. In diesem Artikel, erschienen in der DTK 01/2009, beschreibe ich anhand eines praktischen Beispiels die genutzten Pakete und ihr Zusammenwirken.

Deutscher Artikel (DTK 01/2009)

Errata

  1. 18.02.2009: Das Beispiel mit der dt. Formatierung war leider fehlerhaft. Das PDF und die ZIP-Datei sind bereits aktualisiert, diesen Teil muss ich mir noch einmal in Ruhe anschauen.
  2. 12.03.2009:Mit der neuesten Version (2.0) von datatool gibt es Fehler beim Übersetzen der Beispiele. Lösung folgt.

LaTeX und Versionsverwaltung mit Subversion

Beim Umgang mit umfangreichen Dokumenten kommt es vor, dass man den Überblick über die verschiedenen Versionen der Arbeit verliert. Hilfreich ist dann eine Versionsverwaltung, mit der man genau nachvollziehen kann, wann welche Änderung an den einzelnen Dateien des Projekts erfolgte.

Die Klassiker im Bereich der Versionskontrollsysteme sind RCS und CVS; Subversion, das von einem Entwicklerteam um CollabNet betreut wird, ist ein Newcomer und hat gegenüber CVS eine Reihe von Vorteilen.

Der folgende Artikel soll das Setup und den Umgang mit Subversion für Windows beschreiben, benutzt werden jeweils die von den Programmen vorgeschlagenen Installationsverzeichnisse.

Very brief English summary of the German text above: Subversion is a version management software and can be used pretty well with LaTeX. This article shows the setup and use of Subversion with LaTeX.

English Article in the PracTeX Journal (July 2007)

I wrote a small article on Subversion and LaTeX for the PracTeX-journal, the original version is available from the PracTeX homepage.

An updated and bug-fixed version is also available: Download PDF.

Deutscher Artikel in der DTK 03/2008

Eine aktualisierte und erweiterte Version des Artikels erschien in der TeXnischen Komödie 03/2008. Download als PDF Scribd (Flash-Version)

Errata

Benötigte Programme

  1. Apache 2 (benutzte Version: Xampp 1.6.2 mit Apache 2.2.4)
  2. Subversion (1.4.4)
  3. TortoiseSVN (1.4.4)
  4. die LaTeX-Pakete svn, svninfo und svn-multi

Apache 2 Setup

Für die Installation des Webservers gibt es zwei sinnvolle Möglichkeiten. Entweder installiert man den Apache allein oder aber nutzt ein fertiges Paket wie Xampp [2]. Die Installation mit Xampp beschreibe ich weiter unten.

Apache ist für den Einsatz von Subversion nicht zwingend notwendig, möglich ist auch der Einsatz eines dedizierten SVN-Servers (siehe [1]). Ich habe jedoch gute Erfahrungen mit Apache gemacht, daher beschreibt dieser Artikel nur die Apache Installation. Die Installation selbst ist selbsterklärend, mehr als auf 'Weiter' klicken ist für den Hauptteil der Installation nicht notwendig. Bei der Abfrage der Domaineinstellungen sollte man sich aber auf eine nicht-existierende Domain beschränken.

In diesem Dialog kann man auch einstellen, ob Apache als Systemdienst oder manuell zu startende Anwendung installiert werden soll. Persönlich lasse ich meinen Apache als Dienst laufen, da der Rechner vollständig vom Internet getrennt ist sind keine Sicherheitsprobleme zu befürchten. Wenn der Dienst läuft, sollte nach der Eingabe von http://localhost im Browser die folgende Webseite erscheinen.

Davon ausgehend, dass die einzigen Zugriffe auf Apache/Subversion vom lokalen Rechner kommen werden, ist der nächste Schritt ist die Absicherung des Webservers gegen den Zugriff aus dem Internet. Das Apache Installationsverzeichnis enthält im \conf Verzeichnis die Datei httpd.conf, die sämtliche Einstellungen für Apache enthält. Der für uns interessante Teil dieser Datei ist der folgende:

<Directory "C:/Programme/Apache Group/Apache2/htdocs">

#
# Possible values for the Options directive are "None", "All",
# or any combination of:
# Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
#
# Note that "MultiViews" must be named *explicitly* --- "Options All"
# doesn't give it to you.
#
# The Options directive is both complicated and important. Please see
# http://httpd.apache.org/docs-2.0/mod/core.html#options
# for more information.
#
Options Indexes FollowSymLinks

#
# AllowOverride controls what directives may be placed in .htaccess files.
# It can be "All", "None", or any combination of the keywords:
# Options FileInfo AuthConfig Limit
#
AllowOverride None

#
# Controls who can get stuff from this server.
#
Order deny,allow
Deny from all
Allow from 127.0.0.1
</Directory>

Die letzten Zeilen legen fest, dass ausser 'localhost' mit der IP-Adresse 127.0.0.1 niemand auf unseren Webserver zugreifen soll. Nach jeder Änderung muß der Apache neu gestartet werden, im Fall einer totalen Fehlkonfiguration findet man im /conf Verzeichnis noch die Datei http.conf.default.

Die grundlegende Apache Konfiguration ist damit abgeschlossen, später werden wir noch einige Änderungen vornehmen.

Alternative Installation mit Xampp

Subversion und TortoiseSVN

Im nächsten Schritt installieren wir Subversion und TortoiseSVN. Letzteres ist nicht unbedingt nötig, da Subversion auch über die Kommandozeile bedient werden kann. Es ist aber mehr als nur ratsam, da die Bedienung dadurch stark vereinfacht wird. Die Installation ist auch hier selbstbeschreibend, einfach nur auf 'Weiter' klicken (bei der Installer-Version auch anbietet, die Module selbständig in Apache zu installieren). Die Zip-Version installiert man einfach in ein geeignetes Verzeichnis, in unserem Fall C:\Programme\Subversion und fügt den Pfad zu C:\Programme\Subversion\bin der PATH-Variablen hinzu.

Die Funktion von Subversion und TortoiseSVN läßt sich an diesem Punkt bereits testen, indem wir die Subversion Quellen herunterladen.

Von der Kommandozeile aus wechselt man in ein leeres Verzeichnis und checkt die Quellen aus:

svn checkout http://svn.collab.net:81/repos/svn/trunk subversion

Bei installiertem TortoiseSVN geht man im Explorer in ein leeres Verzeichnis und ruft über die rechte Maustaste den Menüeintrag 'SVN Checkout' auf:

In das Feld 'URL of Repository' gibt man dann die URL http://svn.collab.net:81/repos/svn/trunk ein. Der SVN client sollte dann die Dateien aus dem Repository abholen, am Ende sollte das Fenster so oder ähnlich aussehen.

Integration von Subversion in Apache

Zur Integration von Subversion in den Webserver kopieren wir

aus dem C:\Programme\Subversion\bin Verzeichnis nach C:\Programme\Apache Group\Apache2\modules. Anschließend editieren wir wieder wieder C:\Programme\Apache Group\Apache2\conf\httpd.conf und

am Ende des LoadModule Blocks ein. Anschließend ist es Zeit für einen Neustart (ohne Neustart ließ sich Apache nicht starten) von Rechner und Webserver, damit alle Module richtig arbeiten.

Wenn wir jetzt im htdocs Verzeichnis des Webservers ein Verzeichnis 'test' erstellen und im Webbrowser http:\\localhost\test aufrufen, sollte eine leere Verzeichnisansicht erscheinen, darunter die Apache Statusmeldung:

Apache/2.2.4 (Win32) DAV/2 mod_ssl/2.2.4 OpenSSL/0.9.8e SVN/1.4.4 mod_autoindex_color PHP/5.2.2

 

Testen der Installation

Als nächstes richten wir ein Testrepository ein, mit dem wir die korrekte Funktionsweise von Apache, Subversion und TortoiseSVN überprüfen.

Dazu legen wir uns ein leeres Verzeichnis c:\alleMeineRepos an. Dieses Verzeichnis wird uns als Stammverzeichnis für sämtliche Repositories dienen. In der Apache Konfigurationsdatei fügen wir dann folgende Zeilen ein.

<Location /svn>
DAV svn

SVNParentPath c:/alleMeineRepos
</Location>

Diese Konfiguration läßt jegliche Sicherheitsaspekte außen vor, ohne das 'deny from all' in der httpd.conf wäre unser Repository über das Internet erreichbar.

Soll der Apache mit Subversion übers Netz erreichbar sein, sollte man die Nutzungsbeschränkungen etwas genauer setzen. Eine Lösung wäre, das Allow statement in der httpd.conf auf das lokale Subnetz zu beschränken, genauer läßt sich der Zugriff aber über Passwörter regeln. Eine Möglichkeit kann so aussehen :

Um unser SvnParent Verzeichnis gegen unauthorisierten Zugriff zu schützen, ändern wir die SvnParent Konfiguration in der httpd.conf wie folgt ab:

<Location /svn>
DAV svn

SVNParentPath c:/alleMeineRepos

AuthType Basic
AuthName "Subversion repository"
AuthUserFile C:/apachefriends/xampp/apache/passwort
Require valid-user
</Location>

Was bewirkt diese Änderung? Letztendlich, dass nur Benutzer auf das Verzeichnis /svn zugreifen können, deren Username und Passwort in der Datei c:\alleMeineRepos\passwords.txt stehen. Um diese Einträge zu erzeugen, nutzen wir den htpasswd Befehl aus dem Apache /bin Verzeichnis. Die Syntax lautet:

htpasswd [-cmdpsD] passwordfile username
htpasswd -b[cmdpsD] passwordfile username password

htpasswd -n[mdps] username
htpasswd -nb[mdps] username password
-c Create a new file.
-n Don't update file; display results on stdout.
-m Force MD5 encryption of the password (default).
-d Force CRYPT encryption of the password.
-p Do not encrypt the password (plaintext).
-s Force SHA encryption of the password.
-b Use the password from the command line rather than prompting for it.
-D Delete the specified user.

Mit htpasswd -c C:/apachefriends/xampp/apache/passwort uwe MeinPassWort legen wir einen Nutzer samt Passwort an. Nach einem abschließenden Neustart des Apache ist unser /svn Verzeichnis dann geschützt. Mehr zum Thema Apache Sicherheit findet man auf der entsprechenden Webseite der Apache Dokumentation.

Die Option -c zum Anlegen der Datei ist nur beim Eintrag des ersten Nutzers anzugeben. Gibt man sie bei der Eintragung weiterer Nutzer auch an, wird die Passwort-Datei überschrieben!

Der Vorteil von SVNParentPath gegenüber einer SVNPath Lösung ist, dass wir in diesem Verzeichnis die einzelnen Repositories anlegen können, ohne Apache neu starten zu müssen. Eine http://localhost/svn/xxx URL wird dann nach c:\alleMeineRepos\xxx aufgelöst.

Im Verzeichnis c:\alleMeineRepos legen wir anschließend ein Verzeichnis test an und wechseln in dieses Verzeichnis. Mit der rechten Maustaste rufen wir den Eintrag TortoiseSVN => Create Repository here... auf. Die optimale Antwort auf die Frage, welches Filesystem eingerichtet werden soll, kenn ich nicht, daher nehmen wir mal Native Filesystem. Für die genauen Unterschiede der Filesysteme sei auf die Subversion Anleitung verwiesen.

Der äquivalente Subversion Befehl lautet:

svnadmin create c:\alleMeineRepos\test

Anschließend sollte nach Eingabe der URL http:\\localhost\svn\test folgende Seite erscheinen.

 

Die Konfiguration ist damit abgeschlossen, als nächstes müssen wir unser Repository mit Dateien füllen.

Dateiimport und Versionsverwaltung

Als Beispiel für eine erste Anwendung von Subversion erstellen wir eine Artikel-Musterklasse. Dazu legen wir in einem leeren Verzeichnis eine einfache LaTeX-Datei an.

artikel.tex:

\documentclass{article}
\begin{document}

Hallo Welt!

\end{document}

Wir wechseln dann mit dem Windows Explorer in dieses Verzeichnis und wählen aus dem Auswahlmenü (rechte Maustaste) TortoiseSVN => Import. Im dann erscheinenden Dialogfeld geben wir die URL zum Repository an und legen noch einen kurzen Kommentar an.

Dann sollte folgende Bestätigung kommen:

Ein Aufruf der URL des Repositories im Browser sollte ungefähr so aussehen:

Der entsprechende Kommandozeilenbefehl lautet

svn import http://url_des_repository --file c:\svn.log

Ohne Angabe von --file nörgelt Subversion, da es etwaige Importfehler protokollieren will.

Jetzt wird es Zeit, ein Arbeitsverzeichnis zu erstellen und unser Repository auszuchecken. Wir erstellen ein Verzeichnis, beispielsweise C:\MeineDateien\LaTeX\Vorlagen und wechseln in dieses Verzeichnis. Über die rechte Maustaste oder den Eintrag im Datei Menü wählen wir SVN Checkout... und geben wieder die URL des Repositories an.

Der entsprechende Kommandozeilenbefehl lautet:

svn checkout http://url_des_repository

Neben der ausgecheckten artikel.tex, die jetzt ein grünes Häkchen (= unverändert) im Logo hat, enthält C:\MeineDateien\LaTeX\Vorlagen ein .svn Verzeichnis, das wir nicht löschen dürfen. In diesem Verzeichnis werden die Dateien gespeichert, mit deren Hilfe Subversion feststellt ob eine Datei verändert wurde oder nicht.

Wir können die LaTeX-Datei jetzt modifizieren, beispielswiese ein \usepackage[ngerman]{babel} in die Präambel setzen. Aus dem grünen Häkchen wird nach dem Speichern ein rotes Ausrufezeichen.

Im Datei Menü und per rechter Maustaste steht jetzt neben SVN Update auch SVN Commit zur Verfügung, das unsere Datei ins Repository einstellt. Wie beim initial import können wir noch eine Anmerkung eingeben.

Die wichtigsten Funktionen für den Umgang mit Subversion und TortoiseSVN haben wir damit erledigt, jetzt kümmern wir uns um das Zusammenspiel von Subversion und LaTeX.

Subversion Informationen in LaTeX einbetten

Subversion kann eine Reihe von Stichwörtern in Quelldateien automatisch aktualisieren, d.h. Platzhalter für die aktuelle Versionsnummer werden bei jeder Änderung automatisch hochgezählt.

Folgende Stichwörter, die in der Quelldatei in der Form $Stichwort$ stehen müssen, werden erkannt:

Wenn Subversion diese Ersetzung vornehmen soll, müssen wir die Liste der zu ersetzenden Stichwörter übergeben. Dazu wechseln wir in der Kommandozeile in das Arbeitsverzeichnis (bei mir C:\MeineDateien\LaTeX\Vorlagen) und geben folgenden Befehl ein:

svn propset svn:keywords "Date HeadURL Revision Id " artikel.tex

Subversion sollte dann zurückgeben:

Eigenschaft 'svn:keywords' für 'artikel.tex' gesetzt

Testen können wir das erfolgreiche Setzen der Eigenschaften, indem wir in der ersten Zeile unseres Dokuments $HeadURL$ einfügen und ein commit durchführen. Nach dem Commit steht statt $HeadURL$ $HeadURL: http://localhost/svn/test/artikel.tex $ in der Datei.

Zur Benutzung der Subversion Keywords gibt es zwei Pakete auf CTAN, svn und svninfo. Das svninfo Paket ist neueren Datums und bietet vermutlich auch mehr Funktionen, daher gehe ich an dieser Stelle nur auf svninfo ein.

Das Paket wird mit \usepackage{svninfo} geladen, verschiedene Optionen für die Datumsfunktionen und Kopfzeilen stehen bereit, siehe Anleitung. Zum Transfer der Subversion Informationen muß

Anschließend stehen die folgenden Befehle zur Verfügung

Beispiel:

\documentclass{article}
\begin{document}
\svnInfo $Id$
\title{\svnInfoFile}
\author{Uwe}
\maketitle

Hallo Welt!

\end{document}

 

Literatur

[1] http://tortoisesvn.net/docs/nightly/TortoiseSVN_en/tsvn-serversetup-svnserve.html

[2] http://www.apachefriends.org

2007-07-28