2009-04-01 7 views
3

2つの引数を持つLaTeXコマンドを作成しようとしていますが、そのうちの1つはオプションです。通常、私はdefaultは、最初の引数のデフォルト値ですLaTeX:オプションのデフォルトとして必要なargを使用する方法は?

\newcommand{\whatever}[2][default]{first #1 second #2} 

としてこれを行うと思います。しかし、このコマンドの私は2番目の引数の値が最初の引数のデフォルト値として使用したい - つまり、私は

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

は誰もが知ってい

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

と同等になりたいですこれを行う方法?私は必要に応じてプレーンTeXに落とすことができます。

答えて

4

LaTeXカーネルには、広く使われていませんが、これを行う組み込みの方法があります。あなたが​​または.clsファイルの中にこれをやっている場合

\makeatletter 
\newcommand\@foo[2][]{[1: #1, 2: #2.] } 
\newcommand\foo{\@dblarg\@foo} 
\makeatother 

\foo{same} 
\foo[hello]{world} 

はもちろん、\makeatletterコマンドをドロップすることができます:ここでは例です。

+0

馬の口からストレートが常に最高です。 – dmckee

+0

非常にクールな;-)ありがとう... –

2

醜いハック:

\usepackage{ifthen} 

... 

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

おそらくあなたはきれいな何かをしたかったが、それは私が持っているものです。

セマンティクスによっては、uniquenonesenseが空である可能性があります。

+0

私のために働く;-)確かにきれいでいいですが、私は本当に仕事を終わらせるものを求めています。それは、私が読んだ他の多くのLaTeXコードよりも、ハックが少なくなっています。 –

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. 
関連する問題