LaTeX: Wie ein erforderlichen arg als Standard für ein optionales eines benutzen?

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

  •  22-08-2019
  •  | 
  •  

Frage

Ich versuche, einen LaTeX-Befehl mit zwei Argumenten zu erstellen, einer von ihnen optional. Normalerweise würde ich dies als

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

Dabei gilt default ist der Standardwert für das erste Argument. Aber für diesen Befehl möchte ich der Wert des zweiten Arguments für das erste Argument als Standardwert verwendet werden - das heißt, ich will

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

als äquivalent zu

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

Wer weiß, wie dies zu tun? Ich kann in einfachen TeX Dropdown, wenn nötig.

War es hilfreich?

Lösung

Der LaTeX-Kern hat eine eingebaute Methode, dies zu tun, obwohl es ist nicht weit verbreitet. Hier ein Beispiel:

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

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

Natürlich können die \makeatletter Befehle gelöscht werden, wenn Sie diese in einer .sty oder .cls Datei tun.

Andere Tipps

Eine hässliche Hack:

\usepackage{ifthen}

...

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

Vermutlich wollte man etwas sauberer, aber das ist, was ich habe.

auf der Semantik Je, uniquenonesense könnte leer sein.

    \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.
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top