Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
Prochaine révision Les deux révisions suivantes
2_programmation:macros:arguments_optionnels_comme_pour_section [2020/11/24 23:41]
jejust Traduction en français.
2_programmation:macros:arguments_optionnels_comme_pour_section [2021/09/03 15:30]
bdumont [Avec \NewDocumentCommand] typo
Ligne 1: Ligne 1:
-====== Comment définir des arguments optionnels comme ceux de `\section`? ======+====== Comment définir des arguments optionnels comme ceux de \section ? ===== 
 + 
 +On présentera quelques méthodes traditionnelles, avant de se tourner vers la commande ''\NewDocumentCommand'' désormais incluse dans le noyau de <latex>\LaTeX</latex>, qui fournit une syntaxe //ad hoc//. 
 + 
 +===== Avec \newcommand =====
  
 Les arguments optionnels des macros définies avec ''\newcommand'' Les arguments optionnels des macros définies avec ''\newcommand''
Ligne 39: Ligne 43:
 et un argument obligatoire ; si la valeur par défaut de la ''\newcommand'' et un argument obligatoire ; si la valeur par défaut de la ''\newcommand''
 est appelée, un bug apparaît dans le code utilisateur... est appelée, un bug apparaît dans le code utilisateur...
 +
 +typo===== Avec \NewDocumentCommand =====
 +
 +La macro ''\NewDocumentCommand'', autrefois fournie par l'extension [[ctanpkg>xparse]] et intégrée dans le cœur de <latex>\LaTeX</latex> depuis 2020, fournit une syntaxe qui permet de définir les commandes de manière flexible. On peut ainsi redéfinir la commande ''\thing'' ci-dessus :
 +
 +<code latex>
 +\NewDocumentCommand\thing{o m}{%
 +  argument optionnel entre crochets : #1,  argument obligatoire : #2%
 +}
 +</code>
 +
 +''o'' indique un argument optionnel et ''m'' un argument obligatoire (//mandatory//). Chaque argument peut être rendu long en préfixant le caractère d'un ''+''.
 +
 +On peut indiquer une valeur par défaut de la manière suivante :
 +
 +<code latex>
 +\NewDocumentCommand\thing{O{valeur par défaut} m}{%
 +  argument optionnel entre crochets : #1,  argument obligatoire : #2%
 +}
 +</code>
 +
 +Il est même possible d'indiquer plus d'un argument entre crochets, auquel cas l'utilisateur ne pourra pas définir le second sans avoir défini le premier (noter que ''[]'' produit un argument vide, pas l'argument par défaut) :
 +
 +<WRAP column 75ex>
 +<code latex>
 +\NewDocumentCommand\thing{
 +  O{valeur par défaut}
 +  O{un autre défaut} 
 +  m
 +}{%
 +  premier argument optionnel entre crochets : \textbf{#1}\\
 +  second argument optionnel entre crochets : \textbf{#2}\\
 +  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}
 +</code>
 +</WRAP>
 +<WRAP column>
 +<latexdoc>
 +\documentclass{article}
 +\thispagestyle{empty}
 +\setlength{\parskip}{10pt}
 +\setlength{\parindent}{0pt}
 +\def\thing[#1][#2]#3{%
 +  premier argument optionnel entre crochets : \textbf{#1}\\
 +  second argument optionnel entre crochets : \textbf{#2}\\
 +  argument obligatoire : \textbf{#3} }
 +
 +\begin{document}
 +
 +\thing[le premier argument][un autre défaut]{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}
 +
 +\end{document}
 +</latexdoc>
 +</WRAP>
 +<WRAP clear/>
  
 ----- -----
  
-//Source:// [[faquk>FAQ-oarglikesect|Optional arguments like `\section`]]+//Sources ://  
 + 
 +  * [[faquk>FAQ-oarglikesect|Optional arguments like \section.]] 
 +  * Joseph Wright, [[https://www.tug.org/TUGboat/tb42-1/tb130wright-newdoccmd.pdf|\NewDocumentCommand versus \newcommand versus …]], //TUGboat// 42-1, 2021.
  
 {{htmlmetatags>metatag-keywords=(LaTeX,latex,macros,programmation,plusieurs arguments optionnels) {{htmlmetatags>metatag-keywords=(LaTeX,latex,macros,programmation,plusieurs arguments optionnels)
-metatag-og:title=(Comment définir des arguments optionnels comme ceux de `\section`?)+metatag-og:title=(Comment définir des arguments optionnels comme ceux de \section?)
 metatag-og:site_name=(FAQ LaTeX francophone) metatag-og:site_name=(FAQ LaTeX francophone)
 }} }}
  
2_programmation/macros/arguments_optionnels_comme_pour_section.txt · Dernière modification: 2021/10/21 11:50 de bdumont
CC Attribution-Share Alike 4.0 International
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0