我想使用另一个命令来定义一个命令以使其简短。但旧命令包括括号、方括号和花括号。例如
\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}
。