如何在 PDF 输出上呈现宏的定义?

如何在 PDF 输出上呈现宏的定义?

例如,我们在包中定义了如下的宏。

\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将显示宏的定义(包括其底层子宏)作为调试输出,即停止编译并将它们显示在输出窗口中,但不显示在文档中。

相关内容