Page 1 sur 1
latex(Resultat) vs. fprint(Sortie,latex(Resultat))
Publié : dim. janv. 24, 2016 8:22 am
par aldus
Bonjour !
J'utilise LuaLatex et CMathLuaLatex pour rédiger des devoirs "variables" à l'attention de mes élèves. Je dois donc faire des calculs pour chaque copie.
J'ai observé un problème dans la gestion des signes : j'affiche en sortie d'un normal( ... ) ceci par exemple : x² - - 2x + -2 , ce qui n'est pas terrible comme présentation. Je n'ai pas de problème avec les mêmes instructions et avec la même bibliothèque Giac mais attaquée cette fois par l'interface XCAS.
Christophe Devalland s'est penché sur la question et a identifié une différence de comportement entre latex(Resultat) (qui n'a pas ce problème) alors que fprint(Sortie,latex(Resultat)) l'a. Pour lui, ce serait un problème interne à giac lié à la fonction fprint.
Est-ce soluble ?
P.S. exemple de code générant les -- et +- :
Code : Tout sélectionner
\documentclass[french]{article}
\usepackage{luacode}% pour LuaLaTex
\begin{document}
%%%%%%%%%%%% CmathLuaTeX %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\directlua{dofile('/home/administrateur/Projets-QCM/Transversal/CmathLuaTeX.lua')}
\newcommand\Cmath[1]{\luadirect{tex.print(Cmath2LaTeX('\detokenize{#1}'))}}
\newcommand\XcasOld[1]{$\Cmath{xcas(#1)}$}
\newcommand\Xcas[1]{$\luaexec{tex.print(Cmath2LaTeX('xcas('..#1..')'))}$}% fournir la commande à l'intérieur de xcas entre quotes
\Xcas{'restart'}
\luaexec{%
xaA=-4
xbA=3
aA=-0.2;bA=-(aA)*(xaA+xbA);cA=aA*xaA*xbA % attention à -aA
}% end \luaexec
\begin{enumerate}
\item $\luadirect{str='xcas(factor(x^2-('..xaA..')))';tex.print(Cmath2LaTeX(str))}$%OK
\item \Xcas{'normal(-2*(x-('..xaA..'))*(x-('..xbA..')))'} % manuel, long, délicat et peu lisible
\item \Xcas{string.format('normal(\%s*(x-(\%s))*(x-(\%s)))',-2,xaA,xbA)} % avec string.format ; avec les variables de l'espace lua
\item \Xcas{string.format('normal(\%s*x^2+\%s*x+\%s)',aA,bA,cA)}
\item \Xcas{string.format('factor(\%s*x^2+\%s*x+\%s)',aA,bA,cA)}
\item \Xcas{string.format('canonical_form(\%s*x^2+\%s*x+\%s)',aA,bA,cA)}
\item \Xcas{string.format('f(x):=\%s * x^2+\%s * x+\%s',aA,bA,cA)}\Xcas{'f(x)'}
\item \Xcas{'normal(f(x))'}
\end{enumerate}
\end{document}
Re: latex(Resultat) vs. fprint(Sortie,latex(Resultat))
Publié : lun. janv. 25, 2016 1:28 pm
par parisse
Il me faudrait un exemple reproductible avec xcas ou icas. Je viens d'essayer depuis Xcas, f:=fopen("test"); fprint(f,latex(x^2-(-2*x)+1)); fclose(f) et il n'y a pas de -- dans le fichier test. J'ai regarde dans le source de fprint, les arguments ne sont pas quotes.
Re: latex(Resultat) vs. fprint(Sortie,latex(Resultat))
Publié : mar. janv. 26, 2016 8:01 pm
par aldus
J'ai "réussi" à créer le problème en Xcas:
Pourquoi écrire --0.2 ? C'est l'effet du remplacement d'une variable dans ... -.2*x^2-lua_variable*x+2.4 avec lua_variable=-.2.
Il semblerait que --2 dont tout le monde sait que cela fait +3 ou 3 ne soit pas géré. Il semble même que --2 crée une erreur sous Xcas.
Re: latex(Resultat) vs. fprint(Sortie,latex(Resultat))
Publié : mer. janv. 27, 2016 7:40 am
par parisse
De memoire, c'est parce que -- est l'operateur de decrementation, et la grammaire de l'interpreteur l'accepte en postfixe mais pas en infixe.
Je suis en train de faire une modif dans la sortie latex pour gerer votre exemple.
Re: latex(Resultat) vs. fprint(Sortie,latex(Resultat))
Publié : dim. févr. 14, 2016 2:29 pm
par aldus
Re-bonjour, avec beaucoup de retard.
Est-ce un problème spécifique à fprint() ou à latex(), comme initialement envisagé, quand le problème peut-être recréé sur l'interface XCas ?
Ne serait-ce du coup plus fondamental que çà, dans Giac lui-même.
Cela pourrait être lié au fait qu'il y a peu de chance que quelqu'un rentre qu'à la main --x par exemple. Cela n'arrive que parce que dans une variable texte j'ai "-"..laVariable (avec la syntaxe de concaténation .. de lua) avec "-x" dans laVariable, ce qui produit --x . D'où la "nouveauté" de la situation/problème.
Re: latex(Resultat) vs. fprint(Sortie,latex(Resultat))
Publié : dim. févr. 14, 2016 5:25 pm
par parisse
Avez-vous teste si le probleme persiste avec la version mise a jour?
Re: latex(Resultat) vs. fprint(Sortie,latex(Resultat))
Publié : mer. févr. 17, 2016 2:59 am
par aldus
J'ai vu passé une mise à jour de Giac. Donc je dois être à jour. Version XCAS 1.2.2 (sans autre précision de build). Version giac 1.2.2 (sans autre précision de build).
Voici les résultats de mes essais, sous Xcas et sous lualatex :
Essais sous Xcas :
-(-2) : 2
-(+2) : -2
+-2 : -2
-+2 ; -2
--2 : undef
- - 2 : 2
++2 : undef
+ +2 : 2
normal(-.2*x^2--0.2*x+-0.2) : undef
normal(-.2*x^2- -0.2*x+-0.2) : -0.2*x^2+0.2*x-0.2 (x^2 pour représenter ici x avec un exposant 2)
Essais sous luatex :
avec aA=-0.2;bA=aA;cA=aA
\Xcas{string.format('normal(\%s*x^2+\%s*x+\%s)',aA,bA,cA)} : -0.2.x^2+-0.2.x-0.2
\Xcas{string.format('normal(\%s*x^2+ \%s*x+\%s)',aA,bA,cA)} : -0.2.x^2+-0.2.x-0.2
\Xcas{string.format('normal(\%s*x^2-\%s*x+\%s)',aA,bA,cA)} : undef
\Xcas{string.format('normal(\%s*x^2- \%s*x+\%s)',aA,bA,cA)} : -0.2.x^2+0.2.x-0.2
avec aA=-0.2;bA=-(aA);cA=aA
\Xcas{string.format('normal(\%s*x^2+\%s*x+\%s)',aA,bA,cA)} : -0.2.x^2+0.2.x-0.2
\Xcas{string.format('normal(\%s*x^2+ \%s*x+\%s)',aA,bA,cA)} : -0.2.x^2+0.2.x-0.2
\Xcas{string.format('normal(\%s*x^2-\%s*x+\%s)',aA,bA,cA)} : -0.2.x^2+-0.2.x-0.2
\Xcas{string.format('normal(\%s*x^2- \%s*x+\%s)',aA,bA,cA)} : -0.2.x^2+-0.2.x-0.2
En synthèse :
--2 n'est pas accepté, que ce soit dans la version - monadique (--2) ou dyadique (1--2) (Xcas comme lualatex)
ce problème peut être résolu (bypass/astuce) en ajoutant un espace entre les deux signes : - -2 et 1- -2 OK (Xcas comme lualatex)
différence entre Xcas et lualatex : normal(-.2*x^2+ -0.2*x+-0.2) donne -0.2.x^2-0.2.x-0.2 quand lualatex donne -0.2.x^2+-0.2.x-0.2 (présence gênante du +-0.2 dès qu'on a deux signes différents +-, + -, - +)
Re: latex(Resultat) vs. fprint(Sortie,latex(Resultat))
Publié : mer. févr. 17, 2016 12:10 pm
par parisse
En effet j'ai rajoute du code pour que Xcas et icas affichent ...-nombre au lieu de ...+-nombre et ...+nombre au lieu de ...--nombre.
Je ne pense pas qu'il soit possible de reconnaitre facilement -- comme une forme particuliere de l'operateur binaire +, mais si quelque specialiste de bison/flex y arrive sans casser le reste je suis preneur.
Re: latex(Resultat) vs. fprint(Sortie,latex(Resultat))
Publié : ven. févr. 19, 2016 5:36 pm
par aldus
parisse a écrit :En effet j'ai rajoute du code pour que Xcas et icas affichent ...-nombre au lieu de ...+-nombre et ...+nombre au lieu de ...--nombre.
Si je comprends bien, dans la répartition des rôles entre giac et Xcas/icas, c'est au niveau de Xcas/icas que se gère la transformation de 1+-3 en 1-3. Cela veut dire que ce n'est pas giac qui s'en occupe. Cela me surprend en fait. Car j'imaginais que giac produisait des expressions "correctes" sans avoir a être retravaillées par les interfaces.
Evidemment, cela n'arrange pas mes affaires, accédant directement à giac via lualatex. Snif !
Que puis-je faire ?
Re: latex(Resultat) vs. fprint(Sortie,latex(Resultat))
Publié : ven. févr. 19, 2016 6:39 pm
par parisse
Si je comprends bien votre code
\Xcas{string.format('normal(\%s*x^2+\%s*x+\%s)',aA,bA,cA)} : -0.2.x^2+-0.2.x-0.2
xcas n'est pas implique dans la creation de la chaine, ensuite la commande \Xcas execute la commande par le noyau giac, et vous recuperez une chaine generee par giac. Il faudrait voir comment est imprimee la chaine renvoyee par le noyau giac, il n'y a pas de raisons que ca ne puisse pas etre traitee comme par icas en mode interactif.
Savez-vous quelle fonction de giac lualatex appelle?
Re: latex(Resultat) vs. fprint(Sortie,latex(Resultat))
Publié : sam. févr. 20, 2016 1:12 am
par aldus
Remarque : \Xcas est une commande Latex qui va appeler la procédure de CMathLuaLatex, rien à voir avec l'interface Xcas.
Si j'ai bien compris le fonctionnement de CMathLuaLatex, un fichier giac.in est construit, envoyé à giac qui en retour fournit un fichier giac.out. De plus une archive est réalisée dans giac.sav.
Exemples :
extrait du code latex :
Code : Tout sélectionner
\luaexec{%
aA=-0.2;bA=-(aA);cA=aA % définit les variables
}% end \luaexec
\Xcas{string.format('normal(\%s*x^2-\%s*x+\%s)',aA,bA,cA)} % demande la forme normale - les %s sont remplacés respectivement par aA, bA, et cA
exemple de giac.in :
Code : Tout sélectionner
unarchive("/tmp/giac.sav"):;
purge(Resultat);
som:=sommet(quote(normal(-0.2*x^2-0.2*x+-0.2)));
if(som=='sto' or som=='supposons'){
normal(-0.2*x^2-0.2*x+-0.2);
Resultat:='""'} else {
Resultat:=(normal(-0.2*x^2-0.2*x+-0.2))};
if(Resultat=='Resultat'){
Resultat:="Erreur Xcas"};
Sortie:=fopen("/tmp/giac.out");
if(true){
fprint(Sortie,Unquoted,latex(Resultat));
} else {
fprint(Sortie,Unquoted,Resultat);
};
fclose(Sortie);
archive("/tmp/giac.sav"):;
exemple de giac.out :
(on remarque la présence de +- )
Re: latex(Resultat) vs. fprint(Sortie,latex(Resultat))
Publié : sam. févr. 20, 2016 7:29 am
par parisse
Ok, je crois que je peux corriger.
Re: latex(Resultat) vs. fprint(Sortie,latex(Resultat))
Publié : sam. févr. 20, 2016 8:33 am
par aldus
Re: latex(Resultat) vs. fprint(Sortie,latex(Resultat))
Publié : ven. mars 25, 2016 7:38 pm
par aldus
Bonsoir,
Super, ça marche pour tous les exemples cités avec luaLatex.
Bizarrement, avec l'interface Xcas, factor(-.2*x^2-(-.2)*x+2.4) donne -0.2*(x+-4.000000000000)*(x+3.0), alors que je suis sur la même machine et que les bibliothèque Giac devraient être les mêmes.
En tous cas pour luaLatex ça semble bien marcher . Merci !