4 Stimmen

LaTeX: Wie kann man ein erforderliches Argument als Standard für ein optionales Argument verwenden?

Ich versuche, einen LaTeX-Befehl mit zwei Argumenten zu erstellen, von denen eines optional ist. Normalerweise würde ich dies tun als

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

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

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

gleichzusetzen mit

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

Weiß jemand, wie man das macht? Bei Bedarf kann ich auf einfaches TeX zurückgreifen.

7voto

Will Robertson Punkte 58838

Der LaTeX-Kernel verfügt über eine eingebaute Methode, um dies zu tun, obwohl sie nicht weit verbreitet ist. Hier ist ein Beispiel:

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

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

Offensichtlich ist die \makeatletter Befehle können entfallen, wenn Sie dies innerhalb einer .sty o .cls Datei.

2voto

Ein hässlicher Schreiberling:

\usepackage{ifthen}

...

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

Vermutlich wollten Sie etwas Saubereres, aber das ist es, was ich habe.

Das hängt von Ihrer Semantik ab, uniquenonesense leer sein könnte.

0 Stimmen

Funktioniert bei mir ;-) Klar, sauber wäre schön, aber ich will wirklich nur etwas, das die Arbeit erledigt. Es ist weniger ein Hack als eine Menge anderer LaTeX-Code, den ich gelesen habe...

-1voto

vaman Punkte 20
    \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.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X