Flèches de distributivité — Les-mathematiques.net The most powerful custom community solution in the world

Flèches de distributivité

Bonjour,

j'aimerais pouvoir afficher les flèches d'aide à la distributivité en utilisant Tikz mais mes maigres compétences ne m'ont pas permis d'atteindre mon objectif.
Toute aide sera la bienvenue.
Merci

[modification du code]

En fouinant sur StackExchange j'ai bricolé ça
\documentclass{article}
\usepackage[utf8]{inputenc}

\usepackage{tikz}
\usetikzlibrary{arrows}

\newcommand{\lettre}[1]{%
\tikz[baseline, anchor=base, inner sep=0pt, outer sep = 1.5pt, remember picture] \node[] (#1) {$#1$};
}

\newcommand{\flechehaut}[2]{%
\tikz[remember picture, overlay] \draw[-stealth, out=50, in=140] (#1.north) to (#2.north);
}

\newcommand{\flechebas}[2]{%
\tikz[remember picture, overlay] \draw[-stealth, out=-50, in=-140] (#1.south) to (#2.south);
}

\begin{document}
\[(\lettre{2x}-\lettre{5})(\lettre{5x}+\lettre{2})=2x \times 5x + 2x \times 2 - 5 \times 5x - 5\times 2\]
\flechehaut{2x}{5x}
\flechehaut{2x}{2}
\flechebas{5}{2}
\flechebas{5}{5x}


\end{document}
Et ça me convient pas mal...

Réponses

  • Bonsoir,

    Ça marche parce que les termes dans les facteurs sont deux à deux distincts et, espérons-le, uniques dans le document. La solution suivante est plus souple (tu peux choisir les étiquettes telles que a1, a2, b1 et b2 comme tu veux, mais il ne faut pas les réutiliser d'une formule à l'autre). D'autre part, je te conseille de mettre les appels aux commandes \flechehaut et \flechebas à l'intérieur de la formule concernée ; si tu les mets après, cela peut modifier l'espace après la formule.
    \documentclass{article}
    \usepackage{tikz}
    \usetikzlibrary{tikzmark}
    
    \newcommand*{\terme}[3][inner sep=0pt, outer sep = 1.5pt]{%
      \tikzmarknode[#1]{#2}{#3}%
    }
    
    \newcommand*{\flechehaut}[3][blue!60]{%
      \tikz[remember picture, overlay]
        \draw[->, out=50, in=140, #1] (#2.north) to (#3.north);
    }
    
    \newcommand*{\flechebas}[3][blue!60]{%
      \tikz[remember picture, overlay]
        \draw[->, out=-50, in=-140, #1] (#2.south) to (#3.south);
    }
    
    \begin{document}
    
    \[ ( \terme{a1}{2} + \terme{a2}{2} ) \times
       ( \terme{b1}{2} + \terme{b2}{2} )
       \flechehaut{a1}{b1}           \flechehaut[red!60]{a2}{b1}
       \flechebas[green!60]{a2}{b1}  \flechebas[orange]{a2}{b2} \]
    
    \end{document}
    
    123132
  • Merci beaucoup Brian. Tes interventions sont toujours sources de nouvelles connaissances.
    J'ai découvert :
    • l'existence de tikzmark
    • la différence entre \newcommand et \newcommand*
  • Ravi de l'entendre. Tu peux désormais lire ça et utiliser \NewDocumentCommand en lieu et place de \newcommand(*).

    Le * de \newcommand s'applique à tous les arguments sans distinction alors que \NewDocumentCommand permet de choisir ceux qui ont le droit d'être “longs” (i.e., contenir des tokens \par) et ceux qui n'ont pas le droit. Par défaut, les arguments ne sont pas “longs” (comme \newcommand*). Un argument le devient si l'on précède son spécificateur d'un +. Exemple :
    \documentclass{article}
    % \usepackage{xparse} % seulement nécessaire si LaTeX plus vieux que 2020-10-01
    
    \NewDocumentCommand{\essai}{m O{val. défaut} +m m}{%
      |#1|#2|#3|#4|
    }
    \begin{document}
    
    \essai{asdf}{545
    
      dggs}{xyz}
    
    \medskip
    \essai{asdf}[pouet]{545
    
      dggs}{xyz}
    
    \end{document}
    
    Ici, \essai prend un argument obligatoire suivi d'un argument optionnel, puis de deux obligatoires. Seul l'avant-dernier argument obligatoire a le droit de contenir des \par (~ des lignes blanches). Il y a plein d'autres possibilités (voir le manuel d'xparse).123146
  • Merci je vais étudier ça.
    Curieusement avec ma version de Texlive (2021) le | s'est transformé en --
  • C'est normal, c'est un coup du codage de police (= codage de sortie de TeX). Je ne l'ai pas vu car j'ai compilé avec LuaTeX qui utilise des polices Unicode. Le | en entrée génère alors bien un | dans le document. Avec le codage de police OT1 utilisé par défaut par pdfTeX, le symbole | en entrée ne produit pas un | dans le document, c'est vrai. C'est expliqué ici. C'est une illustration du fait qu'OT1 n'est pas ASCII, même s'ils se ressemblent pas mal sur les caractères imprimables.

    Si tu ajoutes \usepackage[T1]{fontenc} ou que tu compiles avec lualatex ou xelatex, tu verras bien un | en sortie.
Connectez-vous ou Inscrivez-vous pour répondre.
Success message!