在 LaTeX 中重载命令参数

在 LaTeX 中重载命令参数

想知道是否可以通过定义自定义命令在 LaTeX 中完成所有这些变化:

\mycmd{tag}{color}{keyval}
\mycmd{tag}{keyval}
\mycmd{keyval}

因此它可以像这样使用:

\mycmd{foo}{black}{size=1cm}
\mycmd{foo}{color=black,size=1cm}
\mycmd{tag=foo,color=black,size=1cm}

两种方法都可以。如何定义命令才能让这类事情起作用?

\newcommand\mycmd[3][...]

答案1

您可以在 tex 中实现或多或少的任何语法,但 latex 有明确的指导方针,即可选参数应该被[]分隔。\newcommand只定义最多一个选项的命令,因此要有两个选项,您需要分两步定义它,但xparse允许直接将其声明为有两个选项,例如以下(完整)示例测试文档:

\documentclass{article}

\usepackage{xparse}
\NewDocumentCommand\mycmd{O{deftag}O{red}m}{\typeout{tag=#1,color=#2,#3}}
\begin{document}


\mycmd[foo][black]{size=1cm}
\mycmd[foo]{color=black,size=1cm}
\mycmd{tag=foo,color=black,size=1cm}

\end{document}

产生

tag=foo,color=black,size=1cm
tag=foo,color=red,color=black,size=1cm
tag=deftag,color=red,tag=foo,color=black,size=1cm

相关内容