LaTeXの:どのようにオプション1のデフォルトとして必要な引数を使用するには?

StackOverflow https://stackoverflow.com/questions/707152

  •  22-08-2019
  •  | 
  •  

質問

私は2つの引数、それらのいずれかのオプションでLaTeXのコマンドを作成しようとしています。通常、私は

としてこれを行うと思います
\newcommand{\whatever}[2][default]{first #1 second #2}

defaultは、最初の引数のデフォルト値です。しかし、このコマンドのために、私は第二引数の値が最初の引数のデフォルト値として使用したい - つまり、私が欲しい

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

と同等であると
\whatever[blah]{blah}
\whatever[foo]{foo}
\whatever[lol]{rofl}

誰もがこれを行う方法を知っていますか?必要であれば、私は無地のTeXに落下することができます。

役に立ちましたか?

解決

それは、広く使用されていないのですが、

LaTeXのカーネルは、これを行うための作り付けの方法があります。ここでは例があります:

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

\foo{same}
\foo[hello]{world}
あなたが\makeatletterまたは.styファイルの中にこれをやっている場合は、

もちろん、.clsコマンドがドロップすることができます。

他のヒント

醜いハックます:

\usepackage{ifthen}

...

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

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

あなたのセマンティクスに応じて、uniquenonesenseは空である可能性があります。

    \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.
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top