PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Text als Command



latexy
01-10-2012, 10:57
Hallo Leute,

ich wollte eine bestimmte Zeichenkette, die ich in meinem Dokument sehr oft brauche, durch einen Command abkürzen. Ungefähr so:
\newcommand{\ad}{ein sehr langer und komplizierter Ausdruck}
Problem ist: Wenn ich nun im Text \ad einbaue, hängt er das darauf folgende Wort ohne Leerzeichen an den Ausdruck an, obwohl ich nach \ad ein Leerzeichen setze, wenn benötigt. Wie lässt sich dieses Problem beheben?

Danke!

rstuby
01-10-2012, 11:26
Ich würde in diesen Fällen statt des normalen Leerzeichens einfach ein ~ setzen, aber es gibt bestimmt eine elegantere Möglichkeit, die kenne ich bloß nicht.

Du hast mehr Chancen auf eine richtig gute Antwort, wenn du ein lauffähiges Minimalbeispiel erstellst, mit dem wir experimentieren können.

ctansearch
01-10-2012, 11:52
Liegt wohl daran, daß im Ausdruck kein Leerzeichen steht


\documentclass{article}

\newcommand{\ad}{ ein sehr langer und komplizierter Ausdruck }
\begin{document}

Text Text Text \ad Text
\end{document}

rstuby
01-10-2012, 12:00
ctansearch, dann kommt aber auch vor Satzzeichen ein Leerzeichen.

latexy
01-10-2012, 12:07
Liegt wohl daran, daß im Ausdruck kein Leerzeichen steht


\documentclass{article}

\newcommand{\ad}{ ein sehr langer und komplizierter Ausdruck }
\begin{document}

Text Text Text \ad Text
\end{document}


Das will ich ja auch nicht, schließlich könnte der Ausdruck ja auch am Ende eines Satzes stehen, dann käme ein Punkt direkt danach.

latexy
01-10-2012, 12:10
Ich würde in diesen Fällen statt des normalen Leerzeichens einfach ein ~ setzen, aber es gibt bestimmt eine elegantere Möglichkeit, die kenne ich bloß nicht.

Du hast mehr Chancen auf eine richtig gute Antwort, wenn du ein lauffähiges Minimalbeispiel erstellst, mit dem wir experimentieren können.

Das klappt, danke. Zwar nicht optimal, aber in Ordnung.

Donalduck
01-10-2012, 12:18
Ist nicht genau dafür das xspace Paket?

ctansearch
01-10-2012, 13:26
@rstuby Richtig.
@latexy
Vielleicht so


\documentclass{article}
\newcommand{\ad}[1]{ein sehr langer und komplizierter Ausdruck#1}
\begin{document}
Text Text Text \ad\ Text \\
Text Text Text \ad. Text \\
Text Text Text \ad, Text \\
Text Text Text \ad; Text \\
\end{document}


Satzzeichen setzt Du ja eh selbst, weißt also immer, wo das \ad steht.

bobmalaria
01-10-2012, 15:13
hi,

also xspace wurde ja bereits als paket genannt. das sollte auch die richtige loesing sein. alles andere ist schon viel gepfuscht, oder?

also \newcommand{\bla}{bla blubb bla bla\xspace}

sollte dafuer sorgen, dass erkannt wird ob der text inmitten der satzes steht oder eben an einem satzende.

will man das grundsaetzlich nicht ueber ein zusatzpaket loesen, dann hilft es nur explizit \bla{} zu schreiben wenn man ein leerzeichen haben moechte.

gruss

ctansearch
01-10-2012, 18:29
@bobmalaria
Gepfuscht ist aber ein hartes Wort. Das könntest Du höchstens behaupten, wenn die Lösungen nicht funktionieren oder Du nachteilige Wirkungen nachweisen kannst.
:-)

ctansearch
01-10-2012, 22:17
Ich sehe im Paket xspace keinen Vorteil. Um zu erkennen, an welchen Platz der Ausdruck steht, greift xspace auf die entsprechenden Zeichen ,.'/?;:!~-)\ zu und interpretiert diese. Sie müssen also gesetzt werden, bevor xspace sie interpretieren kann.

Das macht mein kleines Beispiel auch ohne Zusatzpaket .

Insofern ist xspace überflüssig, oder gibt es noch andere Argumente dazu?

bobmalaria
02-10-2012, 09:58
entschuldige, ich wollte nicht harsch klingen. hab ich so auf die schnelle eingetippt. deine lösing sieht für normalen text auch gut aus und macht ein extra paket tatsächlich unnötig.

gruss

cgnieder
02-10-2012, 11:26
Dass Makros das folgende Leerzeichen verschlucken, hat einen guten Grund. Wie wollte man sonst etwa TeXbook schreiben?

\TeX book
Die übliche Art und Weise damit umzugehen ist, entweder braces oder ein explizites Leerzeichen anzufügen:

% Präambel:
\newcommand*\ad{ein sehr langer und komplizierter Ausdruck}
% Dokument:
Text \ad{} Text oder Text \ad\ Text.
Die automatisierte Variante ist natürlich bereits erwähntes xspace Paket und sein \xspace Befehl. Der hat allerdings auch Nachteile. Vergleiche

% ohne xspace
\documentclass{article}
\newcommand*\naif{\textit{na\"\i f}}
\begin{document}

He was a true \naif. % korrekte (ausgelassene) Kursiv-Korrektur
% geht so aber nicht ohne {} oder \
He was such a \naif he expected this example to work.

\end{document}
mit

% mit xspace
\documentclass{article}
\usepackage{xspace}
\newcommand*\naif{\textit{na\"\i f}\xspace}
\begin{document}

He was a true \naif. % falsche (weil nicht ausgelassene) Kursiv-Korrektur
He was such a \naif he expected this example to work.

\end{document}

Grüße