\newcommand{}[1]...[n]{}

\newcommand{}[1]...[n]{}

晚上好,我需要创建\newcommand包含 n 个变量的 s,例如

\newcommand{text}[1]...[n]{...#1...#n}

例如,对于n=2,我想创建一个\newcommand 类型为 $ \left\|#1\right\|_{#2} $ 的 ,它表示一个范数,其中 #1 代表我想要计算范数的元素,而 #2 代表范数的类型,也就是说,如果 #2=1 ,我们有 1-范数,如果 #2=2 ,我们有 2-范数,这就是欧几里得范数,如果 #2=$ \infty $ ,我们有无穷大范数。

我能怎么做?

太感谢了。

答案1

正如评论中提到的,\newcommand的第一个可选参数表示命令可以使用的参数数量(最多 9 个)。所以你实际上应该这样写:

\newcommand{\commandname}[n]{... #1 ... #n }

为了n您想要的不同参数。第二个可选参数表示您有一个可选参数作为参数 1,并提供其默认值。

也就是说,在 2021 年定义新命令的首选方法是\NewDocumentCommand使用在参数规范方面具有更多灵活性的命令,同时确保任何具有复杂逻辑的命令在用于移动参数¹(如节标题或图表/表格标题)时不会中断。对于您的n-argument 命令

 \NewDocumentCommand{\commandname}{ mmmmmm }{ ... #1 ... #n ... }

你有n m是 的第二个参数\NewDocumentCommand。这样,​​您还可以轻松地在参数列表中的任意位置声明可选参数(并且可以声明任意多个)。完整信息可通过键入texdoc xparse在命令行中键入或在线查阅文档来获取https://texdoc.org


1、随着 LaTeX 中脆弱命令的有效消除,我们不再需要担心移动参数,但一个简单的版本是,脆弱命令(通常)是那些内部具有某种逻辑的命令,例如,检测数学模式,或检查可选参数,而移动参数是那些内容可能在多个地方使用的命令的参数(例如,页眉、目录、图表列表或表格列表),即使它们实际上并未在那里使用(因此,仅仅因为您没有图表列表并不会使您的标题命令不移动)。

相关内容