想知道是否可以通过定义自定义命令在 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