English 中文(简体)
LaTeX:如何将必需的参数用作可选参数的默认值?
原标题:
  • 时间:2009-04-01 20:11:11
  •  标签:

我正在尝试创建一个LaTeX命令,其中包含两个参数,其中一个是可选的。通常我会这样做:


ewcommand{whatever}[2][default]{first #1 second #2}

其中default是第一个参数的默认值。但是,对于这个命令,我想要将第二个参数的值作为第一个参数的默认值使用 - 也就是说,我希望

whatever{blah}
whatever{foo}
whatever[lol]{rofl}

相当于 (xiāng dāng yú)

whatever[blah]{blah}
whatever[foo]{foo}
whatever[lol]{rofl}

有人知道怎么做吗?如有必要,我可以用普通的TeX来实现。

最佳回答

LaTeX内核有一种内置方法可以做到这一点,尽管它并不广泛使用。这是一个例子:

makeatletter

ewcommand@foo[2][]{[1: #1, 2: #2.] }

ewcommandfoo{@dblarg@foo}
makeatother

foo{same}
foo[hello]{world}

显然,如果您在一个 .sty .cls 文件中进行此操作, makeatletter 命令可以省略。

问题回答

一个丑陋的黑客攻击:

usepackage{ifthen}

...


ewcommand{whatever}[2][uniquenonesense]{
   ... 
   ifthenelse{equal{#2}{uniquenonesense}}{#1}{#2}
   ...
}

我猜你想要更干净的东西,但这就是我拥有的。

根据您的语义,uniquenonesense可能为空。

    
ewcommand{haha}[2]{ackslash whatever left[ #1 
ight] 
    left[   #1     
ight] }

    egin{document}
    $haha{blah}{blah}$\
    $haha{stupid}{Idiot}$
    end{document} % This works very well.




相关问题
热门标签