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
构造和\isempty
testing。
另一种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}