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
Gelöst!
Ich habe das Problem inzwischen lösen können. Man muss dazu das Paket xspace verwenden. Siehe unten:
Bei mir führt das zu einer Fehlermeldung
Konkret ergibt Dein sogenanntes Minimalbeispiel:
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 Paketxspace
. 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.Sicher funktioniert das!
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. ;)
Hmm...
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
So ist es
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.Du verwechselst schlicht <code> mit <pre>
Siehe dazu auch: Wie kann ich Text in Beiträge im Forum oder Blog formatieren?.