如何提取用户在 \NewDocumentCommand 中输入的文本

如何提取用户在 \NewDocumentCommand 中输入的文本

为了解决这个问题,让我们从一个更简单的任务开始:如何让用户在定义 时输入的文本\NewDocumentCommand接近我在\meaning用 定义的宏上输入的结果\def?我猜它应该定义在一些名字奇怪的宏中,但我找不到它的名字,而且阅读 xparse 的源代码很难。

在此处输入图片描述

\documentclass[]{article}

\def\test[#1]#2{Hey (#1) #2 you are nice.}

\NewDocumentCommand{\testXparse}{O{}m}{Hey (#1) #2 you are nice.}

\begin{document}

\test[Alice]{Bob}
\show\test

This corresponds to what the user typed. Great.
\texttt{\meaning\test}\\

\testXparse[Alice]{Bob}
\show\testXparse

This does NOT correspond to what the user typed. Not great.
\texttt{\meaning\testXparse}


\end{document}

PS:让我们保持简单:我不关心 catcode 或复杂的边缘情况。

编辑 噢,我找到了:

\texttt{\expandafter\meaning\csname testXparse code\endcsname}

给我:

\protected\long
macro:#1#2->Hey (#1) #2 you are nice.

!! 现在让我们尝试找到如何将其放入字符串中、提取参数并对 执行相同操作\newcommand

答案1

它在里面\testXparse code(名称中有一个空格)。

\documentclass{article}

\ExplSyntaxOn

\NewDocumentCommand{\retrievexparsedefinition}{m}
 {
  \texttt{\cs_replacement_spec:c { \cs_to_str:N #1 ~ code }}
 }

\ExplSyntaxOff

\NewDocumentCommand{\testXparse}{O{}m}{Hey (#1) #2 you are nice.}

\begin{document}

\retrievexparsedefinition{\testXparse}

\end{document}

在此处输入图片描述

你可以在控制台中通过以下方式获得相同的结果

\ShowCommand{\testXparse}

相关内容