有没有办法将变量传递给命令?

有没有办法将变量传递给命令?

现在我正在做一些包含大量有序对的数学作业。由于懒惰,我厌倦了写作\langle x, y \rangle,所以我想知道是否有办法定义一个命令,例如\ordered,接收参数x, y并返回\langle x, y \rangle。例如\ordered{1, 3}将返回在此处输入图片描述

提前致谢!

答案1

做就是了

\newcommand{\ordered}[1]{\langle #1\rangle}

这也涵盖了有序三元组、四元组等等。你可以这样做

\ordered{x,y}
\ordered{x,y,z}

并且输出将符合预期。

这不仅仅是懒惰!假设你的合著者在某个时候告诉你尖括号很糟糕,圆括号必须被使用(你没有资格反驳你的合著者)。对事物有一个命令是最好的,因为你遵守命令通过修改为

\newcommand{\ordered}[1]{(#1)}

并重新编译。但也许你的合著者有不同的想法:使用分号代替冒号。

没什么大不了的:将代码改为

\ExplSyntaxOn
\NewDocumentCommand{\ordered}{m}
 {
  \langle % or (, maybe
  \clist_use:nn { #1 } { ; }
  \rangle % or ), maybe
 }
\ExplSyntaxOff

并重新编译。文档输入没有任何变化。

解释:您需要\ExplSyntaxOn访问expl3编程层;\NewDocumentCommand在这种情况下更好,但也\newcommand{\ordered}[1]可以。\clist_use:nn我们告诉 LaTeX 消化以逗号分隔的项目列表,并在项目之间使用分号传递。

答案2

做就是了

\def\ordered#1{\langle #1\rangle}

\ordered这定义了一个带有一个参数的宏#1。如果您使用例如,\ordered{1,3}则参数#11,3,宏将扩展为\langle 1,3\rangle

相关内容