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

Latex 转换tex源,以便所有宏都被其定义替换,latex,tex,Latex,Tex,是否可以看到TeX‘预处理器’的输出,即。 E实际输出完成之前的中间步骤,但替换了所有用户定义的宏,只剩下一部分TeX原语 或者没有这样的中间步骤?写入 \edef\xxx{Any text with any commands. For example, $\phantom x$.} 然后在日志文件中进行输出 \show\xxx 或用于文档中的输出 \meaning\xxx TeX中没有“预处理器”。任何阶段的任何控制序列的替换文本都可能不同(这用于很多事情!)。比如说 \def\demo

是否可以看到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内核将\输入移动到内部位置并对其进行更改。简化版:

\let\@@input\input
\def\input#1{\@@input#1 }

试试。

TeX内置了许多不同的跟踪工具,包括跟踪宏扩展。这只跟踪实际展开的活动宏,但仍然非常有用。详细信息请参阅TeXbook,可能还有其他地方

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

\tracingall\tracingonline

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

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


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

但是您的示例可以清楚地分析
\def\demo{\def\demo{cde}}\demo
计算结果为
\def\demo{cde}}\def\demo{cde}
,由于此步骤后无法进行计算,因此我们可以删除所有
\def
语句,并将其简化为∅. —
\def\demo{\def\demo{c{\it de}}}\demo\demo
但最终将计算为
c{\it de}
。在这种情况下是的,但在实际使用中,我们可以对\demo有多个定义,并在多个地方使用。我想说的是,每个宏都没有固定的替换文本,因此不能用它们的代码来替换。当然,如果它们是宏,TeX本身会替换它们,但不是在“一次性”中:根据需要检查每个标记。根据,
\tracingonline
需要一个参数。(但是
\tracingall
应该已经涵盖了所有内容,不是吗?@holdenley,试试看。