例如,我们在包中定义了如下的宏。
\newcommand{\test}{this is a test macro}
我想在 PDF 输出上呈现此定义,如下所示。
\documentclass{minimal}
\usepackage{test}
\begin{document}
Hi \somecommandtorendermacrodefinition{\test}
\end{document}
这样我就得到了
你好 \newcommand{\test}{这是一个测试宏}
在 PDF 输出中。
如何以最少的麻烦完成此操作?是否有可以执行此操作的软件包?
答案1
您可以使用原语将宏定义插入文档\meaning
。但是您无法\newcommand
从中获得语法。您需要切换到tt
字体才能正确显示它,否则反斜杠和其他字符将无法正确显示。您可以使用显示宏名称\string
。
\newcommand*{\showmacro}[1]{\texttt{\string#1: \meaning#1 }
例如这将为您提供\label
以下输出:
\label: macro:#1->\@bsphack \protected@write \@auxout {}{\string \newlabel {#1}{{\@currentlabel }{\thepage }}}\@esphack
请注意,许多宏会使用进一步的宏,特别是当它们具有可选参数或“受保护”的宏时。因此有时只会显示第一步。
更好的定义可能是\csname .. \endcsname
在内部使用,并且允许带有@
和空格的宏名称(受保护的宏定义第二个宏,其末尾包含一个空格)。
\newcommand*{\showmacro}[1]{\texttt{\expandafter\string\csname #1\endcsname: \expandafter\meaning\csname#1\endcsname}
例子:
\showmacro{nobreakspace}
\showmacro{nobreakspace }
会给:
\nobreakspace: macro:->\protect \nobreakspace
\nobreakspace : \long macro:->\leavevmode \nobreak \
请注意,还有texdef
脚本允许您在命令行上轻松显示宏定义(但是,我从未在非 Linux 机器上测试过它)。
还有show2e
该包\showcmd
将显示宏的定义(包括其底层子宏)作为调试输出,即停止编译并将它们显示在输出窗口中,但不显示在文档中。