LaTeX \ newcommand默认参数:是空的?

我试图写一个简单的示例命令,没有参数,但没有打印任何东西,但与它围绕它的一个参数。

我读过的默认值应该是\@empty和简单的\ifx\@empty#1条件应该做的工作:

 \newcommand{\optarg}[1][\@empty]{% \ifx\@empty#1 {} \else {(((#1)))} \fi } \optarg % (((empty))) \optarg{} % (((empty))) \optarg{test} % (((empty))) test 

后三个命令全部打印empty字出于某种原因,我希望前两个打印什么和最后打印(((test)))

我正在使用TeXLive / Ubuntu。 一个想法?

尝试以下testing:

 \documentclass{article} \usepackage{xifthen}% provides \isempty test \newcommand{\optarg}[1][]{% \ifthenelse{\isempty{#1}}% {}% if #1 is empty {(((#1)))}% if #1 is not empty } \begin{document} Testing \verb|\optarg|: \optarg% prints nothing Testing \verb|\optarg[]|: \optarg[]% prints nothing Testing \verb|\optarg[test]|: \optarg[test]% prints (((test))) \end{document} 

xifthen包提供\ifthenelse构造和\isemptytesting。

另一种select是使用ifmtarg包(请参阅文档ifmtarg.sty文件 )。

使用LaTeX3 xparse包:

 \usepackage{xparse} \NewDocumentCommand\optarg{g}{% \IfNoValueF{#1}{(((#1)))}% } 

在编写LaTeX的底层TeX引擎中,命令可以采用的参数数量是固定的。 你用默认的[\@empty]所做的事情就是要求LaTeX检查下一个标记,看看它是否是一个空的方括号。 如果是这样的话,LaTeX将方括号的内容作为参数,否则,下一个标记将被放回到inputstream中,而使用默认的\@empty参数。 因此,为了让您的想法发挥作用,必须使用括号来分隔可选参数:

 \optarg \optarg[] \optarg[test] 

这个符号你应该有更好的运气。

令人讨厌的是,对于可选参数,您不能使用与括号相同的括号,但是事实就是如此。

 \documentclass{article} \usepackage{ifthen} % provides \ifthenelse test \usepackage{xifthen} % provides \isempty test \newcommand{\inlinenote}[2][]{% {\bfseries{Note:}}% \ifthenelse{\isempty{#1}} {#2} % if no title option given {~\emph{#1} #2} % if title given } \begin{document} \inlinenote{ simple note } \inlinenote[the title]{ simple note with title } \end{document}