Expansion imbriquée de macro LaTeX

a marqué ce sujet comme résolu.

Bonjour !

Afin de découvrir et pratiquer les macros et règles d’expansion de LaTeX, je tente de faire quelques macros imbriquées pour réaliser des opérations mathématiques et (sans trop de surprise) j’ai quelques soucis avec.

Un bout de code pour l’exemple :

\documentclass{article}
\usepackage{xfp}

\def\getx(#1,#2,#3){#1}
\def\gety(#1,#2,#3){#2}
\def\getz(#1,#2,#3){#3}

% Vector operations
\def\vsub(#1)(#2){(\fpeval{\getx(#1)-\getx(#2)},\fpeval{\gety(#1)-\gety(#2)},\fpeval{\getz(#1)-\getz(#2)})}
\def\vdot(#1)(#2){\fpeval{\getx(#1)*\getx(#2)+\gety(#1)*\gety(#2)+\getz(#1)*\getz(#2)}}

% #1 = ray origin (point), #2 = ray dir (vect), #3 = sphere center (point), #4 = radius
\def\hitspherediscriminant(#1)(#2)(#3)#4{%
    \edef\v{\fpeval{\vsub(#1)(#3)}}%
    \edef\a{\fpeval{\vdot(#2)(#2)}}%
    \edef\b{\fpeval{2.0 * \expandafter\vdot\v(#2)}}%
    \edef\c{\fpeval{\vdot(#1)(#1) - #4*#4}}%
    \edef\discriminant{\fpeval{\b*\b - 4.0*\a*\c}}%
    \discriminant
}

\begin{document}
    % Works fine
    \def\res{\hitspherediscriminant(0,0,0)(1,0.5,0)(0,0.5,0)2}%
    \res \\
    % PROBLEM HERE during expansion
    %\edef\res{\hitspherediscriminant(0,0,0)(1,0.5,0)(0,0.5,0)2}%
    %\res \\
\end{document}

Mon problème est lorsque j’essaie de continuer l’expansion des macros en utilisant un \edef sur le résultat de ma macro hitspherediscriminant et d’utiliser ce dernier dans de nouvelles macros. Je pense que ma manière de faire, comme si j’utilisais des fonctions, n’est clairement pas la manière usuelle et j’aimerai bien des conseils sur une meilleure approche.

Au passage l’erreur que j’ai si je décommente le \edef est :

! Undefined control sequence.
\GenericError  ...                                
                                                    #4  \errhelp \@err@     ...
l.26 ...herediscriminant(0,0,0)(1,0.5,0)(0,0.5,0)2

Ça n’aide pas énormément, et je ne suis pas sûr non plus de comment bien débugger les macros, j’ai tenté des \show ou \tracingmacros mais sans vraiment de succès.

Merci d’avance pour votre aide et vos conseils !

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte