在阅读了另一个有关如何查看命令定义的问题后,我尝试:
\documentclass{article}
\begin{document}
\show\LaTeX
\end{document}
但这在我的日志文件中显示:
\LaTeX=macro:
\protect \LaTeX
我只是想看看内心\LaTeX
深处的命令最终会说“好的,把‘L’变大,然后把‘a’稍微凸起一点,然后……”
答案1
有些宏被定义为健壮的,方法是将其扩展为,\protect
后面跟一个名称几乎相同但以空格结尾的宏!定义和使用此类宏时必须特别小心,因为宏名称中通常不允许有空格。如果将此类宏写入外部文件(.aux
、、.toc
...),则空格不再作为宏名称的一部分,因此会再次调用原始宏。
要查看此类宏的定义,您需要使用以下代码:
\expandafter\show\csname LaTeX \endcsname
可\csname <text>\endcsname
用于构建一个宏,\<text>
该宏可包含非字母,如数字或空格。在执行之前\expandafter
,需要将 扩展\csname LaTeX \endcsname
(注意 后面的空格X
)至\LaTeX
(还要注意此处的空格) 。\show
我还编写了一个名为texdef
显示这样的定义:
texdef -t latex LaTeX
(texdef -t latex
您也可以写出latexdef
该名称是否已安装)
\LaTeX
这将显示并检测它调用的定义\LaTeX
并显示它的定义。
$ texdef -t latex LaTeX
\LaTeX:
macro:->\protect \LaTeX
\LaTeX :
\long macro:->L\kern -.36em{\sbox \z@ T\vbox to\ht \z@ {\hbox {\check@mathfonts \fontsize \sf@size \z@ \math@fontsfalse \selectfont A}\vss }}\kern -.15em\TeX
或者使用引号明确添加空格:
texdef -t latex 'LaTeX '
答案2
马丁对重新定义的回答的另一种解释\protect
是:
\begingroup
\let\protect\show
\LaTeX
\endgroup
(该组不是强制性的,但意味着您可以继续处理文档而不会出错。如果您只是制作一个简短的“测试”文档,您可能会错过它。)
答案3
除了 Martin 的解决方案之外,还有一个show2e
我经常使用的包:
% \usepackage{show2e}
\showcmd\LaTeX
编译时,它首先获取
> \LaTeX=macro:
->\protect \LaTeX .
进而
> \LaTeX =\long macro:
->L\kern -.36em{\sbox \z@ T\vbox to\ht \z@ {\hbox {\check@mathfonts \fontsize
\sf@size \z@ \math@fontsfalse \selectfont A}\vss }}\kern -.15em\TeX .
<argument> \LaTeX