====== Comment traduire des commandes LaTeX en commandes TeX? ======

À plusieurs endroits de cette FAQ sont données des réponses intégrant des définitions de commandes <latex>\LaTeX</latex>. Parfois, ces commandes peuvent également aider les utilisateurs de Plain <latex>\TeX</latex> ou d'autres [[https://faq.gutenberg.eu.org/1_generalites/glossaire/qu_est_ce_qu_un_format|formats]]. Cette page tente de fournir un guide approximatif pour transcrire ces définitions de commandes dans d'autres formats.

<latex>\LaTeX</latex> propose des commandes qui remplacent ''\def'' du fait de sa philosophie générale : l'utilisateur doit être protégé de lui-même. Ainsi, l'utilisateur dispose des commandes suivantes :
  * deux commandes différentes selon que la commande à définir existe (''\renewcommand'') ou pas (''\newcommand''). Si l'état de la commande s'avère différent de celui attendu par l'utilisateur, une erreur est signalée ;
  * la commande ''\providecommand'' définit uniquement une commande si la cible n'est pas déjà définie ;
  * la  commande ''\DeclareRobustCommand'' crée une commande qui est « robuste » (c'est-à-dire qui ne se développera pas si elle est soumise à un "développement protégé" par <latex>\LaTeX</latex>). Pour un utilisateur de Plain <latex>\TeX</latex>, ''\DeclareRobustCommand'' doit être traitée comme une version non vérifiable de ''\newcommand''. 

Ainsi, <latex>\LaTeX</latex> n'a pas d'équivalent direct de ''\def'', qui ignore l'état actuel de la commande.

Les commandes <latex>\LaTeX</latex> sont, par défaut, définies avec la structure ''\long'' ; un « ''*'' » optionnel entre ''\newcommand'' et ses arguments spécifie que la commande n'utilise pas la  structure ''\long''. Le « ''*'' » est ainsi détecté par une commande ''\ifstar'' qui utilise ''\futurelet'' pour basculer entre deux branches et qui absorbe le « ''*'' » : les utilisateurs de <latex>\LaTeX</latex> sont encouragés à considérer le « ''*'' » comme une part du nom de la commande. 

Les arguments d'une commande <latex>\LaTeX</latex> sont spécifiés par deux arguments optionnels : un nombre d'arguments (de 0 à 9 et, si le nombre est 0, l'argument optionnel peut être omis) et une valeur par défaut pour le premier argument si celui-ci peut être facultatif. Par exemple : 

<code latex>
\newcommand\truc{...}
\newcommand\truc[0]{...}
\newcommand\truc[1]{...#1...}
\newcommand\truc[2][machin]{...#1...#2...}
</code>

Dans le dernier cas, ''\truc'' peut être appelé sous la forme ''\truc{blabla}'' qui équivaut à ''\truc[machin]{blabla}'' (en utilisant la valeur par défaut donnée pour le premier argument) ou sous la forme ''\foo[chose]{blabla}'' (avec un premier argument explicite).

La manière de coder des commandes avec des arguments optionnels est illustrée ici pour notre exemple ''\truc'' : 

<code latex>
\def\truc{\futurelet\next\@r@truc}
\def\@r@truc{\ifx\next[%
    \let\next\@x@truc
  \else
    \def\next{\@x@truc[machin]}%
  \fi
  \next
}
\def\@x@truc[#1]#2{...#1...#2...}
</code>

-----
//Source :// [[faquk>FAQ-cvtlatex|Transcribing LaTeX command definitions]]

{{htmlmetatags>metatag-keywords=(LaTeX,programming)
metatag-og:title=(Comment traduire des commandes LaTeX en commandes TeX)
metatag-og:site_name=(FAQ LaTeX francophone)
}}