是否可以看到 TeX“预处理器”的输出,即。e. 实际输出完成之前的中间步骤,但所有用户定义的宏都被替换并且只剩下 TeX 原语的一个子集?
还是没有这样的中间步骤?
写
\edef\xxx{Any text with any commands. For example, $\phantom x$.}
然后在日志文件中输出
\show\xxx
或在您的文档中输出
\meaning\xxx
试试选择性宏扩展器。
TeX 中没有“预处理器”。任何阶段的任何控制序列的替换文本都可以变化(这用于很多事情!)。例如
\def\demo{\def\demo{cde}}
\demo
将首先以一种方式定义 \demo 然后更改它。以同样的方式,您可以重定向 TeX 原语。例如,LaTeX 内核将 \input 移动到一个内部位置并改变它。简化版:
\let\@@input\input
\def\input#1{\@@input#1 }
TeX 内置了很多差异追踪工具,包括追踪宏扩展。这仅在实际扩展时跟踪实时宏,但它仍然非常有用。The TeXbook以及其他地方的详细信息。
当我尝试调试宏问题时,我通常只使用大锤子:
\tracingall\tracingonline
然后我在输出或 .log 文件中挖掘我想知道的内容。
在 tex.SE 和这个问题上有很多关于这个问题的讨论。但我会借此机会指出,最佳答案 (IMO) 是使用该程序,它是 TeXLive 附带的 python 脚本。它非常有能力,可以处理参数以及简单的替换。de-macro
要使用它,请将要扩展的宏移动到 <something>-private.sty
文件中,并使用 将其包含到文档中\usepackage{<something>-private}
,然后运行de-macro <mydocument>
. 它吐出<mydocument>-clean.tex
,这与您的原始内容相同,但您的私有宏被它们更基本的东西所取代。