6

是否可以看到 TeX“预处理器”的输出,即。e. 实际输出完成之前的中间步骤,但所有用户定义的宏都被替换并且只剩下 TeX 原语的一个子集?

还是没有这样的中间步骤?

4

5 回答 5

7

\edef\xxx{Any text with any commands. For example, $\phantom x$.}

然后在日志文件中输出

\show\xxx

或在您的文档中输出

\meaning\xxx
于 2010-03-17T16:36:58.400 回答
4

试试选择性宏扩展器

于 2010-03-17T23:18:06.387 回答
4

TeX 中没有“预处理器”。任何阶段的任何控制序列的替换文本都可以变化(这用于很多事情!)。例如

\def\demo{\def\demo{cde}}
\demo

将首先以一种方式定义 \demo 然后更改它。以同样的方式,您可以重定向 TeX 原语。例如,LaTeX 内核将 \input 移动到一个内部位置并改变它。简化版:

\let\@@input\input
\def\input#1{\@@input#1 }
于 2010-03-17T17:40:18.737 回答
4

TeX 内置了很多差异追踪工具,包括追踪宏扩展。这仅在实际扩展时跟踪实时宏,但它仍然非常有用。The TeXbook以及其他地方的详细信息。

当我尝试调试宏问题时,我通常只使用锤子:

\tracingall\tracingonline

然后我在输出或 .log 文件中挖掘我想知道的内容。

于 2010-03-18T00:15:40.213 回答
0

在 tex.SE 和这个问题上有很多关于这个问题的讨论。但我会借此机会指出,最佳答案 (IMO) 是使用该程序,它是 TeXLive 附带的 python 脚本。它非常有能力,可以处理参数以及简单的替换。de-macro

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

于 2016-04-19T15:48:45.980 回答