Eine Tokenliste an \everymath anhängen

Eine Tokenliste an \everymath anhängen

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, \everymathanstatt 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`|=12wü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 \relaxim 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“ \beginsectionabsorbiert 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:

Bildbeschreibung hier eingeben

Antwort2

A. Ellet hat die Antwort in den Kommentaren gegeben (Bearbeitung: es \expandafterwird nur einer benötigt):

\everymath{a}
\everymath\expandafter{\the\everymath b}

setzt \everymathaufab

verwandte Informationen