Realice un seguimiento de todas las llamadas de macro dentro del archivo .tex de entrada (¿a través de luatex?)

Realice un seguimiento de todas las llamadas de macro dentro del archivo .tex de entrada (¿a través de luatex?)

Si tenemos un archivo .tex de entrada, ¿cómo encontrar todas las invocaciones de macros que contiene?

\documentclass{article}
\newcommand{\samplemacro}{This is a sample macro.}

\begin{document}
\samplemacro

\begin{itemize}
    \item \samplemacro
\end{itemize}
\section[\samplemacro]{\samplemacro}
\tableofcontents
\end{document}

Cualquier tipo de posición estaría bien, por ejemplo, un desplazamiento de bytes para el inicio/fin del comando. El inicio es cuando el comando comenzaría a procesarse, mientras que el final es justo después de que se hayan consumido todos los argumentos.

Para el ejemplo anterior, sería genial obtenerlo de la siguiente manera:

[
  '\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}'
]

La estructura exacta no es realmente importante, por lo que está bien considerar \samplemacro como solo una parte de \section sin rastrear las llamadas internas, o tal vez considerar el contenido del entorno como parte de \begin. Se trata literalmente de qué tokens se consumen mediante cada rutina.

Dado que las macros como \sectionimplementan el análisis personalizado, parece mucho más fácil usar de alguna manera ganchos luatex que codificar el análisis comosopa de texestá intentando hacer.

información relacionada