Différences
Ci-dessous, les différences entre deux révisions de la page.
| Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente | ||
| 2_programmation:macros:arguments_optionnels_comme_pour_section [2021/09/03 14:10] – Ajout \NewDocumentCommand bdumont | 2_programmation:macros:arguments_optionnels_comme_pour_section [2021/10/21 11:50] (Version actuelle) – [Avec \NewDocumentCommand] réduction de taille de colonne pour affichage côte à côte bdumont | ||
|---|---|---|---|
| Ligne 8: | Ligne 8: | ||
| ne fonctionnent pas vraiment comme l' | ne fonctionnent pas vraiment comme l' | ||
| En effet, la valeur par défaut de l' | En effet, la valeur par défaut de l' | ||
| - | est celle l' | + | est celle de l' |
| - | que vous connaissiez à l' | + | au contraire, '' |
| + | de l' | ||
| - | $\Reponse$ | + | L' |
| + | <WRAP column 70ex> | ||
| <code latex> | <code latex> | ||
| \documentclass{article} | \documentclass{article} | ||
| Ligne 28: | Ligne 30: | ||
| \end{document} | \end{document} | ||
| </ | </ | ||
| + | </ | ||
| + | <WRAP column> | ||
| + | < | ||
| + | \documentclass{article} | ||
| + | |||
| + | \newcommand\thing[2][\DefaultOpt]{% | ||
| + | \def\DefaultOpt{# | ||
| + | optional arg: #1, mandatory arg: #2% | ||
| + | } | ||
| + | |||
| + | \begin{document} | ||
| + | \thispagestyle{empty} | ||
| + | \thing{manda}% #1=#2 | ||
| + | |||
| + | \thing[opti]{manda}% # | ||
| + | \end{document} | ||
| + | </ | ||
| + | </ | ||
| + | <WRAP clear/> | ||
| + | |||
| - | $\Reponse$ | + | Le code source de \LaTeX |
| il utilise une macro '' | il utilise une macro '' | ||
| été écrit dans LaTeX : | été écrit dans LaTeX : | ||
| <code latex> | <code latex> | ||
| + | \makeatletter | ||
| \newcommand\thing{\@dblarg\@thing} | \newcommand\thing{\@dblarg\@thing} | ||
| \newcommand\@thing[2][\@error]{% | \newcommand\@thing[2][\@error]{% | ||
| optional arg: #1, mandatory arg: #2% | optional arg: #1, mandatory arg: #2% | ||
| } | } | ||
| + | \makeatother | ||
| </ | </ | ||
| Ligne 44: | Ligne 68: | ||
| est appelée, un bug apparaît dans le code utilisateur... | est appelée, un bug apparaît dans le code utilisateur... | ||
| + | typ | ||
| + | o | ||
| ===== Avec \NewDocumentCommand ===== | ===== Avec \NewDocumentCommand ===== | ||
| Ligne 50: | Ligne 76: | ||
| <code latex> | <code latex> | ||
| \NewDocumentCommand\thing{o m}{% | \NewDocumentCommand\thing{o m}{% | ||
| - | | + | |
| } | } | ||
| </ | </ | ||
| Ligne 60: | Ligne 86: | ||
| <code latex> | <code latex> | ||
| \NewDocumentCommand\thing{O{valeur par défaut} m}{% | \NewDocumentCommand\thing{O{valeur par défaut} m}{% | ||
| - | | + | |
| } | } | ||
| </ | </ | ||
| + | Il est même possible d' | ||
| + | <WRAP column 60ex> | ||
| + | <code latex> | ||
| + | \NewDocumentCommand\thing{ | ||
| + | O{valeur par défaut} | ||
| + | O{un autre défaut} | ||
| + | m | ||
| + | }{% | ||
| + | premier argument optionnel entre crochets : \textbf{# | ||
| + | second argument optionnel entre crochets : \textbf{# | ||
| + | argument obligatoire : \textbf{#3} | ||
| + | } | ||
| + | |||
| + | \thing[le premier argument]{% | ||
| + | j'ai défini le premier argument entre crochets mais | ||
| + | pas le second} | ||
| + | |||
| + | \thing[le premier argument][le second argument]{% | ||
| + | j'ai défini les deux arguments optionnels} | ||
| + | |||
| + | \thing[][le second argument]{le premier argument | ||
| + | est vide} | ||
| + | |||
| + | \thing[valeur par défaut][le second argument]{% | ||
| + | pour obtenir la valeur par défaut du premier | ||
| + | argument et définir le second argument, j'ai | ||
| + | dû indiquer explicitement la valeur par défaut} | ||
| + | </ | ||
| + | </ | ||
| + | <WRAP column> | ||
| + | < | ||
| + | \documentclass{article} | ||
| + | \thispagestyle{empty} | ||
| + | \setlength{\parskip}{10pt} | ||
| + | \setlength{\parindent}{0pt} | ||
| + | \def\thing[# | ||
| + | premier argument optionnel entre crochets : \textbf{# | ||
| + | second argument optionnel entre crochets : \textbf{# | ||
| + | argument obligatoire : \textbf{#3} } | ||
| + | |||
| + | \begin{document} | ||
| + | |||
| + | \thing[le premier argument][un autre défaut]{j' | ||
| + | |||
| + | \thing[le premier argument][le second argument]{j' | ||
| + | |||
| + | \thing[][le second argument]{le premier argument est vide} | ||
| + | |||
| + | \thing[valeur par défaut][le second argument]{pour obtenir la valeur par défaut du premier argument et définir le second argument, j'ai dû indiquer explicitement la valeur par défaut} | ||
| + | |||
| + | \end{document} | ||
| + | </ | ||
| + | </ | ||
| + | <WRAP clear/> | ||
| ----- | ----- | ||

