Ein Leerzeichen in einer LaTeX-Quelle ist kein Zeichen, sondern ein Maß. In 10-Punkt-Computer-Modern ist der Abstand zwischen zwei Wörtern genau 3,33252 pt – und nachgemessen sind es auch ~ und \ (Backslash plus Leerzeichen). An anderen Stellen dagegen überlebt kein einziges der getippten Leerzeichen: Deshalb wird aus \LaTeX is das Wort „LaTeXis“. Diese Seite behandelt die gemessenen Breiten der Abstände, die LaTeX selbsttätig einfügt, die Befehle, die ein verschwundenes Leerzeichen zurückholen, und die Wahl zwischen ~, \hspace und \quad, wenn ein Abstand von Hand gesetzt wird.
Wie breit ist ein LaTeX-Leerzeichen in Punkt?
Misst man einen 10-Punkt-article mit T1-Computer-Modern, ergibt sich für den Wortzwischenraum 3,33252 pt, mit 1,66626 pt Dehnung und 1,11084 pt Schrumpfung. Diese drei Zahlen gehören zur Schrift selbst; TeX nennt sie \fontdimen2, \fontdimen3 und \fontdimen4. Ein LaTeX-Leerzeichen ist also keine feste Breite, sondern eine dehnbare Breite – in TeX-Sprache Glue. Blocksatzzeilen schließen genau deshalb bündig ab, weil diese Dehnung und Schrumpfung zeilenweise verteilt wird; wäre das Leerzeichen ein Zeichen, ginge das gar nicht.
Die selbst gesetzten Abstände enthalten dagegen mehrere, die überhaupt nicht dehnbar sind. \, (ein schmaler Abstand) misst 1,6663 pt, \enspace 4,99878 pt, \quad 9,99756 pt und \qquad 19,99512 pt. Alle vier sind in em definiert: \quad ist genau 1 em, \qquad 2 em, \, ein Sechstel em und \enspace ein halbes em. Da das em der Schriftgröße folgt, wächst dasselbe \quad innerhalb von \large auf 11,74713 pt, während \hspace{10pt} überall 10 pt bleibt. Em-Maße, wenn der Abstand dem Text folgen soll; absolute Längen, wenn er zu einer Abbildung oder Linie passen muss – mehr ist an der Wahl nicht dran.
| Befehl | Gemessen bei 10pt | Definition und Verhalten |
|---|---|---|
(ordinary blank) | 3,33252 pt | \fontdimen2; Glue mit 1,66626 pt Dehnung und 1,11084 pt Schrumpfung |
\ | 3,33252 pt | Steuerleerzeichen; Wortzwischenraumbreite, aber immun gegen die Satzendregel |
~ | 3,33252 pt | \ mit vorangestelltem \nobreak: gleiche Breite, aber kein Zeilenumbruch |
\, | 1,6663 pt | schmaler Abstand von einem Sechstel em; identisch mit \thinspace; starr |
\negthinspace | −1,66631 pt | die Umkehrung von \,; zum Zusammenziehen |
\enspace | 4,99878 pt | ein halbes em; praktisch um Listenmarken herum |
\quad | 9,99756 pt | genau 1 em; wächst innerhalb von \large auf 11,74713 pt |
\qquad | 19,99512 pt | 2 em; zum Trennen von Formeln oder Beispielen |
\hspace | wie angegeben | \hspace{10pt} ist immer 10 pt – wird am Zeilenanfang aber verworfen |
\hspace* | wie angegeben | die Variante, die am Zeilenanfang bestehen bleibt; dort auch kein Umbruch |
\LaTeX\ is und \LaTeX{} is sind nicht gleich breit
Ein Leerzeichen direkt hinter einem nur aus Buchstaben bestehenden Befehl wird als Signal für das Ende des Befehlsnamens aufgebraucht; kein einziger Punkt davon erreicht das Papier. Gemessen ist \LaTeX is 32,37791 pt breit und \LaTeX\ is 35,71043 pt – eine Differenz von genau 3,33252 pt, also einem Wortzwischenraum. Wer nach „LaTeX Leerzeichen verschwindet“ sucht, stößt zuerst auf dieses Symptom, und pdftotext liefert aus dem PDF tatsächlich das zusammengezogene LaTeXis. Mehr Leerzeichen oder ein Zeilenumbruch in der Quelle ändern nichts.
Es gibt drei Abhilfen, und \LaTeX\ is, \LaTeX{} is sowie {\LaTeX} is messen alle 35,71043 pt. Doch „alle drei sind gleich“ gilt nur unter einer Bedingung. Nach einem Punkt trennen sich die Wege: etc.\ Next misst 39,99023 pt, etc.{} Next dagegen 41,10107 pt – eine Differenz von 1,11084 pt, genau der am Satzende zugeschlagenen Zusatzbreite (\fontdimen7). Der Grund: \ ist ein Abstand, der diesen Zuschlag nie erhält, während ein gewöhnliches Leerzeichen nach {} als Satzabstand verbreitert wird. \ stellt also nicht nur eine verlorene Lücke wieder her, es hebt zugleich die Satzendbehandlung auf – deshalb ist es die Korrektur für Abkürzungen wie Fig.\ 5. Die Heuristik hinter dem Satzabstand selbst – \sfcode, \@, \frenchspacing – behandelt die Seite zur Interpunktion.
% widths measured with \sbox0{...}\typeout{\the\wd0}
% pdfLaTeX, TeX Live 2024, 10pt article, T1 Computer Modern
\LaTeX is % 32.37791pt -> "LaTeXis" (the blank is eaten)
\LaTeX\ is % 35.71043pt
\LaTeX{} is % 35.71043pt
{\LaTeX} is % 35.71043pt
% ...but after a period the two fixes are NOT the same:
etc.\ Next % 39.99023pt (control space: no sentence space)
etc.{} Next % 41.10107pt (+1.11084pt = \fontdimen7)Warum xspace ebenso oft Falle wie Lösung ist
Mit dem Paket xspace schließt man eigene Befehle mit \xspace ab, worauf ein Abstand gesetzt wird, „sofern das nächste Zeichen kein Satzzeichen ist“ – man spart sich das ständige \LaTeX{}. Der Test ist allerdings nichts weiter als ein Abgleich mit einer Ausnahmeliste. Die Liste in xspace.sty aus TeX Live 2024 (gepflegt vom LaTeX Project, Teil des tools-Bündels) enthält Komma, Punkt, Apostroph, Schrägstrich, Fragezeichen, Semikolon, Doppelpunkt, Ausrufezeichen, Tilde, Bindestrich und die schließende runde Klammer, dazu \ , \/, die geschweiften Klammern, \space, \footnote und \footnotemark. Vor allem, was nicht auf dieser Liste steht, setzt \xspace einen Abstand.
Die schließende eckige Klammer ] steht nicht auf der Liste. Definiert man also \newcommand{\eg}{e.g.\xspace} und schreibt [\eg], lautet die Ausgabe [e.g. ] – ein Leerzeichen unmittelbar vor der Klammer. Schlimmer noch: Da davor ein Punkt steht, ist der eingefügte Abstand ein Satzendabstand; gemessen 22,2168 pt gegenüber 17,77344 pt ohne \xspace, eine Differenz von 4,44336 pt. Dasselbe passiert vor \eg\% (Ergebnis e.g. %), vor \eg\@. und vor einem geraden Anführungszeichen. Und es geht auch in die andere Richtung: Schreibt man vorsichtshalber \eg{}, trifft die Klammer eine Ausnahme, es wird gar kein Abstand gesetzt, und \eg{}x erscheint als e.g.x.
\usepackage{xspace}
\newcommand{\eg}{e.g.\xspace}
\eg foo % "e.g. foo" correct
\eg, foo % "e.g., foo" correct (comma is an exception)
[\eg] % "[e.g. ]" WRONG -- ] is not an exception
\eg\% % "e.g. %" WRONG
\eg{}x % "e.g.x" WRONG -- the brace matches an exception
% You can patch the list, but every new case needs another patch:
\xspaceaddexceptions{]}Man kann die Liste mit \xspaceaddexceptions{]} erweitern, doch nach jeder Ergänzung zählt man erneut, was als Nächstes vergessen wurde. Deshalb verzichten erfahrene Autoren meist ganz auf \xspace: Sie definieren schlicht \newcommand{\eg}{e.g.} und schreiben an der Aufrufstelle \eg{} foo, oder sie lassen das Abkürzungsmakro weg und tippen einfach e.g.. \xspace lohnt sich wirklich nur dort, wo das Makro häufig aufgerufen wird und man garantieren kann, dass nur gewöhnliche Wörter folgen – etwa bei einem Produkt- oder Projektnamen.
Wo der Bindungsstrich ~ Pflicht ist: der Abstand, der nie umbricht
~ ist ein Abstand von der Breite eines Wortzwischenraums, an dem keine Zeile umbrechen darf. Dahinter steckt keine besondere Art von Leerzeichen: Die Definition in latex.ltx lautet \DeclareRobustCommand{\nobreakspace}{\leavevmode\nobreak\ } – ein schlichtes \ mit vorangestelltem \nobreak. Gemessen ergibt x~y daher dieselbe Lücke von 3,33252 pt wie x\ y, und wie \ nimmt es den Satzendzuschlag nicht an (x.~y misst 16,6626 pt gegenüber 17,77344 pt für ein einfaches x. y). Alles, was unter „LaTeX Tilde Zeilenumbruch“ gesucht wird, läuft auf dieses eine \nobreak hinaus.
Am deutlichsten zeigt sich die Wirkung in einer schmalen Spalte. Setzt man „We show in Figure 5 that it holds.“ in eine parbox von 3 cm, endet die Zeile auf Figure, und 5 eröffnet die nächste. Schreibt man Figure~5, trennt TeX lieber Fig-ure, als die beiden auseinanderzureißen. ~ verbietet also nicht bloß einen Umbruch, es lässt TeX eine andere Umbruchfolge suchen. Wirklich zwingend ist es dort, wo eine allein am Zeilenanfang gestrandete Zahl, ein Zeichen oder eine Abkürzung unverständlich wird – Figure~5, Section~2, Eq.~(3), Chapter~12, Dr.~Smith, Knuth~(1984), Initialen wie D.~E. Knuth und Werte mit Einheit wie 10~kg. Bei Querverweisen und Zitaten gehört der Bindungsstrich vor \ref und \cite: Figure~\ref{fig:main}, see~\cite{knuth1984}.
% in a 3cm column, the plain space breaks the reference in half:
We show in Figure 5 that it holds. % -> "...in Figure / 5 that..."
We show in Figure~5 that it holds. % -> "...in Fig-/ure 5 that..."
See Section~\ref{sec:method} and Figure~\ref{fig:main}.
As shown by Knuth~\cite{texbook}, a mass of 10~kg suffices.
D.~E. Knuth, Dr.~Smith, Eq.~(3), Chapter~12.Zwei Warnungen. Erstens verweigert ~ nur den Zeilenumbruch, es verhindert keine Silbentrennung. Genau das geschah oben, als Fig-ure getrennt wurde; soll das Wort selbst zusammenbleiben, nimmt man \mbox{...}. Zweitens macht LaTeX ~ zu einem aktiven Zeichen, sodass man es außerhalb von verbatim nicht einfach tippen kann, um eine Tilde in einer URL oder einem Pfad zu erhalten. Für das Tildezeichen im Fließtext dient \textasciitilde.
Der Unterschied zwischen \hspace und \hspace*
Mitten in einer Zeile verhalten sich beide gleich. Der Unterschied zeigt sich, wenn die Zeile genau an dieser Lücke umbricht. TeX verwirft Glue, der unmittelbar hinter einem Umbruch steht, also verschwindet \hspace{1.5cm} vollständig, sobald der Umbruch dort fällt. Gemessen: Setzt man alpha beta gamma\hspace{1.5cm}epsilon zeta in eine 3-cm-Spalte, bricht TeX an der Lücke um, und die 1,5 cm tauchen nirgends auf. Mit \hspace*{1.5cm} findet dort kein Umbruch statt – stattdessen wird epsilon getrennt, und die Lücke von 1,5 cm bleibt auf dem Papier.
In der Praxis gilt: die Sternform wählen, wenn die Lücke Teil des Layouts ist – ein Unterschriftsfeld auf dem Titelblatt, ein fester Abstand vor oder nach einer Überschrift, oder eine Zeile, in der \hspace zusammen mit \hfill Elemente an gegenüberliegende Ränder schiebt. Geht es nur um etwas Luft zur besseren Lesbarkeit, ist die sternlose Form richtig, und ihr Verschwinden am Zeilenende ist eher Vorzug als Mangel. Negative Werte sind ebenfalls erlaubt: \hspace{-1em} zieht den Text messbar um genau ein Em zurück.
\ignorespaces und \unskip: den Abstand tilgen, den eine Umgebung ausschwitzt
\ignorespaces überliest jedes folgende Leerzeichen, während \unskip ein bereits gesetztes Glue-Element davor entfernt. Das erste frisst Eingabe, das zweite kürzt Ausgabe – so gemerkt, verwechselt man beide nie. Gemessen: a b ist 13,8855 pt, a \unskip b ist 10,55298 pt, also genau einen Wortzwischenraum kürzer. Auch a\ignorespaces b mit zwei Leerzeichen ergibt 10,55298 pt.
Ihren Nutzen zeigen sie vor allem rund um selbst definierte Umgebungen. Definiert man \newenvironment{note}{\textbf{Note:}}{\textbf{.}} und schreibt \begin{note} yes \end{note} tail, gelangen die Leerzeichen nach \begin{note} und vor \end{note} beide aufs Papier; das Ganze misst 70,92018 pt. Ergänzt man \ignorespaces am Ende des Anfangsteils und \unskip am Beginn des Schlussteils, misst es 63,1443 pt – auf den scaled point genau dasselbe, als hätte man \textbf{Note:}yes\textbf{.} tail von Hand geschrieben. Der aus dem PDF extrahierte Text wechselt von Note: yes . tail zu Note:yes. tail. Diese beiden Wörter in einer Umgebungsdefinition zahlen sich besonders bei gemeinsamen Manuskripten aus: Ob jemand nach \begin umbricht oder nicht, spielt für die Ausgabe dann keine Rolle mehr.
% leaks a space on both sides -- measured 70.92018pt
\newenvironment{naive}{\textbf{Note:}}{\textbf{.}}
% tight on both sides -- measured 63.1443pt, identical to hand-set text
\newenvironment{tidy}{\textbf{Note:}\ignorespaces}{\unskip\textbf{.}}
\begin{tidy} yes \end{tidy} tail
% \ignorespacesafterend also swallows the blank AFTER \end{...};
% use it only when the environment must butt against what follows.- Setzen Sie die Bindungsstriche gleich mit.
Figure~\ref{...},Section~2,10~kgundDr.~Smithschon beim Schreiben mit~; sie später aufzuspüren ist teuer. \erfüllt zwei Aufgaben: Es stellt einen verlorenen Abstand wieder her und hebt die Satzendbehandlung auf. Die zweite ist es, dieFig.\ 5funktionieren lässt.- Auf
\xspacegrundsätzlich verzichten. Wird es doch verwendet, vor der Abgabe wenigstens schließende eckige Klammer,\%und Anführungszeichen prüfen. \hspace*für Lücken, die zum Layout gehören,\hspacefür Lücken, die nur das Lesen erleichtern. Nur die Sternform bleibt am Zeilenanfang erhalten.\ignorespacesund\unskipvom ersten Tag an in eigene Umgebungen einbauen. Gleich bei der Definition eingesetzt, taucht auch in einem wachsenden Manuskript kein Streuabstand auf.