von KOMA » Fr 23. Jan 2009, 10:48
Grundsätzlich ist es so, dass es so etwas wie "Zeichen" für TeX nicht gibt, es gibt nur Token. Ein Token besteht aus einem Zeichen
und einer Zeichenklasse. Die Zeichenklasse wird bereits beim Einlesen des aufgrund des
\catcode festgelegt und ist danach unveränderbar. Besitzt eine Anweisung (bzw. ein Makro) ein Argument, so wird das Argument mit den \catcode-Einstellungen gelesen, die vor der Abarbeitung der Anweisung gelten. Anweisungen wie \verb funktionieren so, dass sie eigentlich erst einmal kein Argument besitzen, sondern erst die \catcode-Einstellungen ändern und dann eine weitere Anweisung aufrufen, die das Argument einliest und später auch die \catcode-Einstellungen restauriert. Wird nun aber eine Anweisung wie \verb innerhalb eines anderen Argumente verwendet, dann hat man genau das Problem, dass das Argument von \verb bereits als Argument der anderen Anweisung gelesen und damit die Zeichenklassen festgelegt sind.
Nachdem ich nun also das Problem erklärt habe, dürfte die Antwort eigentlich klar sein. Nun gibt es verschiedene Tricks, um das Problem ein wenig zu entschärften. Das grundsätzliche Problem bleibt aber erhalten, so dass die Antwort weiterhin bleibt: Anweisungen wie \verb, die darauf angewiesen sind, die Standard-\catcode-Einstellungen nicht anzuwenden, sind in den Argumenten anderer Anweisungen problematisch und funktionieren nur im Einzelfall.
Grundsätzlich ist es so, dass es so etwas wie "Zeichen" für TeX nicht gibt, es gibt nur Token. Ein Token besteht aus einem Zeichen :wink: und einer Zeichenklasse. Die Zeichenklasse wird bereits beim Einlesen des aufgrund des [url=http://www.golatex.de/wiki/index.php?title=%5Ccatcode]\catcode[/url] festgelegt und ist danach unveränderbar. Besitzt eine Anweisung (bzw. ein Makro) ein Argument, so wird das Argument mit den \catcode-Einstellungen gelesen, die vor der Abarbeitung der Anweisung gelten. Anweisungen wie \verb funktionieren so, dass sie eigentlich erst einmal kein Argument besitzen, sondern erst die \catcode-Einstellungen ändern und dann eine weitere Anweisung aufrufen, die das Argument einliest und später auch die \catcode-Einstellungen restauriert. Wird nun aber eine Anweisung wie \verb innerhalb eines anderen Argumente verwendet, dann hat man genau das Problem, dass das Argument von \verb bereits als Argument der anderen Anweisung gelesen und damit die Zeichenklassen festgelegt sind.
Nachdem ich nun also das Problem erklärt habe, dürfte die Antwort eigentlich klar sein. Nun gibt es verschiedene Tricks, um das Problem ein wenig zu entschärften. Das grundsätzliche Problem bleibt aber erhalten, so dass die Antwort weiterhin bleibt: Anweisungen wie \verb, die darauf angewiesen sind, die Standard-\catcode-Einstellungen nicht anzuwenden, sind in den Argumenten anderer Anweisungen problematisch und funktionieren nur im Einzelfall.