转换tex源,以便所有宏都被其定义替换

时间:2010-03-17 13:44:22

标签: latex tex

是否可以看到TeX'预处理器'的输出,i。即实际输出完成之前的中间步骤,但是所有用户定义的宏都被替换了,只剩下一部分TeX原语?

或者没有这样的中间步骤?

5 个答案:

答案 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 questionthis question上有很多关于这个问题的讨论。但我将借此机会指出,最好的答案(IMO)是使用de-macro程序,这是TeXLive附带的python脚本。它非常强大,可以处理参数以及简单的替换。

要使用它,您可以将要展开的宏移动到<something>-private.sty文件中,并使用\usepackage{<something>-private}将其包含到文档中,然后运行de-macro <mydocument>。它吐出<mydocument>-private.tex,这与你原来的相同,但你的私有宏被更基本的东西所取代。