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
2_programmation:macros:definir_une_macro_a_l_interieur_d_une_autre_macro [2021/04/21 14:20]
yannick.tanguy Traduction de l'article anglais.
2_programmation:macros:definir_une_macro_a_l_interieur_d_une_autre_macro [2021/11/17 08:35] (Version actuelle)
yannick.tanguy Fusion de deux pages.
Ligne 6: Ligne 6:
  
 <code latex> <code latex>
-\newcommand\un[1]{+#1+#1+#1++\newcommand{\un}[1]{Joie, quelle ​#1 !
-\def\one#1{+#1+#1+#1+}+\def\one#1{Joie, quelle ​#1 !}
 </​code>​ </​code>​
  
-Dans les deux, que vous saisissiez ''​\un{trois}''​ ou ''​\one{trois}'',​ le développement de la commande va vous donner : ''​+trois+trois+trois+''​.+Dans les deux, que vous saisissiez ''​\un{joie}''​ ou ''​\one{joie}'',​ le développement de la commande va vous donner : « Joie, quelle joie ! ».
  
 Modifions maintenant naïvement ces commandes pour qu'​elles définissent une autre commande : Modifions maintenant naïvement ces commandes pour qu'​elles définissent une autre commande :
  
 <code latex> <code latex>
-\newcommand\un[1]{+#1+\newcommand\deux[1]{xx#1}} +\newcommand{\un}[1]{Joie, quelle ​#1 !% 
-\def\one#1{+#1+\def\two #1{xx#1}}+  ​\newcommand{\deux}[1]{Horreur, quelle ​#1 !}
 +
 +\def\one#1{Joie, quelle ​#1 !\def\two #1{Horreur, quelle ​#1 !}}
 </​code>​ </​code>​
  
-Ici, ''​\un{trois}''​ va afficher ​''​+trois+'' ​puis exécuter la commande ''​\newcommand{deux}[1]{xxtrois}'' ​qui définira ​une commande ''​\deux''​ qui ignore son argument et restitue systématiquement ​''​xxtrois''​. En effet ''#​1''​ est remplacé systématiquement par le premier argument.+Ici, ''​\un{joie}''​ va afficher ​« Joie, quelle joie ! » puis exécuter la commande ''​\newcommand{\deux}[1]{Horreur, quelle joie !}''​, définition d'une commande ''​\deux''​ qui ignore son argument et restitue systématiquement ​« Horreur, quelle joie ! ». En effet ''#​1''​ est remplacé systématiquement par le premier argument.
  
-La commande ''​\one{trois}''​ sera encore plus insidieuse car, après avoir affiché ​''​+trois+''​, elle va exécuter la commande ''​\def\two ​trois{xxtrois}}''​... autrement dit créer une commande ''​\two''​ qui demandera d'​être appelée en saisissant toujours ''​\two ​trois''​ et qui restituera toujours ​''​xxtrois''​+La commande ''​\one{joie}''​ sera encore plus insidieuse car, après avoir affiché ​« Joie, quelle joie ! », elle va exécuter la commande ''​\def\two ​joie{Horreur, quelle joie !}}''​... autrement dit créer une commande ''​\two''​ qui demandera d'​être appelée en saisissant toujours ''​\two ​joie''​ et qui restituera toujours ​« Horreur, quelle joie ! »
  
 De fait, pour obtenir le bon comportement,​ nous devons utiliser la définition suivante : De fait, pour obtenir le bon comportement,​ nous devons utiliser la définition suivante :
  
 <code latex> <code latex>
-\newcommand\un[1]{+#1+\newcommand\deux[1]{xx##1}} +\newcommand{\un}[1]{Joie, quelle ​#1 !% 
-\def\one#1{+#1+\def\two ##1{xx##1}}+  ​\newcommand{\deux}[1]{Horreur, quelle ​##1 !}
 +
 +\def\one#1{Joie, quelle ​#1 !\def\two ##1{Horreur, quelle ​##1 !}}
 </​code>​ </​code>​
  
-La commande ''​\un{trois}''​ exécutera ''​\newcommand\deux[1]{xx#​1}''​ tandis que ''​\one{trois}''​ exécutera bien ''​\def\two #1{xx#1}}''​. Ici ''##​1''​ a bien été remplacé par ''#​1''​.+La commande ''​\un{joie}''​ exécutera ''​\newcommand{\deux}[1]{Horreur, quelle ​#1 !}''​ tandis que ''​\one{joie}''​ exécutera bien ''​\def\two #1{Horreur, quelle ​#1 !}''​. Ici ''##​1''​ a bien été remplacé par ''#​1''​.
  
 Pour imbriquer une définition dans une définition à l'​intérieur d'une définition,​ vous avez besoin de ''####'',​ en doublant le nombre de signes ''#''​. Au niveau d'​imbrication suivant, vous avez besoin de 8 ''#'',​ et ainsi de suite. ​ Pour imbriquer une définition dans une définition à l'​intérieur d'une définition,​ vous avez besoin de ''####'',​ en doublant le nombre de signes ''#''​. Au niveau d'​imbrication suivant, vous avez besoin de 8 ''#'',​ et ainsi de suite. ​
 +
 +Il est aussi à noter que le doublement des signes ''#''​ est nécessaire que la commande englobante ait ou pas un argument : 
 +
 +<code latex>
 +\newcommand{\un}{Joie,​ quelle joie !%
 +  \newcommand{\deux}[1]{Horreur,​ quelle ##1 !}%
 +}
 +</​code>​
  
 ----- -----
-//Source :// [[faquk>​FAQ-hash|Defining macros within macros]]+//Source :// 
 +  * [[faquk>​FAQ-hash|Defining macros within macros]] 
 +  * [[faquk>​FAQ-ltxhash|Defining LaTeX commands within other commands]]
  
 {{htmlmetatags>​metatag-keywords=(LaTeX,​programming) {{htmlmetatags>​metatag-keywords=(LaTeX,​programming)
2_programmation/macros/definir_une_macro_a_l_interieur_d_une_autre_macro.txt · Dernière modification: 2021/11/17 08:35 par yannick.tanguy
CC Attribution-Share Alike 4.0 International
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0