
Ich habe Donald Knuth nachgeahmt, indem ich |
als wörtliches Trennzeichen gesetzt habe. Um ihm im Mathematikmodus seine normale Bedeutung zu geben, habe ich gesetzt
\everymath{\catcode`\|=12}
\everydisplay{\catcode`\|=12}
Ich möchte jedochAnhängendies, \everymath
anstatt den vorherigen Inhalt (falls vorhanden) zu löschen. Ich habe versucht
\everymath{a}
\everymath{\the\everymath b}
aber es funktioniert nicht. Irgendeine Idee?
PS: Diese Frage bezieht sich auf einfaches TeX.
Antwort1
Die Methode funktioniert nicht: Wenn Sie beispielsweise
\section{Proof that $|x|\ge 0$}
Die Einstellung \catcode`|=12
würde nicht wirksam werden, da |
sie bereits tokenisiert worden wäre.
Der sicherste Weg ist zu sagen:
\catcode`|=\active
\protected\def|{\ifmmode\expandafter\vert\else\expandafter\activebar\fi}
\def\activebar{...<whatever you want>...}
Wenn Sie Plain TeX ohne e-TeX-Erweiterungen verwenden möchten, wäre der resultierende Befehl ziemlich fehleranfällig. Gehen Sie daher mit Vorsicht vor:
\def|{\relax\ifmmode\expandafter\vert\else\expandafter\activebar\fi}
(den Grund dafür finden Sie \relax
im TeXbook).
Versuchen wir es mit einem Plain-TeX-Dokument:
\input manmac
\everymath\expandafter{\the\everymath\catcode`|=12 }
\everydisplay\expandafter{\the\everydisplay\catcode`|=12 }
\beginsection $|x|$ is never negative.
|the $p$-norm| is
$$
\Vert x\Vert=\root p\of{|x_1|^p+\cdots+|x_n|^p}
$$
\bye
Du erhältst
! Argument of \\ has an extra }.
<inserted text>
\par
<to be read again>
}
„weil“ |
wurde bereits tokenisiert, als das Argument „von“ \beginsection
absorbiert wurde.
Mit
\input manmac
\let\manmacbar| % after manmac | is active
\protected\def|{%
\ifmmode
\expandafter\vert
\else
\expandafter\manmacbar
\fi
}
\beginsection $|x|$ is never negative.
|the $p$-norm| is
$$
\Vert x\Vert=\root p\of{|x_1|^p+\cdots+|x_n|^p}
$$
\bye
Sie erhalten keinen Fehler und die Ausgabe entspricht den Erwartungen:
Antwort2
A. Ellet hat die Antwort in den Kommentaren gegeben (Bearbeitung: es \expandafter
wird nur einer benötigt):
\everymath{a}
\everymath\expandafter{\the\everymath b}
setzt \everymath
aufab