我正在尝试使用两个参数创建一个LaTeX命令,其中一个参数是可选的。通常我会这样做
\newcommand{\whatever}[2][default]{first #1 second #2}
其中default
是第一个参数的默认值。但对于这个命令,我希望第二个参数的值用作第一个参数的默认值 - 也就是说,我想要
\whatever{blah}
\whatever{foo}
\whatever[lol]{rofl}
等同于
\whatever[blah]{blah}
\whatever[foo]{foo}
\whatever[lol]{rofl}
有谁知道怎么做?如有必要,我可以下载到普通的TeX。
答案 0 :(得分:5)
LaTeX内核有一个内置的方法,虽然它没有被广泛使用。这是一个例子:
\makeatletter
\newcommand\@foo[2][]{[1: #1, 2: #2.] }
\newcommand\foo{\@dblarg\@foo}
\makeatother
\foo{same}
\foo[hello]{world}
显然,如果您在\makeatletter
或.sty
文件中执行此操作,则可以删除.cls
命令。
答案 1 :(得分:2)
一个丑陋的黑客:
\usepackage{ifthen}
...
\newcommand{\whatever}[2][uniquenonesense]{
...
\ifthenelse{\equal{#2}{uniquenonesense}}{#1}{#2}
...
}
大概你想要更干净的东西,但这就是我所拥有的。
根据您的语义,uniquenonesense
可能为空。
答案 2 :(得分:0)
\newcommand{\haha}[2]{\backslash whatever \left[ #1 \right]
\left[ #1 \right] }
\begin{document}
$\haha{blah}{blah}$\\
$\haha{stupid}{Idiot}$
\end{document} % This works very well.