LaTeX Arguments Optionnels
Comment voulez-vous créer une commande avec des arguments optionnels en LaTeX?
Quelque chose comme:
\newcommand{\sec}[2][]{
\section*{#1
\ifsecondargument
and #2
\fi}
}
}
Alors, je peux l'appeler comme
\sec{Hello}
%Output: Hello
\sec{Hello}{Hi}
%Output: Hello and Hi
- Question pertinente: les Différentes définitions de commande avec et sans argument optionnel.
Vous devez vous connecter pour publier un commentaire.
Exemple de la guide:
L'idée générale derrière la création de "arguments optionnels" est d'abord à définir un intermédiaire de commande qui analyse l'avance afin de détecter ce que les personnages sont à venir dans le jeton torrent puis insère le les macros pour traiter l'argument(s) à venir selon le cas. Cela peut être assez fastidieux (bien que pas difficile) de l'utilisation de générique de programmation TeX. LaTeX est
\@ifnextchar
est très utile pour de telles choses.La meilleure réponse pour votre question est d'utiliser le nouveau
xparse
paquet. Il fait partie de la LaTeX3 de programmation de suite et contient de nombreuses fonctionnalités pour la définition des commandes arbitraires d'un argument optionnel.Dans votre exemple, vous avez un
\sec
macro qui prend soit un ou deux étayée d'arguments. Ce serait mise en œuvre à l'aide dexparse
avec les éléments suivants:L'argument
{ m g }
définit les arguments de\sec
;m
signifie "argument obligatoire" etg
est "facultatif embrassa argument".\IfNoValue(T)(F)
peut ensuite être utilisé pour vérifier si le deuxième argument était en effet présent ou non. Consultez la documentation pour les autres types d'arguments facultatifs qui sont autorisés.(Hello and ) (Hello and Hi)
Tous les ci-dessus montrent, il peut être dur de faire une belle, souple (ou interdire une surcharge) fonction en LaTeX!!! (TeX de code ressemble grec pour moi)
bien, juste pour ajouter mon récent (mais pas aussi souple) de développement, voici ce que j'ai utilisé récemment dans ma thèse doc, avec
Démarrer la commande, avec l'option de la commande" set vide par défaut:
J'ai ensuite la macro définir une variable temporaire, \temp{}, différemment selon si oui ou non l'argument optionnel est vide. Ce pourrait être étendu à tout argument passé.
Puis-je exécuter la macro à l'aide de l' \temp{} variable pour les deux cas. (Ici, il dicte court de légende à l'égalité de la longue légende si il n'a pas été spécifiée par l'utilisateur).
Dans ce cas, j'ai seulement le single "facultatif" argument de \newcommand{} offre. Si vous étiez à mettre en place pour, disons, 3 "facultatif" args, si vous souhaitez toujours avoir à envoyer les 3 vide args... par exemple.
qui est assez ridicule, je sais, mais c'est pour autant que je vais aller avec LaTeX, il est juste pas que les sens une fois que j'ai commencer à regarder au-TeX de code... je ne l'instar de M. Robertson xparse méthode bien que, peut-être que je vais essayer...
Tous vous avez besoin est le suivant:
x^2+1
oux^{2+1}
Donc, j'ai une question, est-ce que votre commande de test de présence de l'appareil? Est-il possible de créer LaTeX commande\sec
la production: "A, b,c et d" pour la commande\sec{A}[b,c,d]
, "A et b" pour\sec{A}[b] and "A" for
\sec{A}`?\sec{A}[b,c,d]
ou\sec{A}[b]
ou\sec{A}
.J'ai eu un problème similaire, lorsque j'ai voulu créer une commande,
\dx
, pour abréger\;\mathrm{d}x
(c'est à dire mettre un espace avant le différentiel de l'intégrale et ont le "d" à la verticale ainsi). Mais j'ai aussi voulu la rendre suffisamment souple pour inclure la variable d'intégration comme un argument facultatif. J'ai mis le code suivant dans le préambule.Puis
donne \dx avec argument optionnel
Voici ma tentative, il ne suit pas vos spécifications exactement bien. Pas entièrement testé, soyez donc prudent.