Makro und Leerzeichen (lookahead?)

Antwort erstellen


Diese Frage dient dazu, das automatisierte Versenden von Formularen durch Spam-Bots zu verhindern.
Smilies
:D :) :( :o :shock: :? 8) :lol: :-x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen:

BBCode ist eingeschaltet
[img] ist eingeschaltet
[flash] ist ausgeschaltet
[url] ist eingeschaltet
Smilies sind eingeschaltet

Die letzten Beiträge des Themas

Ich habe die Datenschutzerklärung gelesen und bin damit einverstanden.

   

Wenn du eine Datei oder mehrere Dateien anhängen möchtest, gib die Details unten ein.

Ansicht erweitern Die letzten Beiträge des Themas: Makro und Leerzeichen (lookahead?)

von phi » Fr 29. Okt 2010, 08:12

Als kompakte und umfassende Einführung empfehle ich auch gerne TeX by Topic (kostenlos, bei den meisten Distributionen dabei).

von RalfR » Do 28. Okt 2010, 23:10

Danke für die präzise Antwort!

Die Makrobefehle und das Token-Konzept muss
ich erstmal verstehen, ich habe mir aber
inzwischen das TeXbook von Donald Knuth
besorgt und werde mich mal genauer
damit beschäftigen.

danke und Grüße,

Ralf

von phi » Do 28. Okt 2010, 21:11

Man kann nicht überprüfen, ob nach einem Befehl ein Leerzeichen folgt, denn die nachfolgenden Leerzeichen werden bereits beim Einlesen verschluckt. xspace überprüft vielmehr (mittels \futurelet), ob ein Buchstabe oder ein Zeichen aus der Ausnahmenliste folgt. Eine stark vereinfachte Version von xspace ohne Ausnahmenliste könnte so aussehen:
\documentclass{minimal}

\newcommand*{\xspace}{\futurelet\next\xspaceAux}
\newcommand*{\xspaceAux}{\ifcat\noexpand\next A \fi}
\newcommand*{\Hallo}{Hallo\xspace}

\begin{document}

\Hallo Welt!

\Hallo, Welt!

\end{document}

von RalfR » Mi 27. Okt 2010, 16:31

Genau!

Ich habe mir mal den Quellcode von xspace
angeguckt, da verstehe ich noch nichts,
aber irgendwo dort muss ja auch die Stelle sein,
wo das Makro abfragt, ob ein Leerzeichen folgt,
und davon abhängig eins einfügt oder nicht.

Damit komme ich weiter: Danke!

von Xenara » Mi 27. Okt 2010, 16:10

Meinst du zufällig sowas wie "xspace"?
\documentclass{scrbook}
\usepackage[ngerman]{babel} 
\usepackage[ansinew]{inputenc}
\usepackage[T1]{fontenc}

\usepackage{xspace}

\newcommand{\recipient}{Herr Müller\xspace} 

\begin{document}
Lieber \recipient,

\recipient ist der Empfänger dieses Briefes. 

\end{document}

Makro und Leerzeichen (lookahead?)

von RalfR » Mi 27. Okt 2010, 15:48

Hallo,

ich habe ein Problem mit der Definition
eines eigenen Befehls:

\newcommand{\recipient} {Herr Müller}

Und dann bei der Verwendung

(1) Lieber \recipient,

(2) \recipient ist der Empfänger dieses Briefes.

funktioniert (2) nicht, weil das erforderliche Leerzeichen
vor dem Wot "ist" ignoriert wird.

Jetzt gibt es ja zwei einfache Lösungen:

(A)
Aus (2) wird
(2') \recipient~ist der Empfänger dieses Briefes.

(B)

\newcommand{\recipient} {Herr Müller}
\newcommand{\recipientWithSpace} {Herr Müller }

(1) Lieber \recipient,

(2) \recipientWithSpace ist der Empfänger dieses Briefes.

Beide sind nicht sehr elegant. Viel schöner wäre es,
das Makro selbst würde entscheiden, ob nachfolgend
noch ein Leerzeichen erforderlich ist, oder nicht.

Geht das?
Kann also ein Makro auf das nach ihm kommende
Zeichen zugreifen?


Danke für Antworten,

Ralf

Nach oben