.png)
Wenn wir eine .tex-Eingabedatei haben, wie finden wir alle Makroaufrufe darin?
\documentclass{article}
\newcommand{\samplemacro}{This is a sample macro.}
\begin{document}
\samplemacro
\begin{itemize}
\item \samplemacro
\end{itemize}
\section[\samplemacro]{\samplemacro}
\tableofcontents
\end{document}
Jede Position ist möglich, z. B. ein Byte-Offset für den Start/das Ende des Befehls. Start ist, wenn mit der Verarbeitung des Befehls begonnen wird, während Ende ist, nachdem alle Argumente verbraucht wurden.
Für das obige Beispiel wäre es toll, es wie folgt zu bekommen:
[
'\documentclass{article}',
'\newcommand{\samplemacro}{This is a sample macro.}',
'\begin{document}',
'\samplemacro',
'\begin{itemize}',
'\item'
'\samplemacro',
'\end{itemize}',
['\section[\samplemacro]{\samplemacro}', '\samplemacro', '\samplemacro'],
'\tableofcontents',
'\end{document}'
]
Die genaue Struktur ist nicht wirklich wichtig, daher ist es in Ordnung, \samplemacro einfach als Teil von \section zu betrachten, ohne die internen Aufrufe zu verfolgen, oder vielleicht den Umgebungsinhalt als Teil von \begin zu betrachten. Es geht buchstäblich darum, welche Token von welcher Routine verbraucht werden.
Da Makros wie \section
benutzerdefiniertes Parsing implementieren, scheint es viel einfacher zu sein, irgendwie Luatex-Hooks zu verwenden, als Parsing wie fest zu codierenTexSoupversucht zu tun.