当在新的宏内定义新的宏时(在 xparse 中)如何使内部映射变长?

当在新的宏内定义新的宏时(在 xparse 中)如何使内部映射变长?

我想使用 DeclareDocumentCommand 来定义不同的命令(使用第一个命令的参数)。我想将内部参数设置得更长。这是我的代码以及输出。

\documentclass{article}
\usepackage{xparse}
\begin{document}


\DeclareDocumentCommand{\DC}{m}{%
\DeclareDocumentCommand{#1}{+m}
{%
##1
}
}

\DC{test}

\test{Will this

break?}
\end{document}

我收到“未知参数类型 e”错误。

但是如果我这样做

\documentclass{article}
\usepackage{xparse}
\begin{document}


\DeclareDocumentCommand{\test}{+m}{%
#1
}

\test{Will this

break?}
\end{document}

它工作正常。

答案1

您的代码产生

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!
! LaTeX error: "xparse/not-one-token"
! 
! First argument of '\DeclareDocumentCommand' must be a command.
! 
! See the LaTeX3 documentation for further information.
! 
! For immediate help type H <return>.
!...............................................  

这是因为你应该打电话

\DC{\test}

旧版本xparse会产生错误消息

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!
! LaTeX error: "xparse/unknown-argument-type"
! 
! Unknown argument type 'e' replaced by 'm'.
! 
! See the LaTeX3 documentation for further information.
! 
! For immediate help type H <return>.
!...............................................  

但这是由于同样的问题。

答案2

在不了解您要做什么的情况下,我不能说我赞同这个解决方案,尽管我经常发现创建一个“命令生成器”很有用,这样可以创建一系列执行相同一般操作的命令,而不必\newcommand每次都实际写出完整的序列。

因此,也许您想到的是这一点:

\documentclass{article}
\usepackage{xparse}

\DeclareDocumentCommand{\DC}{m}
{%
 \expandafter\DeclareDocumentCommand\expandafter{\csname #1\endcsname}{+m}
%  compare:
%  \expandafter\long\expandafter\def\csname #1\endcsname##1%
  {%
    {\bfseries ##1}% for example
  }%
}

\begin{document}

\DC{test}

\test{Will this

break?}

Again:
\DC{xtest}

\xtest{Will this

break?}

\end{document}

我希望你小心一点\DeclareDocumentCommand

相关内容