Schreibt man \LaTeX is great, kommt „LaTeXis great“ heraus. Ein Leerzeichen ist verschwunden, und keine einzige Fehlermeldung erscheint. Das ist kein Fehler: TeX hat dieses Leerzeichen absichtlich weggeworfen. Sämtliche Syntaxregeln von LaTeX – wo ein Befehlsname endet, wie Leerzeichen und Zeilenumbrüche zusammengefaltet werden, was ein %-Kommentar tatsächlich löscht – folgen aus einer einzigen Sache: der Art, wie TeX die Quelldatei Zeile für Zeile liest. Diese Seite geht diesen Lesevorgang durch und räumt die drei Minen weg, auf die jeder Anfänger tritt – das verschwindende Leerzeichen, das zusätzliche Leerzeichen und die Schriftumstellung, die nicht aufhört – und zwar über den Mechanismus statt über das Symptom.
Wo ein Befehl endet: Kontrollwörter und Kontrollsymbole
Der Name eines Befehls endet beim ersten Zeichen, das kein Buchstabe ist. Der größte Teil einer Quelldatei ist Fließtext, der so gesetzt wird, wie er dasteht; sobald aber ein Backslash \ auftaucht (in manchen japanischen Umgebungen erscheint er als Yen-Zeichen ¥), wechselt TeX die Leseart und beginnt, einen Namen einzulesen. Für diesen Namen gibt es genau zwei Formen. Ein Kontrollwort ist \ gefolgt von ausschließlich Buchstaben (A–Z, a–z); ein Kontrollsymbol ist \ gefolgt von einem einzelnen Nichtbuchstaben. \section, \LaTeX und \newpage gehören zur ersten Gruppe, \$, \%, \& und \ (Backslash-Leerzeichen) zur zweiten.
Diese Unterscheidung ist kein Wortspiel: Sie verändert das Symptom, wenn etwas schiefgeht. Der Name eines Kontrollworts wächst weiter, solange Buchstaben folgen. \LaTeXlogo wird deshalb nicht als \LaTeX plus logo gelesen, sondern als ein einziger Name \LaTeXlogo, den es nicht gibt – der Lauf bricht mit ! Undefined control sequence. ab. Sollen dem Logo Buchstaben folgen, muss der Name mit etwas abgeschnitten werden, das kein Buchstabe ist: einem Leerzeichen, einem Symbol oder {}. Ein Kontrollsymbol steht dagegen nach einem Zeichen fest und kann nicht wachsen, sodass \$5 schlicht als Dollarzeichen gefolgt von 5 gelesen wird. Genau diese Ein-Zeichen-Natur macht \$ und \% sicher, wenn direkt danach eine Ziffer oder ein Symbol steht.
% A control word is letters only; its name stops at the first non-letter.
\LaTeX % the logo
\LaTeXlogo % ! Undefined control sequence. -- read as ONE name
% A control symbol is exactly one non-letter after the backslash.
\$ \% \& \_ % the literal characters $ % & _
\, % a thin spaceWarum \LaTeX is „LaTeXis“ ergibt
Jeder Leerraum unmittelbar nach einem Kontrollwort wird übersprungen, gleich wie viel davon dasteht. Er wird als Signal verbraucht, dass der Name zu Ende ist, und kein Rest davon gelangt in die Ausgabe. Deshalb wird aus \LaTeX is great die Form „LaTeXis great“. Leicht übersehen wird dabei, dass nicht nur Leerzeichen betroffen sind: Tabulatoren ergeht es genauso, und dem Zeilenumbruch ebenfalls. Bricht man die Quelle nach \LaTeX um und schreibt is great in die nächste Zeile, ändert das nichts. Der Ort, an dem „ich habe doch ein Leerzeichen getippt“ am wenigsten zählt, ist genau die Stelle direkt hinter einem Befehl.
Es gibt drei Standardkorrekturen, und alle drei ergeben dasselbe „LaTeX is great“. (1) Leere Klammern, \LaTeX{} is – {} ist kein Buchstabe, der Name endet dort, und das folgende Leerzeichen bleibt als gewöhnlicher Wortzwischenraum erhalten. (2) Das Kontrollleerzeichen, \LaTeX\ is – \ (Backslash plus Leerzeichen) ist der Befehl „setze hier einen Wortzwischenraum“. (3) Den Befehl in Klammern setzen, {\LaTeX} is. In der Praxis ist (1) die sichere Vorgabe: Es verhält sich gleich, ob ein Leerzeichen oder ein Symbol folgt, und es bricht nicht, wenn der Satz später bearbeitet wird. Da dieses verschwindende Leerzeichen bei selbst definierten Befehlen am häufigsten zuschlägt, liefert das Bündel tools das Paket xspace (von David Carlisle und anderen). Steht \xspace am Ende einer Definition, ergänzt es die Lücke nur dann, wenn das nächste Zeichen kein Satzzeichen ist.
\LaTeX is great % -> LaTeXis great (the space is eaten)
\LaTeX{} is great % -> LaTeX is great
\LaTeX\ is great % -> LaTeX is great
{\LaTeX} is great % -> LaTeX is great
% In your own macros, let xspace decide:
\usepackage{xspace}
\newcommand{\myTeX}{\LaTeX\xspace}
\myTeX is great, and \myTeX, and \myTeX. % space added, then not, then notEin Kontrollsymbol frisst das folgende Leerzeichen dagegen nicht: Schreibt man \$ 5, bleibt zwischen Dollarzeichen und 5 ein Wortzwischenraum stehen. Das weist auf die zweite Aufgabe von \ hin. LaTeX setzt nach einem satzbeendenden Punkt standardmäßig etwas mehr Raum, sodass auch ein Punkt, der bloß eine Abkürzung markiert – Prof. Smith, et al. (1993) –, mitgedehnt wird. Prof.\ Smith und et al.\ (1993) sagen LaTeX „hier endet kein Satz“ und halten den Wortabstand gleichmäßig. Für den umgekehrten Wunsch – „hier darf die Zeile nicht brechen“ – dient die Tilde ~. Das ~ in Fig.~1, Chapter~12 oder Donald~E. Knuth ist so breit wie ein normaler Wortzwischenraum, doch dort kann keine Zeile umbrechen. Zur Feinjustierung gibt es \, (thin space): im Mathematikmodus \thinmuskip, also 3 mu beziehungsweise ein Sechstel Geviert, im Text 0,16667 em – in beiden Fällen dieselbe Breite.
Die zwei Aufgaben der geschweiften Klammern: Argumente übergeben und Bereiche abgrenzen
Geschweifte Klammern { } umschließen ein Pflichtargument, eckige Klammern [ ] ein optionales. Die Reihenfolge lautet in der Regel \command[options]{required}: In \section{Introduction} ist {Introduction} der erforderliche Überschriftentext, in \documentclass[12pt]{article} ist [12pt] optional und {article} der Pflichtname der Klasse. An manchen Stellen darf ein einzeichiges Argument ohne Klammern stehen, doch mit Klammern ist es sicherer. Sobald später ein Wort hinzukommt, bricht ein klammerloses Argument auf eine von zwei Arten: Es verschluckt das Nachbarzeichen oder wird von ihm verschluckt.
Klammern haben eine zweite Aufgabe: Sie öffnen eine Gruppe. Die deklarativen Befehle für Schrift oder Größe – \bfseries (fett), \itshape (kursiv), \large (größer) – nehmen überhaupt kein Argument und ändern schlicht „alles ab hier“. Deshalb bleibt der Rest des Dokuments fett, wenn ein solcher Befehl unbeaufsichtigt bleibt. In Klammern gesetzt, ist die Wirkung allein auf diese Gruppe begrenzt; sobald die schließende } überschritten ist, gilt wieder die vorige Einstellung. {\bfseries bold here} back to normal und die Argumentform \textbf{bold here} back to normal liefern dasselbe Ergebnis, doch die erste Form grenzt einen Bereich ab und ist daher die Wahl, wenn mehrere Deklarationen gemeinsam wirken sollen.
\section{Introduction} % {...} = mandatory argument
\documentclass[12pt]{article} % [...] = optional, {...} = mandatory
{\bfseries bold here} back to normal % braces fence the declaration in
\textbf{bold here} back to normal % the argument form does the same
{\large\bfseries several at once} back to normalDieses Abgrenzen ist genau das, worauf eine Umgebung \begin{...} … \end{...} aufbaut. Eine Umgebung öffnet beim Start eine Gruppe und schließt sie am Ende, sodass eine innen vorgenommene Schriftänderung nie nach außen dringt. Klammern und Umgebungen sind dasselbe Werkzeug in unterschiedlichem Maßstab; die Seite zu den Umgebungen führt das weiter aus.
Wie Leerzeichen, Zeilenumbrüche und Leerzeilen zusammengefaltet werden
Jede Folge aufeinanderfolgender Leerzeichen fällt zu einem einzigen Wortzwischenraum zusammen, und ein einzelner Zeilenumbruch in der Quelle wird ebenfalls zu einem Wortzwischenraum. Ein Leerzeichen zwischen zwei Wörtern oder zehn, oder ein Umbruch in die nächste Zeile – die Ausgabe ist dieselbe. Das ist keineswegs lästig, sondern das Scharnier des Entwurfs: Nur weil allein LaTeX über die Zeilenumbrüche entscheidet, funktionieren Blocksatz und Silbentrennung überhaupt. Für die Quelle heißt das: Sie darf auf beliebige Breite umbrochen werden, und Versionsdifferenzen lassen sich auf gut lesbare Zeilen von je einem Satz bringen.
Wie wechselt man also den Absatz? Mit einer Leerzeile. Eine leere Zeile markiert den Absatzumbruch; zwei oder mehr hintereinander zählen weiterhin als ein einziger Umbruch. Hier steckt eine leicht übersehene Feinheit: Auch eine Zeile, die nur Leerzeichen enthält, gilt als Leerzeile. TeX verwirft vor dem Lesen jeder Eingabezeile den Leerraum am Zeilenende, sodass eine Zeile mit lauter Leerzeichen zu einer Zeile ohne Inhalt wird. Bricht ein Absatz dort um, wo er nicht soll, oder weigert er sich dort, wo er soll, ist genau diese Zeile verdächtig – im Editor von einer leeren nicht zu unterscheiden. Die Absatzbehandlung selbst (\par, \parindent) gehört auf die Seite zu Zeilen- und Absatzumbrüchen.
These extra spaces collapse into one,
and this newline becomes a single space too.
A blank line -- and only a blank line -- starts a new paragraph.
Two blank lines do exactly what one does.% entfernt den Zeilenrest – und den Zeilenumbruch gleich mit
Von % bis zum Zeilenende steht ein Kommentar, der beim Satz vollständig ignoriert wird – und es verschwindet nicht nur der Zeilenrest, sondern auch der Zeilenumbruch selbst. Notizen hinterlassen und Befehle vorübergehend stilllegen sind die naheliegenden Zwecke, doch gerade der verschluckte Umbruch hat die zweite Hauptverwendung von % hervorgebracht. Wie der vorige Abschnitt zeigte, wird ein Zeilenumbruch in der Quelle zu einem Leerzeichen. Wer also nur ein langes Wort oder einen langen Befehl über mehrere Quellzeilen falten will, holt sich mit dem Falten ein ungewolltes Leerzeichen ins Haus. Ein % am Zeilenende verhindert das: Die nächste Zeile schließt lückenlos an. Zudem wird bei der nach einem % beginnenden Zeile auch der Leerraum am Zeilenanfang übersprungen, sodass sich die Fortsetzungszeile beliebig einrücken lässt. Die Quelle bleibt übersichtlich, die Ausgabe bleibt ein einziges Wort.
Visible text % from here to the end of the line is dropped, newline included
Anti%
disestablishmentarianism % -> one word: the indent is dropped too
\newcommand{\courseTitle}{%
Advanced Topics in \LaTeX%
} % no stray space at either seam
The rate was 100\% last year. % a literal percent sign is \%Eine Warnung: % ist selbst ein Sonderzeichen, ein wörtliches Prozentzeichen schreibt man also \%. Wird das vergessen, verschwindet der gesamte Zeilenrest – ohne Fehler und ohne Warnung fehlt einfach der halbe Satz im PDF, was zu den unangenehmsten Symptomen überhaupt gehört. Als Kontrollsymbol frisst \% das folgende Leerzeichen nicht. Wie die übrigen Sonderzeichen (#, $, &, _, {, }, ~, ^, \) maskiert werden, steht gesammelt auf der Sonderzeichen-Seite.
Um mehrere Zeilen auf einmal stillzulegen, gibt es zwei Alternativen dazu, jede mit % zu beginnen. Man schließt den Block in die vom Paket verbatim (oder vom Paket comment) bereitgestellte comment-Umgebung ein, \begin{comment} … \end{comment}, oder in \iffalse … \fi, das eine TeX-Bedingung nutzt. Letzteres braucht kein Paket und geht schnell, doch TeX liest den Inhalt weiterhin ein; ein unausgeglichenes \if im geparkten Text bricht dort ab. Um einen ganzen Entwurf einzumotten, ist die comment-Umgebung die berechenbarere Wahl.
\usepackage{verbatim} % in the preamble
\begin{comment}
This whole block is ignored.
\end{comment}
\iffalse
Draft text, parked with no package needed.
\fiWas zu prüfen ist, wenn ein Leerzeichen verschwindet oder auftaucht
Teilen Sie das Problem danach, ob das Symptom mit einer Fehlermeldung kam. Ein Lauf, der etwa mit ! Undefined control sequence. abbricht, verweist darauf, wo ein Befehlsname endete; eine bloß falsche Ausgabe ohne Fehler und ohne Warnung verweist auf Leerraum und Kommentare. Das ist die Reihenfolge. Die zweite Art liefert keine brauchbare Zeilennummer, also hilft nur das Eingrenzen nach Kategorie. Etwas vor der gemeldeten Zeile beginnend, prüft man, ob ein Befehlsname die folgenden Buchstaben verschluckt hat und ob {...} und [...] ausgeglichen sind; danach, ob ein % am Zeilenende ein benötigtes Leerzeichen entfernt hat oder ob ein wörtliches Prozentzeichen ohne sein \% geschrieben wurde.
| Geschrieben | Symptom | Korrektur |
|---|---|---|
\LaTeXlogo | bricht mit ! Undefined control sequence. ab | Den Namen mit einem Nichtbuchstaben beenden, etwa \LaTeX{}logo |
\LaTeX is | Wörter kleben zu „LaTeXis“ zusammen | \LaTeX{} is oder \LaTeX\ is; in eigenen Makros \xspace |
\bfseries | alles danach bleibt fett | Als {\bfseries ...} einfassen oder \textbf{...} verwenden |
100% | der Zeilenrest verschwindet stillschweigend | Ein wörtliches Prozentzeichen muss 100\% heißen |
(a line of spaces) | ein Absatz bricht an unerwarteter Stelle um | Eine Zeile aus lauter Leerzeichen ist eine Leerzeile; Sonderzeichen im Editor anzeigen |
Schließlich hilft es mehr, Gewohnheiten festzulegen, die nicht brechen, als Regeln auswendig zu lernen: einen Befehlsnamen mit {} abschneiden, wenn Buchstaben folgen; semantische Einheiten in {...} einfassen; lange Definitionen mit einem % am Zeilenende umbrechen statt in eine Zeile zu pressen; und auskommentierte alte Fassungen nicht in der .tex ansammeln lassen – Versionen zum Vergleichen gehören in ein Verlaufswerkzeug wie Git, in der Datei bleibt nur, was gesetzt werden soll, damit Fehlerzeilennummern zum echten Manuskript passen und das Debuggen schneller geht. Diese vier Gewohnheiten fangen den größten Teil der Anfangsstolperer ab.