我想使用 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
!