Überarbeitungsverlauf[Zurück]
Klicke auf Einblenden/Ausblenden von Überarbeitungen 4

06 Sep '14, 16:11

gast3's gravatar image

gast3
(ausgesetzt)

Man kann die Definition eines Makros in TeX mit `\show` oder mit `\meaning` abfragen. `\show` schreibt dabei immer in das Terminal und die log-Datei, taugt für Deinen Zweck also nicht. In der Ausgabe von `\meaning` wird als escape character immer das in `\escapechar` gespeicherte Zeichen verwenden, unabhängig davon, wie ein Befehl tatsächlich definiert wurde. Beispiel: \escapechar=91 \message{\meaning\bf} führt zur Ausgabe: `macro:->[fam [bffam [tenbf`. Das wäre jetzt noch kein Beinbruch. Man könnte ja dafür sorgen, dass `\escapgechar` auch wirklich 92 ist, bevor man die Ausgabe weiterverarbeitet. Aber: War es für die Definition eines Makros notwendig, statt `\` beispielsweise `|` als escape char zu definieren wie in Deinem Beispielcode für die Definition von `\ttfinish`, dann wird trotzdem nicht so angezeigt: \message{\meaing\ttfinish} wird also angezeigt als: `macro:#1^^M#2\endtt->#1\vbox {#2}\endgroup $$` Selbst, wenn man die Ausgabe irgendwie zerlegt, etwa mit \gdef\parsemacro#1:#2->#3<-{\def\isarg{#2}\def\isdef{#3}} \expandafter\parsemacro\meaning\ttfinish<-% \message{\string\def\string\ttfinish\isarg{\isdef}} wird man nicht mehr die ursprüngliche Definition erhalten, sondern `\def\ttfinish#1^^M#2\endtt{#1\vbox {#2}\endgroup $$}`. Das entspricht zwar der Bedeutung aber nicht der Definition. Hinweis: Statt mit `\message` auf die Terminal zu schreiben, kann man natürlich auch immer mit `\write` in eine andere Datei schreiben und erhält dabei genau das gleiche Ergebnis. Bei Verwendung von [e-TeX](http://www.ctan.org/pkg/etex) (auch [e-TeX](http://www.ctan.org/pkg/etex), das für plainTeX i. d. R. als `etex` oder auch als `pdfetex` möglich) oder auch `pdftex` verfügbar ist, gibt es weitere Möglichkeiten mit `\detokenize` oder `\unexpanded`, die aber alle ebenfalls das `\escapechar`-Problem besitzen dürften. Übrigens: Wenn man bei `\meaning` den Teil vor dem Doppelpunkt in `#1macro#2` aufteilen will, um `\long` definierte Makros zu erkennen, dann hat man bei der Definition das Problem, dass `\meaning` Token der Kategorie *other* liefert. Daher funktioniert ein einfaches \gdef\parsemacro#1macro:#2->#3<-{\def\islong{#1}\def\isarg{#2}\def\isdef{#3}} höchstwahrscheinlich nicht. Man bräuchte das `macro` nach `#1` ebenfalls mit `\catcode` *other* für `m`, `a`, `c`, `r` und `o`. Das sei nur der Vollständigkeit halber erwähnt.
Klicke auf Einblenden/Ausblenden von Überarbeitungen 3
\unexpanded auch noch erwähnt

06 Sep '14, 16:08

gast3's gravatar image

gast3
(ausgesetzt)

Man kann die Definition eines Makros in TeX mit `\show` oder mit `\meaning` abfragen. `\show` schreibt dabei immer in das Terminal und die log-Datei, taugt für Deinen Zweck also nicht. In der Ausgabe von `\meaning` wird als escape character immer das in `\escapechar` gespeicherte Zeichen verwenden, unabhängig davon, wie ein Befehl tatsächlich definiert wurde. Beispiel: \escapechar=91 \message{\meaning\bf} führt zur Ausgabe: `macro:->[fam [bffam [tenbf`. Das wäre jetzt noch kein Beinbruch. Man könnte ja dafür sorgen, dass `\escapgechar` auch wirklich 92 ist, bevor man die Ausgabe weiterverarbeitet. Aber: War es für die Definition eines Makros notwendig, statt `\` beispielsweise `|` als escape char zu definieren wie in Deinem Beispielcode für die Definition von `\ttfinish`, dann wird trotzdem nicht so angezeigt: \message{\meaing\ttfinish} wird also angezeigt als: `macro:#1^^M#2\endtt->#1\vbox {#2}\endgroup $$` Selbst, wenn man die Ausgabe irgendwie zerlegt, etwa mit \gdef\parsemacro#1:#2->#3<-{\def\isarg{#2}\def\isdef{#3}} \expandafter\parsemacro\meaning\ttfinish<-% \message{\string\def\string\ttfinish\isarg{\isdef}} wird man nicht mehr die ursprüngliche Definition erhalten, sondern `\def\ttfinish#1^^M#2\endtt{#1\vbox {#2}\endgroup $$}`. Das entspricht zwar der Bedeutung aber nicht der Definition. Hinweis: Statt mit `\message` auf die Terminal zu schreiben, kann man natürlich auch immer mit `\write` in eine andere Datei schreiben und erhält dabei genau das gleiche Ergebnis. Bei Verwendung von [e-TeX](http://www.ctan.org/pkg/etex) (auch als `pdfetex` möglich) gibt es weitere Möglichkeiten mit `\detokenize`, `\detokenize` oder `\unexpanded`, die aber alle ebenfalls das `\escapechar`-Problem besitzen dürften. Übrigens: Wenn man bei `\meaning` den Teil vor dem Doppelpunkt in `#1macro#2` aufteilen will, um `\long` definierte Makros zu erkennen, dann hat man bei der Definition das Problem, dass `\meaning` Token der Kategorie *other* liefert. Daher funktioniert ein einfaches \gdef\parsemacro#1macro:#2->#3<-{\def\islong{#1}\def\isarg{#2}\def\isdef{#3}} höchstwahrscheinlich nicht. Man bräuchte das `macro` nach `#1` ebenfalls mit `\catcode` *other* für `m`, `a`, `c`, `r` und `o`. Das sei nur der Vollständigkeit halber erwähnt.
Klicke auf Einblenden/Ausblenden von Überarbeitungen 2

06 Sep '14, 10:58

gast3's gravatar image

gast3
(ausgesetzt)

Klicke auf Einblenden/Ausblenden von Überarbeitungen 1

06 Sep '14, 09:48

gast3's gravatar image

gast3
(ausgesetzt)