TeX-FAQ
These FAQs complement the TeX examples of the month but unfortunately they are available in german only.
1. Welche Struktur hat ein LaTeX-Dokument?
Grundsätzlich besteht ein LaTeX-Dokument aus zwei Teilen:
- Der Präambel, in der mindestens die Dokumentklasse geladen wird und in der Regel auch weitere Pakete. Außerdem sollten globale Einstellungen und (Befehls‑)Definitionen hier vorgenommen werden. Sie beginnt mit
\documentclass{klasse}
und endet vor\begin{document}
. - Dem Dokumentkörper oder Dokumentinhalt, in dem der eigentliche Textinhalt des Dokumentes steht. Er beginnt mit
\begin{document}
und endet mit\end{document}
.
Alles, was nach \end{document}
steht wird vollständig ignoriert.
2. Welche Dokumentklasse soll ich verwenden?
Die Wahl der Dokumentklasse hängt davon ab, welche Inhalte das Dokument haben soll. Für die meisten Anforderungen gibt es bereits Standardklassen, wobei ich empfehle, den KOMA-Script-Klassen den Vorzug zu geben, weil diese wesentlich mehr Möglichkeiten bieten. Man erkennt die KOMA-Script-Klassen am scr
zu Beginn des Namens.
scrartcl
(stattarticle
) für kurze bis mittlere Texte, z. B. Hausarbeitenscrreprt
(stattreport
) für längere Texte, z. B. Abschlussarbeitenscrbook
(stattbook
) für Bücher, z. B. Dissertationenmemoir
als Alternative zuscrbook
scrlttr2
(stattletter
) für Briefebeamer
für Präsentationen
Es gibt natürlich noch weit mehr Klassen, die beispielsweise von Hochschulen oder Verlagen zur Verfügung gestellt werden.
3.
Wozu brauche ich inputenc
und fontenc
?
Das Paket inputenc
sorgt dafür, dass LaTeX die Kodierung der Datei – das ist die Art, wie einzelne Zeichen in der Datei gespeichert werden – kennt und richtig interpretiert. Dabei sollte die dem Paket angegebene Kodierung natürlich mit der im Texteditor beim Speichern des Dokuments eingestellten übereinstimmen. Heute können Dokumente problemlos im Unicode (UTF-8) gespeichert werden, was mit der Option utf8
angeben wird. Eine etwas ältere Alternative ist Latin 1 (ISO 8859-1), die mit latin1
angegeben wird.
Das Paket fontenc
ist notwendig, um auf eine Schriftkodierung – das ist die Angabe darüber, wie die einzelnen Buchstaben in einer Schriftdatei gespeichert sind – umzuschalten, die zum Beispiel auch Umlaute unterstützt. Für unseren Sprachraum ist die korrekte Kodierung T1
.
Diese beiden Pakete ermöglichen also die einfache Verwendung von Umlauten und Co, so dass die umständliche Eingabe von Umlauten mit \"a
oder ähnlichen Konstrukten, die man vielerorts noch liest und leider auch vorgeschlagen bekommt, heute nicht mehr nötig ist.
Siehe auch den Artikel „Mythos Eingabecodierung“ von Markus Kohm.
4.
Was macht das Paket lmodern
?
Das Paket lmodern
lädt die Schriften der Latin Modern-Sammlung, die eine leichte Überarbeitung und Verbesserung der Standardschriften Computer Modern sind. Sofern keine andere Schrift gewünscht ist, sollte dieses Paket immer geladen werden.
5.
Wozu dient das Paket babel
?
Das Paket babel
dient zum einen dazu, die zur Dokumentsprache gehörigen Silbentrennmuster zu laden, und sorgt außerdem dafür, das Textvariablen wie die Überschrift des Inhaltsverzeichnis in der richtigen Sprache ausgegeben werden. Die gewünschte Sprache wird in der Regel nicht direkt als Paketoption, sondern als Klassenoption angegeben, damit sie ggf. auch von anderen Paketen erfasst werden kann.
Für deutsche Texte (mit Silbentrennung nach neuer Rechtschreibung) verwendet man die Option ngerman
. Darüber hinaus stellt babel
für mache Sprachen Shortcuts, etwa für Anführungszeichen, zur Verfügung.
6.
Warum werden Zeilenenden mit %
geschrieben?
In Befehlsdefinitionen sieht man häufig, dass Zeilenenden auskommentiert werden, eine Zeile also mit %
endet. Das ist notwendig, um unerwünschte Leerzeichen zu vermeiden. Normalerweise fasst TeX mehrfache Leerzeichen und Zeilenenden zu einem einzigen Leerzeichen zusammen; dieser Mechanismus kann aber nicht greifen, wenn diese in einer Befehlsdefinition „versteckt“ sind, weshalb man Zeilenenden hier explizit auskommentiert.
7. Was ist eine Gruppe?
Eine Gruppe ist ein Gültigkeitsbereich für verschiedene Änderungen, die man in einem Dokument vornehmen kann. Beispielsweise schaltet der Befehl \itshape
auf kursive Schrift um. Diese Änderung gilt bis zum Ende des Dokumentes oder eben bis zum Ende der aktuellen Gruppe.
Eine Gruppe kann einfach durch geschweifte Klammern erzeugt werden, sofern diese Klammern nicht das Argument eines Befehls sind, in dem Fall bräuchte man doppelte Klammern:
In diesem Text steht {\itshape eine} Gruppe. \newcommand{\befehl}{{\itshape mit Gruppe}}
Außerdem sind alle Umgebungen automatisch Gruppen.
Anmerkung: Statt {\itshape Text}
sollte man \textit{Text}
oder \emph{Text}
verwenden, wenn man nur kurze Passagen auszeichnen will.
8. Wie kann ich die Schriftgröße ändern?
Die Grundschriftgröße des Dokumentes stellt man bei KOMA-Script-Klassen mit der Option fontsize
ein, z. B. \documentclass[fontsize=10.5pt]{scrbook}
.
Im Dokument wird die Schriftgröße normalerweise implizit durch die Verwendung von Befehlen wie \chapter
etc. geändert. Für eine manuelle Änderung gibt es verschiedene Größenschalter: \tiny
, \scriptsize
, \footnotesize
, \small
, \normalsize
, \large
, \Large
, \LARGE
, \huge
und \Huge
. Welche davon tatsächlich definiert sind und wie die Größen sich zueinander verhalten, hängt von der Dokumentklasse ab. Übrigens gibt es keine Umgebungen wie {large}
o. ä. und auch \small{Text}
ist Quatsch!
Bei einem manuellen Wechsel der Schriftgröße ist darauf zu achten, dass der Abstz immer beendet wird, solange die Größe noch gilt, da TeX andernfalls die falsche Größe zur Bestimmung des Zeilenabstandes heranzieht. In der Praxis bedeutet dies, dass, wenn ein Schalter in einer Gruppe steht, selbige das Absatzende (Leerzeile oder \par
) beinhalten muss; z. B.
{\Huge Hier steht großer Text.\par}
Ein ausführliches Beispiel können Sie hier herunterladen: fontsize-in-tex.zip
. Darin wird auch erklärt, wie man eigene Schriftgrößenschalter definiert und wie man die Schriftgröße als Zahl eingeben kann.
9.
Was macht \makeatletter
?
Grundsätzlich können wir zwei Ebenen von Befehlen unterscheiden: 1. Die Benutzerbefehle, die für alle Anwender im ganzen Dokument verfügbar sind, und 2. den „internen“ Befehlen, die nur Klassen- und Paketentwicklern zur Verfügung stehen sollen. Diese Unterscheidung stellt gewissermaßen einen Schutz dar.
Technisch wird diese Unterscheidung umgesetzt, in dem interne Befehle ein @
im Namen tragen, während Benutzerbefehle dies nicht drüfen. Versucht man in einem normalen Dokument beispielsweise den Befehl \internes@komando
aufzurufen, wird dieser als der Befehl \internes
gefolgt von normalen Buchstaben @komando
interpretiert und folglich eine Fehlermeldung, dass \internes
nicht definiert sei, ausgegeben.
Dennoch ist es manchmal nötig (oder sinnvoll), auch in normalen Dokumenten auf interne Befehle zurückgreifen zu können, etwa um sie für eigene Definitionen zu verwenden oder auch auf Dokumentebene die genannte Unterscheidung umsetzen zu können. In diesem Fall kann man mit \makeatletter
das @
sozusagen freischalten. Allerdings sollte diese Änderung nach der Verwendung der internen Befehle unbedingt mit \makeatother
wieder rückgängig gemacht werden.
10.
Wie benutzt man \newcommand
?
Mit \newcommand
kann man in LaTeX eigene Befehle definieren. Der Befehl hat die Syntax
\newcommand{Name}[Arg][oArg]{ Definition }
Dabei gibt es drei Möglichkeiten für Argumente: Der zu definierende Befehl (im den folgenden Beispielen \test
) hat …
- … keine Argumente: Beide optionalen Argumente von
\newcommand
weglassen, bspw.\newcommand{\test}{Test}
. - … nur obligatorische Argumente: mit dem optionalen Argument von
\newcommand
die Anzahl der Argumente des zu definierenden Befehls angeben, bspw.\newcommand{\test}[2]{Test: #1 u. #2}
für zwei Argumente. - … ein optionales Argument und evtl. weitere obligatorische: mit dem ersten optionalen Argument von
\newcommand
die Anzahl der Argumente des zu definierenden Befehls angeben und mit dem zweiten optionalen Argument von\newcommand
den Standardwert für das optionale Argument des zu definierenden Befehls, bspw.\newcommand{\test}[1][Standard]{#1-Test}
für\test
mit nur einem optionalen Argument oder\newcommand{\test}[2][Test]{#2-#1}
für\test
mit einem optionalen und einem obligatorischen Argument.
Innerhalb der Definition kann mit #n
auf die Argumente des zu definierenden Befehls zugegriffen werden und insgesamt sind neun Argumente möglich. Außerdem gibt es die Möglichkeit, die Sternform \newcommand*
zu benutzen, dann dürfen die Argumente keine Absätze enthalten.
Neben \newcommand
gibt es noch \renewcommand
, um einen existierenden Befehl neu zu definieren, und \providecommand
, um einen Befehl zu definieren, wenn dieser bisher nicht definiert wurde.
11. Wie benutzt man \NewDocumentCommand
?
\NewDocumentCommand
dient dazu, neue Befehle zu definieren. Er ist ein alternativer Befehl zu \newcommand
und wird durch das Paket xparse
zur Verfügung gestellt. Sein Vorteil ist, dass die Syntax zur Definition von Argumenten einfacher und gleichzeitig flexibler ist als bei \newcommand
.
\NewDocumentCommand
hat drei Argumente, von denen das erste der Name, der zweite die Argumente und das dritte schließlich die eigentliche Definition des neuen Befehls angibt:
\NewDocumentCommand{Name}{Argumente}{ Definition }
Dabei werden die Argumente durch Buchstaben angegeben (weitere Argumenttypen sind in der Anleitung beschrieben):
m
= obligatorisches Argument (engl. mandatory)o
= optionales Argument ohne StandardwertO{Wert}
= optionales Argument mit Standardwerts
= Stern (*
)
Dabei dürfen die Argumente grundsätzlich keine Absätze enthalten, es sei denn man stellt dem Buchstaben ein Plus, etwa +m
, voran. Im Gegensatz zu \newcommand
kann hier also für jedes Argument einzeln entschieden werden.
Ein Befehl mit einem optionalen und zwei obligatorischen Befehlen könnte beispielsweise so definiert werden:
\NewDocumentCommand{\beispiel}{ o m m }{ Definition }
Wie bei \newcommand
greift man innerhalb der Definition mit #1
, #2
, … auf die Argumente zurück und es gibt die analogen Befehle \RenewDocumentCommand
und \ProvideDocumentCommand
.
12. Welche Einheiten kennt TeX?
- sp: Skalierter Punkt (Scaled Point; 1 sp = 1/65536 pt)
- pt: Punkt (1 pt = 1/72,27 in)
- bp: Großpunkt (Big Point; 1 bp = 1/72 in)
- dd: Didot-Punkt (1157 dd = 1238 pt)
- mm: Millimeter
- pc: Pica (1 pc = 12 pt)
- cc: Cicero (1 cc = 12 dd)
- cm: Zentimeter
- in: Zoll (Inch; 1 in = 2,54 cm)
Des Weiteren gibt es noch drei relative Einheiten, die jweweils von der Schriftart und -größe abhängig sind:
- em: Geviert (ca. Schriftgröße / Breite des M)
- ex: x-Höhe (ca. Höhe des x)
- mu: Matheeinheit (Math Unit; 1 mu = 1/18 em)
Ein Beispiel mit mehr Informationen und einem visuellen Vergleich der verschiedenen Einheiten können sie hier herunterladen: units-in-tex.zip
.
13. Was ist eine Länge / ein Längenbefehl?
Eine Länge oder auch ein Längenbefehl/‑register repräsentiert in TeX eine Maßangabe wie 10 mm, 12 pt etc., wobei diese intern immer in Punkt (pt) gespeichert werden.
\newlength{\laenge}
erzeugt eine neue Länge, die den Wert 0 pt hat. Dieser kann auf verschiedene Arten geändert werden:
\setlength{\laenge}{10mm}
setzt den Wert der Länge\addtolength{\laenge}{10mm}
ändert den Wert der Länge (auch negative Werte sind erlaubt)\settowidth{\laenge}{lang}
misst die Breite vonlang
und setzt die Länge\settoheight{\laenge}{lang}
misst die Höhe vonlang
, ab der Grundlinie (also ohne den „Schwanz“ vomg
– die Unterlänge) und setzt die Länge\settodepth{\laenge}{lang}
misst die Tiefe vonlang
unter der Grundlinie (also nur die Unterlänge) und setzt die Länge
Dabei versteht TeX Längenangaben unter anderem in den ihm bekannten Einheiten sowie in der Form von 2.3\laenge
oder -\laenge
. Für komplexere Berechnungen kann das Paket calc
benutzt werden.
Neben den normalen, gibt es auch noch flexible Längen (im engl. Glue), die in einem definierten Rahmen gedehnt oder gestaucht werden können, beispielsweise, um eine Zeile im Blocksatz zu füllen. Diesen Rahmen gibt man durch die Schlüsselwörter plus
und/oder minus
an:
\setlength{\laenge}{10mm plus 20mm minus 5mm}
Ein Abstand, der die \laenge
zugewiesen bekommt, ist im optimal Fall genau 10 mm lang, kann bei Bedarf aber auf 5 mm schrumpfen bzw. auf 30 mm wachsen.
14. Was macht \newif
?
Mit \newif
wird eine sogenannte Bool’sche Variable erzeugt, die entweder den Wert wahr (true oder auch 1) oder falsch (false oder 0) haben kann. Man kann damit also eine Fallunterscheidung treffen.
Dem Befehl \newif
folgt der Name der anzulegenden Variable, wobei es üblich, aber nicht zwingend ist, diesen mit if
zu beginnen. Gleichzeitig werden damit auch zwei Befehle definiert, um den Status der Variable zu ändern. Beispielsweise erzeugt \newif\ifquestion
gleichzeitig auch \questiontrue
und \questionfalse
, mit denen der Zustand der Variable geändert werden kann. Diese beiden Namen werden aus dem Namen des if-Befehls gebildet, wobei die ersten zwei Buchstaben abgeschnitten werden; damit ist auch einleuchtend, warum man in der Regel ein if
voranstellt.
Um nun je nach Status der Variable unterschiedlichen Code auszuführen, verwendet man
\ifquestion Code für wahr-Fall ... \else Code für falsch-Fall ... \fi
oder wenn nur im wahr-Fall etwas ausgeführt werden soll
\ifquestion Code für wahr-Fall ... \fi
(Man beachte, dass ein \if…
mit dem umgedreht geschriebenen \fi
beendet wird.)
Eine neue Variable ist standardmäßig auf falsch gesetzt.
15. Was ist \dimexpr
?
Normalerweise kann TeX an Stellen, an denen eine Längenangabe erwartet wird, nur mit absoluten Werten, bspw. 297mm
oder 11pt
, sowie einem Längenbefehl, bspw. \baselineskip
umgehen. Mithilfe von \dimexpr
kann man an diesen Stellen aber auch einfache Berechnungen ausführen.
\setlength{\test}{% \dimexpr 10pt + 4mm + 3\baselineskip \relax }
Die Berechnung kann Addition und Subtraktion sowie Faktoren vor Längenbefehlen enthalten, aber keine Division. Es ist ratsam, sie immer mit \relax
zu beenden.
16. Was bedeutet Shell Escape bzw. Write 18?
Für manche Aufgaben kann es sinnvoll (oder erforderlich) sein, dass LaTeX beim Kompilieren weitere (Kommandozeilen-)Programme ausführen darf. Je nach verwendeter Distribution sind die dazu nötigen Optionen etwas anders.
Bei TeX Live heißt die Option -shell-escape
. Um pdflatex
den Zugriff auf die Kommandozeile zu ermöglichen verwendet man beispielsweise
pdflatex -shell-escape datei.tex
Bei MikTeX heißt die Option -enable-write18
. Um pdflatex
den Zugriff auf die Kommandozeile zu ermöglichen verwendet man beispielsweise
pdflatex -enable-write18 datei.tex