useless and overrated

2. Oktober 2010 um 13.00 Uhr

LaTeX mit Git

Flattr

Sowohl das Textsatzsystem LaTeX als auch das Versionskontrollsystem Git sind sehr hilfreiche Werkzeuge. Wenn sie im Zusammenspiel benutzt werden, empfiehlt es sich jedoch, ein paar Hinweise zu berücksichtigen.

Da Git im engesten Sinne ein Quelltext-Verwaltungs-System ist, eignet es sich natürlich auch für LaTeX-Dateien. Einige Standard-Optionen eigenen sich für die eher textlastigen LaTeX-Dateien allerdings nicht. Dem kann jedoch leicht mit ein paar Einstellungen Abhilfe geschaffen werden.

Eine übliche Schwierigkeit ergibt sich aus typischen Arbeitsweisen und Annahmen der verschiedenen Systemen. In LaTeX werden oft ganze Absätze in eine Zeile geschrieben. Da Git jedoch – wie auch die meisten anderen Versionierungssysteme – Unterschiede zwischen den Versionen zeilenbasiert ermittelt, verliert man leicht die Übersicht, was sich nun tatsächlich geändert hat.

Deshalb bietet es sich an, jeden Satz im LaTeX-Dokument auf eine eigene Zeile zu setzen – also jeden Satz mit ↩ abzuschließen. Das hat keinen Einfluss auf das erzeugte Dokument, da Absätze durch (mindestens) eine Leerzeile getrennt und Zeilenumbrüche \\ explizit gefordert werden müssen. Dadurch werden zumindest nur die Sätze als geändert angezeigt, in denen auch tatsächlich etwas passiert ist.

Man kann die Übersicht im Text enorm steigern, wenn man Sätze, die trotzdem im gleichen Absatz bleiben sollen, durch eine Zeile mit einem Kommentarzeichen % trennt. Dadurch wird kein Absatzwechsel erzeugt, wie das folgende Beispiel zeigt.

Kein Absatz hier.
%
Nur mehr Durchblick.

Dieses Fragment ergibt im fertigen Dokument keinen Absatz.

Kein Absatz hier. Nur mehr Durchblick.

Dieser Trick empfiehlt sich auch, um vor und nach Gleichungen unnötigen Abstand zu verhindern und dennoch die Übersicht im Quelldokument zu erhalten.

Die Reihe
%
\[ \sum_{k=0}^\infty \frac{x^k}{k!}  \]
%
konvergiert.

Selbstverständlich hilft diese Strukturierung auch bei anderen Versionierungssystemen oder gar ganz ohne Versionskontrolle. (Aber wer will schon ohne diese Sicherheit arbeiten?)

Ich empfehle außerdem, vor Beginn eines neuen Abschnitts mindestens zwei Leerzeilen zu lassen. Das erhöht die Übersicht und erleichtert das Auffinden von Unterschieden.



Attribute

Man kann Git noch ein paar Hinweise geben, die den Umgang mit LaTeX-Dokumenten erleichtern.

Ohne weitere Anpassungen erscheinen in der Anzeige der Änderungen keine oder nur unbrauchbare Orientierungshilfen.

$ git diff
…
@@ -9,7 +9,7 @@
…

Die Änderungsabschnitte (Zeilen mit @@) können jedoch den Abschnitt anzeigen in dem die Änderung liegt, etwa so:

@@ -9,7 +9,7 @@ \section{Einleitung}

Das ist sehr nützlich, um durchgeführte Änderungen besser zu erkennen und den Dokumentstellen zuzuordnen. Dazu muss man lediglich den Inhaltstyp bekannt geben. Git enthält bereits vorgefertigte Modi für zahlreiche Inhaltstypen, die die Erkennung von Wortgrenzen und Abschnitten auf diese Inhalte anpassen.

Die Zuordnung der Dateien und ihrer Inhaltstypen erfolgt in der Datei .gitattributes durch Ergänzen der folgenden Zeilen.

*.tex	diff=tex
*.bib	diff=bibtex

Gerade bei textlastigen Dokumenten bietet es sich nun weiterhin an, die Änderungen nicht Zeilenweise, sondern wortweise anzuzeigen. Mit der vorherigen Angabe findet Git auch in LaTeX-Dokumenten leicht die einzelnen, geänderten Worte. Um diese Wortänderungen anzuzeigen, verwende man diesen Befehl:

$ git diff --color-words

Um sich die zusätzliche Tipparbeit zu sparen, kann man ein Alias – eine Abkürzung – für den Befehl definieren:

$ git config --global alias.wdiff 'diff --color-words'

Damit verkürzt sich der Befehl zur Anzeige von Wortänderungen auf:

$ git wdiff

Der letze Tipp dieses Artikels bezieht sich nun auf Hilfsdateien, die nicht im Versionierungssystem gesichert werden müssen, da sie automatisch erzeugt werden. Gerade LaTeX erzeugt eine große Zahl von Hilfsdateien, die die Übersicht von Befehlen wie git diff oder git status deutlich mindern.

Man kann Git anweisen bestimmte Dateien zu ignorieren. Dazu trägt man in die Datei .gitignore zeilenweise die zu ignorierenden Dateien ein. Bei mir enthält diese Datei in etwa die folgenden Einträge:

# TeX
*.aux
*.log
*.toc
*.out
# With PDFTeX, ignore DVIs
*.dvi
# BibTeX
*.bbl
*.blg
# Makeindex
*.idx
*.ilg
*.ind

.DS_Store
Icon?
thumbs.db

Diese Angaben können natürlich beliebig erweitert werden. Zeilen die mit # beginnen, sind Kommentare und werden nicht beachtet.

Im Übrigen sollten auch die Hilfsdateien .gitignore und .gitattributes zum Repository hinzugefügt werden:

$ git add .gitignore .gitattributes
$ git commit -m 'Hilfsdateien'

In einem kommenden Artikel werde ich noch auf die Verwendung von Git auf mehreren Rechnern eingehen.


von cpx.

Alle Rechte vorbehalten.

uselessness.de — Useless and overrated.

Erzeugt mit Jekyll am 17. August 2011.