luaprint
对于我的调试目的非常有效,但由于所有宏扩展问题,我无法轻松地在 TeX 中使用它。
它所做的就是将文本打印到窗口(控制台窗口或其他;我使用 WinEdt)但不会以任何方式影响输出。
我已经尝试过\the
、、\showthe
和,\message
但似乎都没有效果。
有没有什么简单的方法可以让我打印宏和寄存器值以用于调试目的?
答案1
如果您想在终端和日志中显示宏和寄存器内容,那么您需要的两个原语是\show
和\showthe
。使用 显示宏\show
:
\def\foo{some tokens}
\show\foo
导致
> \foo=macro:
->some tokens.
l.5 \show\foo
例如。如果你尝试\show
使用寄存器,它就没那么有用了,例如
\newcount\foo
\show\foo
给予
> \foo=\count201.
l.5 \show\foo
这就是\showthe
发挥作用的地方,就像
\newcount\foo
\foo 10\relax
\showthe\foo
你得到
> 10.
l.7 \showthe\foo
这同样适用于其他寄存器类型(toks、dimens、skips)。
\message
在不中断运行的情况下写入终端和日志,并进行扩展。所以
\def\foo{bar}
\message{Hello world \foo}
写道
Hello world bar
到终端,但不会停止运行。如果你想写入寄存器的内容通过 \message
您需要包括\the
:
\newtoks\foo
\foo{bar}
\message{Hello world \the\foo}
再次输出
Hello world bar
在此上下文中,另一个有用的原语是 e-TeX 的\showtokens
,它可用于在终端中显示任意标记,因此可用于构建“交互式”消息而不会发出错误。后者是使用 执行的\errmessage
,如果您想要“漂亮的打印”,则需要进行一些设置(例如,请参阅 中 LaTeX2e 如何处理此问题latex.ltx
)。