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
2_programmation:macros:arguments_optionnels_comme_pour_section [2021/09/03 17:19]
bdumont [Avec \NewDocumentCommand] Plusieurs arguments entre crochets
2_programmation:macros:arguments_optionnels_comme_pour_section [2021/10/21 13:50]
bdumont [Avec \NewDocumentCommand] réduction de taille de colonne pour affichage côte à côte
Ligne 8: Ligne 8:
 ne fonctionnent pas vraiment comme l'​argument optionnel de ''​\section''​. ne fonctionnent pas vraiment comme l'​argument optionnel de ''​\section''​.
 En effet, la valeur par défaut de l'​argument optionnel de ''​\section''​ En effet, la valeur par défaut de l'​argument optionnel de ''​\section''​
-est celle l'​argument obligatoirepar contre, ''​\newcommand''​ exige +est celle de l'​argument obligatoire ​donnée ​par l'​utilisateur ; 
-que vous connaissiez à l'​avance ​la valeur ​par défaut ​de l'​argument.+au contraire, ''​\newcommand''​ exige que vous déterminiez ​la valeur ​ 
 +de l'​argument ​par défaut au moment où vous définissez la commande.
  
  
-$\Reponse$  ​L'​astuce requise consiste à utiliser une macro dans l'​argument optionnel :+L'​astuce requise consiste à utiliser une macro dans l'​argument optionnel :
  
 +<WRAP column 70ex>
 <code latex> <code latex>
 \documentclass{article} \documentclass{article}
Ligne 28: Ligne 30:
 \end{document} \end{document}
 </​code>​ </​code>​
 +</​WRAP>​
 +<WRAP column>
 +<​latexdoc>​
 +\documentclass{article}
 +
 +\newcommand\thing[2][\DefaultOpt]{%
 +  \def\DefaultOpt{#​2}%
 +  optional arg: #1,  mandatory arg: #2%
 +}
 +
 +\begin{document}
 +\thispagestyle{empty}
 +\thing{manda}% #1=#2
 +
 +\thing[opti]{manda}% #​1="​opti"​
 +\end{document}
 +</​latexdoc>​
 +</​WRAP>​
 +<WRAP clear/>
 +
  
-$\Reponse$  ​LaTeX lui-même a une méthode plus subtile (mais moins facile à comprendre):+Le code source de \LaTeX ​utilise ​une méthode plus subtile :
 il utilise une macro ''​\@dblarg''​. Voici comment l'​exemple précédent aurait il utilise une macro ''​\@dblarg''​. Voici comment l'​exemple précédent aurait
 é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
 </​code>​ </​code>​
  
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 64: Ligne 90:
 </​code>​ </​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 :+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>+<WRAP column ​60ex>
 <code latex> <code latex>
 \NewDocumentCommand\thing{ \NewDocumentCommand\thing{
Ligne 79: Ligne 105:
  
 \thing[le premier argument]{% \thing[le premier argument]{%
-  j'ai défini le premier argument entre crochets mais pas le second}+  j'ai défini le premier argument entre crochets mais  
 +  ​pas le second}
  
 \thing[le premier argument][le second argument]{% \thing[le premier argument][le second argument]{%
   j'ai défini les deux arguments optionnels}   j'ai défini les deux arguments optionnels}
  
-\thing[][le second argument]{le premier argument est vide}+\thing[][le second argument]{le premier argument ​ 
 +  ​est vide}
  
 \thing[valeur par défaut][le second argument]{% \thing[valeur par défaut][le second argument]{%
-  pour obtenir la valeur par défaut du premier ​argument et +  pour obtenir la valeur par défaut du premier  
-  définir le second argument, j'ai dû indiquer explicitement +  ​argument et définir le second argument, j'ai 
-  ​la valeur par défaut}+  ​dû indiquer explicitement la valeur par défaut}
 </​code>​ </​code>​
 </​WRAP>​ </​WRAP>​
2_programmation/macros/arguments_optionnels_comme_pour_section.txt · Dernière modification: 2021/10/21 13:50 par bdumont
CC Attribution-Share Alike 4.0 International
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0