4

2 つの引数を持つ LaTeX コマンドを作成しようとしていますが、そのうちの 1 つはオプションです。通常、私はこれを次のように行います

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

ここdefaultで、最初の引数のデフォルト値です。しかし、このコマンドでは、2 番目の引数の値を最初の引数のデフォルト値として使用する必要があります。

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

に等しい

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

誰もこれを行う方法を知っていますか? 必要に応じて、プレーンな TeX にドロップダウンできます。

4

3 に答える 3

6

LaTeX カーネルには、これを行う組み込みの方法がありますが、広く使用されているわけではありません。次に例を示します。

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

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

またはファイル内でこれを実行している場合は、明らかに、\makeatletterコマンドを削除できます。.sty.cls

于 2009-04-01T21:40:13.267 に答える
2

醜いハック:

\usepackage{ifthen}

...

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

おそらくあなたはもっときれいなものが欲しかったのでしょうが、それは私が持っているものです.

セマンティクスによっては、uniquenonesense空になる場合があります。

于 2009-04-01T20:26:13.380 に答える