Sie sind hier

Leerzeichen nach Kommando ignoriert?

Hallo zusammen,

ich habe eine Frage zu den Leerzeichen nach einem selbst definierten Kommando.

Minimalbeispiel:

\documentclass{scrartcl}
 
\begin{document}
Donec in sem a quam congue \abc tempor. Maecenas non nisl.
\end{document}

Das hier führt leider dazu, dass "tempor" direkt hinter "ABC" steht - ohne Leerzeichen. Wenn ich in der Kommandodefinition ein Leerzeichen einfügen (\newcommand{\abc}{ABC }), wird jedoch immer ein Leerzeichen gesetzt, was ja z.B. nicht der Fall sein soll, wenn ein Punkt folgt.

Ich hoffe, ihr könnt mir helfen, wie man das lösen kann.

Danke und viele Grüße
Sven

forum: 

Ich habe das Problem inzwischen lösen können. Man muss dazu das Paket xspace verwenden. Siehe unten:

\newcommand{\abc}{ABC\xspace}
 
\documentclass{scrartcl}
 
\usepackage{xspace}
 
\begin{document}
Donec in sem a quam congue \abc tempor. Maecenas non nisl \abc.
\end{document}
Bild von Markus Kohm

Konkret ergibt Dein sogenanntes Minimalbeispiel:

! Undefined control sequence.
l.3  Donec in sem a quam congue \abc
                                     tempor. Maecenas non nisl.

Ich schließe daraus, dass Du es nicht selbst ausprobiert hast. Nächstes Mal bitte unbedingt vor dem Posten testen!

Dass Leerzeichen nach einem Makro ignoriert werden, liegt übrigens nicht daran, dass Du das Makro selbst definiert hast. Das ist wie ich in meinen FAQ-Eintrag zu signifikanten Leerzeichen ausgeführt habe, für TeX ganz normal. Es sie hier nur an LaTeX-Anweisungen wie \LaTeX aber auch an TeX-Primitive wie \relax erinnert. Die Standardlösung ist in dem Fall wahlweise das Einfügen einer Gruppenklammer, beispielsweise in der Form »\LaTeX{}«, oder das Einfügen eines expliziten Leerzeichens, beispielsweise »\LaTeX\ «. Darüber hinaus gibt es noch das Paket xspace. Man sollte sich aber darüber im Klaren sein, dass dieses Paket in einigen Situationen auch nicht zum gewünschten Ergebnis führen kann. Näheres ist der Anleitung zum Paket xspace zu entnehmen.

Vielen Dank für die Rückmeldung.

Natürlich habe ich das Beispiel vorher getestet und es funktioniert einwandfrei. Leider scheint das Forum den Code-Tag nicht richtig umzusetzen (bei Leerzeilen). Aus diesem Grund ist nur die erste Zeile als Code dargestellt.

Also nächstes Mal bitte den vollständigen Code testen. ;)

Ich glaube, ich habe dich doch missverstanden. Du hast dich auf das Beispiel oben bezogen. Da gebe ich dir völlig Recht. Da ist mir die Definition mit \newcommand durch die Lappen gegangen. Wohl einer Fehler beim Kopieren.

Ich dachte, du beziehst dich auf die Lösung. Die funktioniert natürlich einwandfrei.

Schöne Grüße
Sven

Bild von Markus Kohm

Als ich meinen Kommentar begonnen hatte, war Deine Selbstantwort noch gar nicht zu lesen. Ich habe die erst zu sehen bekommen, als ich den Kommentar abgeschickt hatte. Da darin noch ein wenig mehr an Information steckte als in Deiner Selbstantwort, habe ich meinen Beitrag dann drin gelassen.

BTW: Die meisten Klassen gehen nicht ganz zu Unrecht davon aus, dass sie alles definieren dürfen, was der LaTeX-Kern nicht bereits definiert. Deshalb wird in vielen Klassen ungeniert von \def Gerbauch gemacht. KOMA-Script ist diesbezüglich eher als Ausnahme zu betrachten. Ich habe nämlich irgendwann beschlossen, möglichst viel mit \newcommand abzusichern. Leider gehen auch viele Pakete davon aus, dass sie ungeniert \def verwenden dürfen. Das halte ich wiederum für einen Fehler der Paketautoren. KOMA-Script-Pakete machen das allenfalls mit internen Makros, die einen eindeutigen Präfix haben. Jedenfalls: Wenn Du Makros schon vor \documentclass definierst, hast Du keinerlei Schutz davor, dass die Klasse oder ein Paket das umdefinieren. Wenn Du aber erst nach der Klasse und den Paketen zu \newcommand greifst, dann bekommst Du im Falle einer Kollision eine Fehlermeldung. Deshalb: Eigene Anweisungen sollte man erst nach dem Laden der Klasse und am besten auch nach dem Laden der Pakete definieren.

Comments for "Leerzeichen nach Kommando ignoriert?" abonnieren