Отслеживать все вызовы макросов внутри входного .tex-файла (через luatex?)

Отслеживать все вызовы макросов внутри входного .tex-файла (через luatex?)

Если у нас есть входной файл .tex, как найти в нем все вызовы макросов?

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

\begin{document}
\samplemacro

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

Подойдет любая позиция, например, смещение в байтах для начала/конца команды. Начало — это момент, когда команда начнет обрабатываться, а конец — сразу после того, как все аргументы будут потреблены.

Для приведенного выше примера было бы здорово получить следующее:

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

Точная структура не так уж важна, поэтому можно считать \samplemacro просто частью \section без отслеживания внутренних вызовов или, может быть, считать содержимое окружения частью \begin. Буквально речь идет о том, какие токены потребляются какой процедурой.

Поскольку макросы, такие как \sectionреализуют пользовательский синтаксический анализ, кажется, гораздо проще каким-то образом использовать хуки luatex, чем жестко кодировать синтаксический анализ, напримерTexSoupпытается сделать.

Связанный контент