宏扩展的源文件中的输出位置

宏扩展的源文件中的输出位置

假设我有一个自定义宏定义\newcommand(没有进行复杂的解析)。为简单起见,假设

\newcommand{\mymacro}[1]{#1}

有没有办法重新定义宏,以便每次扩展宏时,我们都向辅助文件中添加一行,其中包含宏出现的源代码坐标?

例子

  • 主文本

    \documentclass{article}
    \begin{document}
    \newcommand{\mymacro}[1]{#1} % redefine appropriately
    \input{bla}
    \end{document}
    
  • bla.tex

    Lorem Ipsum
    dolor \mymacro{sit amet} consectetur
    \mymacro{adi\emph{pisci}ng} elit
    

在一些辅助文件中给出所需的输出,比如主宏

bla.tex:2:7-24
bla.tex:3:1-27

即,记录形式为file:line:start-end。如果输出end立场太困难,逐字转储论点也是可以接受的(例如bla.tex:3:1 adi\emph{pisci}ng

请注意,我正在寻找基于 TeX 的解决方案。我知道有人可以尝试解析这些事件,但我希望有一种与 TeX 扩展机制一致的方式来定位它们,而不必重新实现它或使用黑客正则表达式半模拟它。

我的用例

假设我在源代码中使用 编写注释\mycomment{bla}。现在我想以编程方式删除这些注释。如果我开始使用正则表达式执行此操作,我会遇到很多麻烦(并且不会得到任何接近通用解决方案的东西,即使只是因为找到匹配的括号)。如果源代码中有任何稍微花哨的东西,解析也同样成问题。这个问题的解决方案是允许使用辅助文件中的偏移量通过后处理过程安全地删除子字符串。

相关内容