Création de commande

shinitchi
Modifié (25 Feb) dans LaTeX
Bonjour à tous,
je cherche à créer une commande qui me permet de coder une lettre en une autre du style :

je créé d'abord une permutation des 26 lettres à coup de
\newcommand{\LA}{X}
\newcommand{\LB}{V}
\newcommand{\LC}{M}
...
\newcommand{\LY}{O}
\newcommand{\LZ}{G}
puis ensuite, je voudrais créer une commande unique
\newcommand{\code}[1]{la lettre #1 devient \L#1}

qui afficherait "la lettre B devient V" si j'écris \code{B} dans le cas où la lettre B serait codée en V. Mon problème est que, définie comme telle, LaTeX me renvoie "la lettre B devient LB" (le L est barré). En gros, le \L défini dans la commande affiche le L barré et le "#1" n'est pas intégré au nom de la commande. Quelqu'un aurait une astuce ?

Je précise que si vous connaissez une commande conditionnelle prenant un caractère texte en paramètre du style "Si #1 == B alors V", je suis preneur. Toute mes programmations tournent autour du package xlop où je peux utiliser des commandes conditionnelles à partir de nombres uniquement. Jusqu'alors, je remplaçais les lettres par les nombres mais je voudrais gagner du temps en évitant de faire cette association.
En vous remerciant par avance.

Réponses

  • incognito
    Modifié (25 Feb)
    \begin{document}
    <br>\newcommand{\LA}{X}
    \newcommand{\LB}{V}%
    \newcommand{\LC}{M}
    <br>\newcommand{\LY}{O}
    \newcommand{\LZ}{G}
    <br>\newcommand{\code}[1]{\csname L#1\endcsname}%
    <br>La lettre A donne \code{A} 
    <br>La lettre B donne \code{B} 
    <br>\end{document}
    Il faut bien sûr enlever ces fichus <br> !!
  • @incognito : génial, merci beaucoup c'est ce qu'il me fallait et ça marche très bien. Vraiment un grand merci pour ton aide !
  • Je me demande pourquoi LuaLaTeX et luacode ne sont pas plus souvent utilisés…
    \documentclass{article}
    \usepackage{luacode}
    \begin{luacode*}
      permute_table = { ["A"]="X", ["B"]="V", ["C"]="M", ["Y"]="O",
                        ["Z"]="G" }
    
      function permute(letter)
        tex.print(permute_table[letter])
      end
    \end{luacode*}
    \newcommand\p[1]{\directlua{permute(\luastring{#1})}}
    
    \begin{document}
      La lettre B donne \p{B}
    \end{document}
    
    Reste juste à compléter la table correctement avec les lettres manquantes
  • dp
    dp
    Modifié (25 Feb)
    Remarquez, on peut même se passer de la fonction permute ad-hoc
    \documentclass{article}
    \usepackage{luacode}
    \begin{luacode*}
      permute_table = { ["A"]="X", ["B"]="V", ["C"]="M", ["Y"]="O",
                        ["Z"]="G" }
    \end{luacode*}
    \newcommand\p[1]{\directlua{tex.print(permute_table[\luastring{#1}])}}
    
    \begin{document}
      La lettre B donne \p{B}
    \end{document}
    
  • dp
    dp
    Modifié (25 Feb)
    Et si plus tard on veut faire des choses un peu plus compliqués, il suffit d'étendre tranquillement nos fonctions lua. Par exemple pour le chiffrement de César ça donne, en quelques lignes
    \documentclass{article}
    \usepackage{luacode}
    \begin{luacode*}
      function caesar(letter, n)
        local b = (letter:lower() == letter and string.byte('a') or string.byte('A'))
        local l = letter:byte() - b
        tex.print(string.char((l+n)%26+b))
      end
    \end{luacode*}
    \newcommand\caesar[2]{\directlua{caesar(\luastring{#1}, #2)}}
    
    \begin{document}
      La lettre A devient \caesar{A}{4}
    \end{document}
    

  • shinitchi
    Modifié (25 Feb)
    @dp : "Je me demande pourquoi LuaLaTeX et luacode ne sont pas plus souvent utilisés…"
    En ce qui me concerne, c'est juste parce que je ne les connaissais pas mais ça à l'air d'être de la bombe ce que tu me fais découvrir. Il va juste falloir que je me familiarise avec la syntaxe.

    Je ne suis pas programmeur de base mais j'ai dû m'y mettre par mes "propres" moyens par obligation. J'ai découvert le package "xlop" par le biais d'un collègue "Jean-Côme CHARPENTIER"  (créateur) et ses fonctionnalités me suffisaient jusqu'à présent (couplées à celles de "randomlist") pour générer des fiches d'exercices randoms en boucle.
    Je ne suis pas allé chercher plus loin jusqu'à aujourd'hui. 

    Je te remercie sincèrement pour ton aide et ta transmission de connaissances.
  • Tu as quelques exemples sympas sur mathematex. :)
  • Super, merci encore pour la source ! Je prendrai le temps de regarder et de m'en inspirer.
  • shinitchi
    Modifié (26 Feb)
    @dp

    j'ai essayé d'utiliser le package luacode mais j'obtiens le message d'erreur suivant : ! Package luacode Error: LuaTeX is required for this package. Aborting..
    Est-ce que je dois charger un autre package "LuaTex" en amont pour pouvoir utiliser le langage luacode ?
  • Il faut utiliser un compilateur LuaTex ou LuaLaTex... et non un compilateur LaTex.
    Par exemple, si tu utilises l'éditeur TexWorks, il suffit de changer la ligne à côté de la flèche verte de compilation, en sélectionnant la bonne.
  • @bisam

    Ok parfait merci. Je suis sur TexMaker, mais je viens de voir dans le menu déroulant LuaLaTex.
Connectez-vous ou Inscrivez-vous pour répondre.