how to write an expression in latex without it being transformed by sage/sagetex
For my lesson that I am trying to write in latex/sagetex, I need to write formulas without them being transformed by sage.
Here's an example :
sage: f(x) = -2*x^2+x+3
....: g(x) = -2*(x-1/4)^2+25/8
....: g(x)
-1/8*(4*x - 1)^2 + 25/8
sage:
but I want to keep the form -2*(x-1/4)^2+25/8
to write it in latex.
I tried hold
and with hold:
and also some code with .mul(
or .add(
but I have a problem with the power.
My purpose is to do random exercises around quadratic equations, and I started writing this :
from random import sample
def signe():
signe = sample([Integer(i) for i in range(-1, 2, 1) if i != 0],1)
return(signe[0])
def calcul(amax, bmax, cmax):
a = randint(1,amax)*signe()
b = randint(0,bmax)*signe()
c = randint(0,cmax)*signe()
f(x) = a*x^2+b*x+c
alpha = -b/2/a
beta = f(x=alpha)
fcanonique(x) = a*(x-alpha)^2+beta
Delta = b**2-4*a*c
output = r"Soit $f$ le trinôme défini sur $\R$ par ~${}=0$.".format(latex(f(x)))
output += r"\medbreak"
output += r"\begin{enumerate}"
output += r"\item Déterminer une forme canonique de $f$."
output += r"\item Résoudre dans $\R$ l'équation $f(x)=0$ par la méthode de votre choix."
output += r"\item $f$ est-elle factorisable ? Si oui, déterminer en une forme factorisée."
output += r"\item Résoudre dans $\R$ l'équation $f(x)={}$.".format(c)
output += r"\item Résoudre dans $\R$ l'équation $f(x)={}$.".format(beta)
output += r"\end{enumerate}"
output += r"\medbreak\uline{Réponses} :\medbreak"
output += r"\begin{enumerate}"
output +=r"\item On a $f(x)={}$".format(latex(fcanonique(x)))
if Delta < 0:
output += r"\item On reconnaît une équation du second degré de discriminant $\Delta={}<0$, et donc cette équation n'a pas de solution réelle :".format(latex(Delta))
output += "\\bigbreak{}"
output += r"Ce trinôme admet une forme canonique : "
elif Delta == 0:
output += r"\item On reconnaît une équation du second degré de discriminant $\Delta={}$, et donc cette équation admet une unique solution $x_0={}$".format(latex(Delta), latex(alpha))
else:
x1 = simplify((-b-Delta^(1/2))/(2*a))
x2 = simplify((-b+Delta^(1/2))/(2*a))
ffactorisee(x) = a*(x-x1)*(x-x2)
output += r"\item On reconnaît une équation du second degré de discriminant $\Delta={}>0$, et donc cette équation admet deux solutions réelles $x_1$ et $x_2$ avec : \quad $\displaystyle x_1={}$ \quad et \quad $\displaystyle x_2={}$.".format(latex(Delta), latex(x1), latex(x2))
output += "\\bigbreak{}"
output += r"\end{enumerate}"
return(output)
and for example, calcul(5, 5, 5)
return :
"Soit $f$ le trinôme défini sur $\\R$ par ~$-x^{2} + 4 \\, x - 2=0$.\\medbreak\\begin{enumerate}\\item Déterminer une forme canonique de $f$.\\item Résoudre dans $\\R$ l'équation $f(x)=0$ par la méthode de votre choix.\\item $f$ est-elle factorisable ? Si oui, déterminer en une forme factorisée.\\item Résoudre dans $\\R$ l'équation $f(x)=-2$.\\item Résoudre dans $\\R$ l'équation $f(x)=2$.\\end{enumerate}\\medbreak\\uline{Réponses} :\\medbreak\\begin{enumerate}\\item On a $f(x)=-x + 4$\\item On reconnaît une équation du second degré de discriminant $\\Delta=8>0$, et donc cette équation admet deux solutions réelles $x_1$ et $x_2$ avec : \\quad $\\displaystyle x_1=\\sqrt{2} + 2$ \\quad et \\quad $\\displaystyle x_2=-\\sqrt{2} + 2$.\\bigbreak{}\\end{enumerate}"
Before if Delta < 0:
I would like output +=r"\item On a $f(x)={}$".format(latex(fcanonique(x)))
to display the formula without transformation.
Thanks.
First embryo of an idea : work by generating strings representing your "raw" polynomials, format this to LaTeX (possibly with
LatexExpr
), and convert them to symbolic expressins viaeval
only when needed.Our current whether is currently too hot fo me to tackle this one... ;-).
HTH,
The problem with strings are signs : I can retrieve a, b, c, alpha and beta values to make a string, but I have to manage signs with if then else conditions to prevent things like (x+-1)^2+-2. If I understand your solution correctly, I think I'm going to have this problem I once had while making a python program that does elementary operations on fractions.