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