Sie sind hier

Ich habe zusätzliche Leerzeichen/Einzüge in meinem Text, die da nicht hingehören. Woher kommen die?

Parser und Scanner von TeX sind eng miteinander verknüpft. Gehen wir davon aus, dass alle Zeichen ihre üblichen catcodes haben, dann gilt:

  • Zeilenenden werden wie Leerzeichen behandelt.
  • Mehrere aufeinanderfolgende Leerzeichen werden zu einem zusammengefasst.
  • Mehrere aufeinanderfolgende Leerzeilen werden als Absatzende (\par) aufgefasst.
  • Leerzeichen nach Zahlen, die als Zahlen gelesen werden, werden als Ende der Zahl aufgefasst. Dies betrifft ordentlichen LaTeX-Code weniger, da man in LaTeX mit \setcounter, \addtocounter, \value, \roman, \Roman, \arabic, \Alph und \theZählername arbeitet.
  • Leerzeichen nach einem Makro werden als Ende des Makros interpretiert (Beispiel: »\normalsize   \normalfont« wird als »\normalsize« und »\normalfont« interpretiert).
  • Nicht-Buchstaben unmittelbar nach einem Makro beenden ebenfalls das Makro, werden aber interpretiert (Beispiel: »\normalsize9 wird als »\normalsize« und »9« interpetiert; »\textbf9« wird als »\textbf« mit Argument »9« und »\textbf98« als »\textbf« mit Argument »9« und als »8« interpretiert).
  • Außer in Klassen und Paketen und zwischen \makeatletter und \makeatother ist das at-Zeichen (»@«) ein Nicht-Buchstabe.
  • Argumentklammern sind Nicht-Buchstaben!.
  • Leerzeichen zwischen Argumentklammern werden in der Regel ignorriert.
  • Leerzeichen zwischen Gruppenklammern werden nicht ignorriert.
  • Leerzeichen nach optionalen Argumenten oder optionalen Sternen an Makros werden in der Regel ignorriert.
  • LaTeX definiert einige Anweisungen so, dass versucht wird, Leerzeichen vor und nach der Anweisung zusammenzufassen (beispielsweise \index{foo}). Das funktioniert jedoch nicht immer.
  • LaTeX definiert einige Umgebungen so, dass Leerzeichen danach ignorriert werden. Dies gilt in der Regel für die Umgebungen, die in den vertikalen Modus schalten (also inbesondere nicht für tabular und minipage, die innerhalb des horizontalen Modus vertikales Material setzen).

Das bedeutet beispielsweise, dass bei einem Makro, das wie folgt definiert ist:

\newcommand*{\Beispiel}[1]{
  { \sffamily{ \bfseries
      #1}
  }
}

Drei signifikante Leerzeichen vor dem Argument und zwei danach eingefügt werden. Zu besseren Verdeutlichung hier die Definition noch einmal, wobei ich die signifikanten Leerzeichen als »« und die Zeilenenden, die zu signifikanten Leerzeichen werden, durch »« markiert habe:

\newcommand*{\Beispiel}[1]{
  {\sffamily{\bfseries
      #1}
  }
}

Will man diese Leerzeichen nun wegbekommen, so muss man die einen schlicht weglassen, die anderen auskommentieren:

\newcommand*{\Beispiel}[1]{%
  {\sffamily{\bfseries
      #1}%
  }%
}

Das war es schon fast. Als letztes bleibt zu erwähnen, dass eine Verschiebung eines ganzen Blocks wie beispielsweise einer tabular, \parbox oder einer minipage manchmal einfach nur durch den normalen Absatzeinzug entsteht. Das ist immer dann der Fall, wenn dieser Block am Anfang des Absatzes oder auch ganz alleine im Absatz steht. In diesem Fall hilft ein schlichtes \noindent am Anfang des Absatzes.

Comments for "Ich habe zusätzliche Leerzeichen/Einzüge in meinem Text, die da nicht hingehören. Woher kommen die?" abonnieren