定义一个包括括号和方括号的命令

定义一个包括括号和方括号的命令

我想使用另一个命令来定义一个命令以使其简短。但旧命令包括括号、方括号和花括号。例如

\oldlongcommand[A](0:4){B}

我想定义一个名为new并写入的命令\new(A,0,4,B),或者\new{A,0,4,B}将其缩短。我尝试简单地写

\newcommand{\new}[4]{\oldlongcommand[#1](#2:#3){#4}}

但它不起作用。

我怎样才能实现这个目标?

答案1

你定义:

\newcommand{\new}[4]{\oldlongcommand[#1](#2:#3){#4}}

从定义的参数文本可以看出,宏\new确实处理了四个未分隔的参数。
因此,您需要提供四个未分隔的参数,而不仅仅是一个。
定义的语法如下:

\new{A}{0}{4}{B}

使用分隔参数实现语法\new(A,0,4,B)也是可行的。
请注意,在下面的示例中,嵌套括号不是一个好主意。
此外,逗号周围的空格/空格标记不会被删除。
单个逗号分隔参数周围的括号将被删除。

\newcommand\new{}%
\long\def\new(#1){\newinternal#1,}

\newcommand\newinternal{}%
\long\def\newinternal#1,#2,#3,#4,{\oldlongcommand[#1](#2:#3){#4}}%

\new(A,0,4,B)
\newinternal A,0,4,B,
\oldlongcommand[A](0:4){B}

\newinternal采用这种方法,在收集逗号分隔的参数时,将剥离一层周围的括号- 例如:

\new({A},{0},{4},{B})\oldlongcommand[A](0:4){B}而不是
\oldlongcommand[{A}]({0}:{4}){{B}}

采用这种方法,逗号/括号周围的空格将不会被删除 - 例如:

\new(A , 0, 4, B )\oldlongcommand[A ]( 0: 4){ B }而不是
\oldlongcommand[A](0:4){B}

相关内容