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édentesRévision précédente
2_programmation:macros:cette_commande_est_elle_definie [2021/09/27 21:41] – Traduction et remaniement pour mettre les solutions modernes et fiables en premier bdumont2_programmation:macros:cette_commande_est_elle_definie [2022/10/10 15:29] (Version actuelle) – Usage de ⟨...⟩ dbitouze
Ligne 32: Ligne 32:
  
 Quand on programme en <latex>\LaTeX{}</latex>, on peut directement utiliser Quand on programme en <latex>\LaTeX{}</latex>, on peut directement utiliser
-''\@ifundefined{<//cmd name//>}{<//action1//>}{<//action2//>}'', +''\@ifundefined{//cmd name//}{//action1//}{//action2//}'', 
-qui exécute ''<//action1//>'' si la commande **n'**est **pas** définie, +qui exécute ''//action1//'' si la commande **n'**est **pas** définie, 
-et ''<//action2//>'' dans le cas contraire +et ''//action2//'' dans le cas contraire 
-(''<//cmd name//>'' est le nom de la commande tout nu, **sans son antislash** ''\'').+(''//cmd name//'' est le nom de la commande tout nu, **sans son antislash** ''\'').
  
 Si vous utilisez une version de <latex>\LaTeX{}</latex> antérieure à 2018, il faut éviter de mélanger du code qui utilise les primitives d'ε-TeX avec du code qui utilise ''\@ifundefined'' (voir ci-dessous pourquoi). Comme cela peut se produire d'une extension à l'autre, vous n'êtes jamais à l'abri d'une erreur... Si vous utilisez une version de <latex>\LaTeX{}</latex> antérieure à 2018, il faut éviter de mélanger du code qui utilise les primitives d'ε-TeX avec du code qui utilise ''\@ifundefined'' (voir ci-dessous pourquoi). Comme cela peut se produire d'une extension à l'autre, vous n'êtes jamais à l'abri d'une erreur...
Ligne 44: Ligne 44:
  
 On trouve dans d'anciennes macros écrites en <latex>\TeX{}</latex> le procédé suivant On trouve dans d'anciennes macros écrites en <latex>\TeX{}</latex> le procédé suivant
-pour tester l'existence d'une commande ''<//commande//>'':+pour tester l'existence d'une commande ''//commande//'':
  
-''\ifx\<//commande//>\undefined<//code à exécuter//>''+''\ifx\//commande//\undefined//code à exécuter//''
  
 (Ceci exécute le code si la commande **n'**existe **pas**, bien sûr.) (Ceci exécute le code si la commande **n'**existe **pas**, bien sûr.)
Ligne 60: Ligne 60:
 Elle utilisait la propriété suivante de ''\csname'' : Elle utilisait la propriété suivante de ''\csname'' :
 si la commande n'existe pas, elle est créée comme alias de ''\relax''. si la commande n'existe pas, elle est créée comme alias de ''\relax''.
-Cette approche présente deux inconvénients : +Cette approche présente deux inconvénients :
  
   * Chaque utilisation de ''\@ifundefined'' avec un nom de commande qui n'existe pas crée cette commande, définie comme identique à ''\relax'' ; si cette commande n'est pas redéfinie ensuite, elle est conservée inutilement en mémoire par le moteur <latex>\TeX{}</latex> ;   * Chaque utilisation de ''\@ifundefined'' avec un nom de commande qui n'existe pas crée cette commande, définie comme identique à ''\relax'' ; si cette commande n'est pas redéfinie ensuite, elle est conservée inutilement en mémoire par le moteur <latex>\TeX{}</latex> ;
2_programmation/macros/cette_commande_est_elle_definie.1632778877.txt.gz · Dernière modification : 2021/09/27 21:41 de bdumont
CC Attribution-Share Alike 4.0 International
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0