.png)
Если у нас есть входной файл .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пытается сделать.