是否可以将命令的扩展形式转储为文本?
例如当我写一个宏时
\newcommand{\mytest}[1]{\texttt{#1}}
我想定义一个宏,\mydump
这样
\mydump{\mytest{Hello World}}
\mytest{Hello World}
在输出文件中创建一个文字文本。
在尝试自定义宏时,我有时会遇到相当无用的错误消息。能够逐级查看有问题的命令如何展开将大有帮助。
我知道有类似这样的命令\show
,但这些命令是面向命令行的。然而,通常我会在 LaTeX 编辑器中工作,默认情况下它甚至不显示日志文件,例如 TeXStudio 或带有 AUCTeX 的 Emacs。因此,更实际的解决方案是将类似信息放入输出 pdf 文件中。
我尝试通过结合\verb
和来生成所需的输出\expandafter
,但这没有给出可行的结果(由于 LaTeX 将文本解析为标记并将标记扩展为宏的方式)。
答案1
这里有两个版本,它们的行为略有不同,具体取决于您真正寻求的内容。
\documentclass{article}
\usepackage[T1]{fontenc}
\newcommand{\mytest}[1]{\texttt{#1}}
\def\mydump#1{\detokenize\expandafter{#1}}
\def\mydumplit#1{\detokenize{#1}}
\begin{document}
\mydump{\mytest{Hello World}}
\mydumplit{\mytest{Hello World}}
\end{document}
当然,\detokenize
也有一些限制。你不能%
在参数中包含,括号必须匹配,等等。