Question

Je suis en train de créer une commande LaTeX avec deux arguments, l'un d'entre eux en option. Normalement, je ferais cela comme

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

default est la valeur par défaut pour le premier argument. Mais pour cette commande, je veux la valeur du deuxième argument à utiliser comme la valeur par défaut pour le premier argument - qui est, je veux

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

équivalent à

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

Quelqu'un sait comment faire cela? Je peux descendre à TeX si nécessaire.

Était-ce utile?

La solution

Le noyau LATEX une méthode intégrée de le faire, même si ce n'est pas largement utilisé. Voici un exemple:

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

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

De toute évidence, les commandes de \makeatletter peuvent être supprimées si vous faites cela dans un fichier .sty ou .cls.

Autres conseils

Une bidouille horrible:

\usepackage{ifthen}

...

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

On peut supposer que vous vouliez quelque chose de plus propre, mais c'est ce que j'ai.

En fonction de votre sémantique, uniquenonesense peut être vide.

    \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.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top