Um das Problem und die Lösung verständlich zu machen, muss ich ein wenig ausholen und die Hintergründe erklären. Parser und Scanner von TeX sind eng miteinander verknüpft. Gehen wir davon aus, dass alle Zeichen ihre üblichen catcodes haben, dann gilt:
\par) aufgefasst.\setcounter, \addtocounter, \value, \roman, \Roman, \arabic, \Alph und \the<Zählername> arbeitet.\normalsize \normalfont« wird als »\normalsize« und »\normalfont« interpretiert).\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).\makeatletter und \makeatother ist das at-Zeichen (@) ein Nicht-Buchstabe.\index{foo}). Das funktioniert jedoch nicht immer.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}
}
}
gleich 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}¶
}¶
}
Sollen diese Leerzeichen beseitigt werden, so müssen die einen schlicht weglassen und die anderen auskommentiert werden
\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 es, entweder keinen Absatz zu machen, also beispielsweise vorhandenene Leerzeilen zu entfernen oder notfalls ein \noindent am Anfang des Absatzes einzufügen.