summaryrefslogtreecommitdiff
path: root/macros/luatex/latex
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2023-05-13 03:00:50 +0000
committerNorbert Preining <norbert@preining.info>2023-05-13 03:00:50 +0000
commitb083364ee56b8a47b344b455440f0fdc16c9306b (patch)
tree5369d32eb12346036a13b0c072b25d6659867ff9 /macros/luatex/latex
parent23711a0fa219bf3164abd4aa2e25cb4db9757d7d (diff)
CTAN sync 202305130300
Diffstat (limited to 'macros/luatex/latex')
-rw-r--r--macros/luatex/latex/sympycalc/README.md5
-rw-r--r--macros/luatex/latex/sympycalc/doc/SympyCalc-doc.pdfbin130436 -> 145115 bytes
-rw-r--r--macros/luatex/latex/sympycalc/doc/SympyCalc-doc.tex164
-rw-r--r--macros/luatex/latex/sympycalc/tex/SympyCalc.sty110
4 files changed, 243 insertions, 36 deletions
diff --git a/macros/luatex/latex/sympycalc/README.md b/macros/luatex/latex/sympycalc/README.md
index 7b34198db4..aa918b9a9a 100644
--- a/macros/luatex/latex/sympycalc/README.md
+++ b/macros/luatex/latex/sympycalc/README.md
@@ -1,7 +1,8 @@
-SympyCalc is a package to work with Sympy with TeX printing.
+SympyCalc is a package to work with Sympy (Python) with TeX printing.
-----------------------------------------------------------------------------
SympyCalc un package pour travailler avec le module Sympy et sa sortie LaTeX.
-----------------------------------------------------------------------------
Author : Cédric Pierquet
email : cpierquet@outlook.fr
-Licence : Released under the LaTeX Project Public License v1.3c or later, see http://www.latex-project.org/lppl.txt \ No newline at end of file
+Licence : Released under the LaTeX Project Public License v1.3c or later, see http://www.latex-project.org/lppl.txt
+Note : SymPy is a Python library for symbolic math (sympy.org). \ No newline at end of file
diff --git a/macros/luatex/latex/sympycalc/doc/SympyCalc-doc.pdf b/macros/luatex/latex/sympycalc/doc/SympyCalc-doc.pdf
index 20964a4b68..f2e9838bee 100644
--- a/macros/luatex/latex/sympycalc/doc/SympyCalc-doc.pdf
+++ b/macros/luatex/latex/sympycalc/doc/SympyCalc-doc.pdf
Binary files differ
diff --git a/macros/luatex/latex/sympycalc/doc/SympyCalc-doc.tex b/macros/luatex/latex/sympycalc/doc/SympyCalc-doc.tex
index b294eb56f6..418bccc652 100644
--- a/macros/luatex/latex/sympycalc/doc/SympyCalc-doc.tex
+++ b/macros/luatex/latex/sympycalc/doc/SympyCalc-doc.tex
@@ -3,8 +3,8 @@
% arara: lualatex: {shell: yes, synctex: no, interaction: batchmode} if found('log', '(undefined references|Please rerun|Rerun to get)')
\documentclass[french,a4paper,11pt]{article}
-\def\SCversion{0.1.0}
-\def\SCdate{5 mai 2023}
+\def\SCversion{0.1.1}
+\def\SCdate{8 mai 2023}
\usepackage[executable=python.exe]{pyluatex}
\usepackage[svgnames]{xcolor}
\usepackage{siunitx}
@@ -68,13 +68,13 @@
commentstyle={\itshape\color{violet}},
keywordstyle={\bfseries\color{DodgerBlue}},%
classoffset=0,%
- keywords={frac,dfrac,int,sqrt},%
+ keywords={frac,dfrac,int,sqrt,mathcal},%
keywordstyle={\bfseries\color{DodgerBlue}},%
classoffset=1,%
- morekeywords={sympycalc,dsympycalc,sympydev,dsympydev,sympyfact,dsympyfact,sympyderiv,dsympyderiv,sympyprim,dsympyprim,sympyintegr,dsympyintegr,sympylim,dsympylim,sympyfexpo,dsympyfexpo,sympyresol,dsympyresol,sympyresolC,dsympyresolC},%
+ morekeywords={sympycalc,dsympycalc,sympydev,dsympydev,sympyfact,dsympyfact,sympyderiv,dsympyderiv,sympyprim,dsympyprim,sympyintegr,dsympyintegr,sympylim,dsympylim,sympyfexpo,dsympyfexpo,sympyresol,dsympyresol,sympyresolC,dsympyresolC,sympynbderiv,dsympynbderiv,sympyimage,dsympyimage,pythonq},%
keywordstyle={\bfseries\color{purple}},%
classoffset=2,%
- morekeywords={solve},%
+ morekeywords={solve,radsimp,cancel},%
keywordstyle={\bfseries\color{ForestGreen}},%
classoffset=3,%
morekeywords={NoSimplif,Simplif},%
@@ -148,6 +148,18 @@
\end{tabular}
\end{center}
+\begin{center}
+ \begin{minipage}{0.5\linewidth}
+ \begin{tcolorbox}[colframe=DarkBlue!50,colback=DarkBlue!5]
+ \begin{center}
+ \textsf{SymPy} est un module \textsf{Python} qui permet de faire du calcul symbolique.
+
+ \texttt{\url{https://www.sympy.org/}}
+ \end{center}
+ \end{tcolorbox}
+ \end{minipage}
+\end{center}
+
\vspace{0.25cm}
{$\blacktriangleright$~~Compilation en \hologo{LuaLaTeX}, avec un accès \textsf{--shell-escape}, en \textit{partenariat} avec \textsf{pyluatex}.}
@@ -319,7 +331,7 @@ Autant que peut se faire, les commandes sont assez explicites sur leur fonctionn
\item \texttt{\textbackslash \textcolor{purple}{sympy...}} : commande qui simplifie (par défaut), avec règles typographiques \texttt{[fr]} \textsf{romain} ;
\item \texttt{\textbackslash \textcolor{purple}{dsympy...}} : commande qui simplifie (par défaut), avec règles typographiques \texttt{[fr]} \textsf{romain}, et affichage en \texttt{\textbackslash displaystyle} ;
\item \texttt{\textbackslash \textcolor{purple}{sympy...*}} : commande qui simplifie (par défaut), avec règles typographiques \texttt{[fr]} \textsf{italique} ;
- \item \texttt{\textbackslash \textcolor{purple}{dsympy...*}} : commande qui simplifie (par défaut), avec règles typographiques \texttt{[fr]} \textsf{romain}, et affichage en \texttt{\textbackslash displaystyle}.
+ \item \texttt{\textbackslash \textcolor{purple}{dsympy...*}} : commande qui simplifie (par défaut), avec règles typographiques \texttt{[fr]} \textsf{italique}, et affichage en \texttt{\textbackslash displaystyle}.
\end{itemize}
Dans certains cas la \textit{simplification} ne propose pas une sortie \textit{classique}, et il est possible d'empêcher la simplification grâce à l'argument optionnel \texttt{<\textcolor{OliveDrab}{NoSimplif}>}.
@@ -337,9 +349,11 @@ La variable est par défaut \texttt{x}, mais peut-être modifiée grâce à l'ar
\dsympycalc(*)<NoSimplif>{commande sympy}
%commandes spécifiques, sortie standard, détaillées plus loin
+\sympyimage(*)<NoSimplif>{fonction sympy}[variable]{point}
\sympydev(*)<NoSimplif>{expr sympy}[variable]
\sympyfact(*)<NoSimplif>{expr sympy}
\sympyderiv(*)<NoSimplif>{expr sympy}[variable]
+\sympynbderiv(*)<NoSimplif>{expr sympy}[variable]{point}[côté]
\sympyprim(*)<NoSimplif>{expr sympy}[variable]
\sympyintegr(*)<NoSimplif>{expr sympy}[variable]{borne inf}{borne sup}
\sympylim(*)<NoSimplif>{expr sympy}[variable]{point}[côté]
@@ -349,8 +363,10 @@ La variable est par défaut \texttt{x}, mais peut-être modifiée grâce à l'ar
%commandes spécifiques, sortie displaystyle, détaillées plus loin
\dsympydev(*)<NoSimplif>{expr sympy}[variable]
+\dsympyimage(*)<NoSimplif>{fonction sympy}[variable]{point}
\dsympyfact(*)<NoSimplif>{expr sympy}
\dsympyderiv(*)<NoSimplif>{expr sympy}[variable]
+\dsympynbderiv(*)<NoSimplif>{expr sympy}[variable]{point}[côté]
\dsympyprim(*)<NoSimplif>{expr sympy}[variable]
\dsympyintegr(*)<NoSimplif>{expr sympy}[variable]{borne inf}{borne sup}
\dsympylim(*)<NoSimplif>{expr sympy}[variable]{point}[côté]
@@ -371,8 +387,6 @@ L'\og infini \fg{} est disponible en \textsf{sympy}, grâce à \texttt{+oo} ou \
Un petit \textit{guide} pour \textsf{sympy} est disponible à : \url{https://hashdork.com/fr/sympy-library-guide/}.
\end{tipblock}
-\newpage
-
\section{Limitations}
\begin{warningblock}
@@ -460,6 +474,45 @@ $x_2 = \dsympycalc{solve(1/3*x**2+9*x+4,x)[1]}$
\section{Quelques commandes spécifiques}
+\subsection{Images}
+
+\begin{cautionblock}
+\cmaj{0.1.1} La commande pour calculer une image via \textsf{sympy} est \texttt{\textbackslash \textcolor{purple}{sympyimage}} ou \texttt{\textbackslash \textcolor{purple}{dsympyimage}}.
+
+Il vaut mieux vérifier si le résultat formaté est conforme aux attentes, et sinon utiliser la commande générique.
+\end{cautionblock}
+
+\begin{bloctext}[listing only]
+%commandes pour cacluler une image
+\sympyimage(*)<NoSimplif>{fonction sympy}[variable]{point}
+\dsympyimage(*)<NoSimplif>{fonction sympy}[variable]{point}
+\end{bloctext}
+
+\begin{tipblock}
+Concernant son fonctionnement :
+
+\begin{itemize}
+ \item la version \Cle{*} permet de ne pas formater le \texttt{e} et le \texttt{i} en \textsf{romain} ;
+ \item le premier argument, optionnel et pouvant valoir \texttt{<\textcolor{OliveDrab}{NoSimplif}>} permet d'\textit{annuler} la simplification (attention au comportement de la \textit{simplification} par \textsf{sympy}\ldots)
+ \item le deuxième argument, obligatoire et entre \texttt{\{...\}} est quant à lui la fonction, en langage \textsf{sympy} à passer en \textsf{python} ;
+ \item les derniers arguments, optionnel entre \texttt{[...]} et obligatoire et entre \texttt{\{...\}} correspondent à la variable et le point.
+\end{itemize}
+\vspace*{-\baselineskip}\leavevmode
+\end{tipblock}
+
+\begin{bloctext}
+$f(x)=\dfrac{2+\e^x}{3+4\e^{2x}}$ avec $a=5$ : $f(5)=\dsympyimage{(2+exp(x))/(3+4*exp(2*x))}{5}$
+\end{bloctext}
+
+\begin{bloctext}
+$g(t)=\sqrt{1+\ln(t)}$ avec $a=13$ : $g(13)=\sympyimage{sqrt(1+log(t))}[t]{13}$
+\end{bloctext}
+
+\begin{bloctext}
+$h(x)=2x^2+2,5x+7$ en $a=\sqrt{2}$ :
+$h\left(\sqrt{2}\right)=\dsympyimage{2*x**2+5/2*x+7}{sqrt(2)}$
+\end{bloctext}
+
\subsection{Développement}
\begin{cautionblock}
@@ -599,10 +652,57 @@ Les solutions de $x^3-2,5x+16x=40$ sont $\mathcal{S}=\dsympyresolC{x**3-5/2*x**2
Les solutions de $10\,\e^{4x+5}=2$ sont $\mathcal{S}=\dsympyresol{10*exp(4*x+5)=2}$
\end{bloctext}
-\subsection{Dérivation}
+\subsection{Dérivation locale}
\begin{cautionblock}
-La commande pour dériver, grâce à \textsf{sympy} est \texttt{\textbackslash \textcolor{purple}{sympyderiv}} ou \texttt{\textbackslash \textcolor{purple}{dsympyderv}}.
+\cmaj{0.1.1} La commande pour dériver localement, grâce à \textsf{sympy} est \texttt{\textbackslash \textcolor{purple}{sympynbderiv}} ou \texttt{\textbackslash \textcolor{purple}{dsympynbderiv}}.
+
+Il vaut mieux vérifier si le résultat formaté est conforme aux attentes, et sinon utiliser la commande générique.
+\end{cautionblock}
+
+\begin{bloctext}[listing only]
+%commandes pour dériver localement
+\sympynbderiv(*)<NoSimplif>{expression sympy}[variable]{point}[côté]
+\dsympynbderiv(*)<NoSimplif>{expression sympy}[variable]{point}[côté]
+\end{bloctext}
+
+\begin{tipblock}
+Concernant son fonctionnement :
+
+\begin{itemize}
+ \item la version \Cle{*} permet de ne pas formater le \texttt{e} et le \texttt{i} en \textsf{romain} ;
+ \item le premier argument, optionnel et pouvant valoir \texttt{<\textcolor{OliveDrab}{NoSimplif}>} permet d'\textit{annuler} la simplification (attention au comportement de la \textit{simplification} par \textsf{sympy}\ldots)
+ \item le deuxième argument, obligatoire et entre \texttt{\{...\}} est quant à lui l'expression en langage \textsf{sympy} à passer en \textsf{python} ;
+ \item le troisième argument, optionnel et entre \texttt{[...]} est la variable ;
+ \item les derniers arguments, obligatoire et entre \texttt{\{...\}} et optionnel entre \texttt{[...]} correspondent à la valeur (et la position \texttt{[g]} ou \texttt{[d]}) en laquelle on souhaite travailler.
+\end{itemize}
+\vspace*{-\baselineskip}\leavevmode
+\end{tipblock}
+
+\begin{bloctext}
+Si $f(x)=(x+3)\,\e^{2x}$, alors on peut montrer que $f'(2) = \sympynbderiv{(x+3)*exp(2*x)}{2}$
+\end{bloctext}
+
+\begin{bloctext}
+Le nombre dérivé de la fonction $x \mapsto \sqrt{x}$ en $a=2$ vaut
+$\lim\limits_{x \to 2} \frac{\sqrt{x}-\sqrt{2}}{x-2} = \sympynbderiv{sqrt(x)}{2}$.
+
+Le nombre dérivé de la fonction $x \mapsto \sqrt{x}$ en $a=2$ vaut
+$\lim\limits_{x \to 2} \dfrac{\sqrt{x}-\sqrt{2}}{x-2} = \dsympynbderiv{sqrt(x)}{2}$.
+\end{bloctext}
+
+\begin{bloctext}
+Le nombre dérivé de $\varphi(x) = 1+\dfrac{1}{(x+2)^2}$ en $a=-5$ vaut
+$\lim\limits_{x \to -3} \frac{\varphi(x)-\varphi(-5)}{x-(-5)} = \sympynbderiv{1+1/(x+2)**2}{-5}$.
+
+Le nombre dérivé de $\varphi(x) = 1+\dfrac{1}{(x+2)^2}$ en $a=-5$ vaut
+$\lim\limits_{x \to -3} \dfrac{\varphi(x)-\varphi(-5)}{x-(-5)} = \dsympynbderiv{1+1/(x+2)**2}{-5}$.
+\end{bloctext}
+
+\subsection{Dérivation globale}
+
+\begin{cautionblock}
+La commande pour dériver, grâce à \textsf{sympy} est \texttt{\textbackslash \textcolor{purple}{sympyderiv}} ou \texttt{\textbackslash \textcolor{purple}{dsympyderiv}}.
Il vaut mieux vérifier si le résultat formaté est conforme aux attentes, et sinon utiliser la commande générique.
\end{cautionblock}
@@ -771,43 +871,43 @@ On a $\dfrac{-\sqrt{2}}{1+\i} = \dsympyfexpo{(-sqrt(2))/(1+I)}$
\section{Évolutions}
\begin{tipblock}
-L'utilisateur du package pourra utiliser ses propres fonctions ou commandes \textsf{sympy}, qui pourront être déclarés grâce à l'environnement \texttt{python}.
+L'utilisateur du package pourra utiliser ses propres fonctions ou commandes \textsf{sympy}, qui pourront être déclarés grâce à l'environnement \texttt{pythonq}.
\end{tipblock}
\begin{bloctext}[listing only]
-\begin{python}
-def tangente(expr,var,a) :
- f = lambdify(x, expr)
- deriveef = diff(expr,x)
- derf = lambdify(x, deriveef)
- pente = simplify(derf(a))
- ordonnee = simplify(f(a))
- tgte = simplify(pente*(x-a) + ordonnee)
+\begin{pythonq}
+def tangente_exacte(expr,var,a) :
+ fdea = expr.subs(var,a)
+ fprimedea = limit((expr-fdea)/(var-a),var,a)
+ tgte = expand(fprimedea*(x-a) + fdea)
return tgte
-\end{python}
+\end{pythonq}
\end{bloctext}
-\begin{python}
-def tangente(expr,var,a) :
- f = lambdify(x, expr)
- deriveef = diff(expr,x)
- derf = lambdify(x, deriveef)
- pente = simplify(derf(a))
- ordonnee = simplify(f(a))
- tgte = simplify(pente*(x-a) + ordonnee)
+\begin{pythonq}
+def tangente_exacte(expr,var,a) :
+ fdea = expr.subs(var,a)
+ fprimedea = limit((expr-fdea)/(var-a),var,a)
+ tgte = expand(fprimedea*(x-a) + fdea)
return tgte
-
-\end{python}
+
+\end{pythonq}
\begin{bloctext}
-La tangente à la courbe de la fonction $f(x)=\e^{2x}+3$ en $a=1$ a pour équation (appochée) :
+La tangente à la courbe de la fonction $f(x)=\e^{2x}+3$ en $a=1$ a pour équation :\\
+$y = \sympycalc{tangente_exacte(exp(2*x)+3,x,1)}$.
+\end{bloctext}
-$y \approx \sympycalc{tangente(exp(2*x)+3,x,1)}$.
+\begin{bloctext}
+La tangente à la courbe de la fonction $g(t)=\ln(x+3)$ en $a=4$ a pour équation :\\
+$y = \dsympycalc{tangente_exacte(log(t+3),t,4)}$.
\end{bloctext}
\section{Historique}
+\verb|v0.1.1|~:~~~~Commandes pour les nombres dérivés + images.
+
\verb|v0.1.0|~:~~~~Version initiale.
diff --git a/macros/luatex/latex/sympycalc/tex/SympyCalc.sty b/macros/luatex/latex/sympycalc/tex/SympyCalc.sty
index 736da2c084..ec7da67390 100644
--- a/macros/luatex/latex/sympycalc/tex/SympyCalc.sty
+++ b/macros/luatex/latex/sympycalc/tex/SympyCalc.sty
@@ -2,7 +2,8 @@
% licence : Released under the LaTeX Project Public License v1.3c or later, see http://www.latex-project.org/lppl.txtf
\NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{SympyCalc}[2023/05/05 v0.1.0 Sympy commands with TeX printing]
+\ProvidesPackage{SympyCalc}[2023/05/08 v0.1.1 Sympy commands with TeX printing]
+% 0.1.1 Ajout du nombre dérivé + calcul image
% 0.1 Version initiale
%------Packages utiles
@@ -10,10 +11,12 @@
%------Scripts python
\begin{python}
+#initialisations
from sympy import *
init_printing()
x, y, z, t = symbols('x y z t')
+#commandes génériques
def latex_fr(expr) :
return latex(expr,imaginary_unit='ri',ln_notation=True,decimal_separator='comma').replace("e^","\\text{e}^")
@@ -26,6 +29,7 @@ def latex_fr_simpl(expr) :
def latex_frit_simpl(expr) :
return latex(simplify(expr),ln_notation=True,decimal_separator='comma')
+#commandes de résolutions
def latex_fr_resol(expr,var) :
if '=' in expr :
expr = expr.replace('=','-(') + ')'
@@ -74,15 +78,52 @@ def latex_frit_resolC(expr,var) :
res = res.replace("]","\\}")
return res
+#commandes de nombres dérivés
+def latex_fr_nbderiv(expr,var,pta,pos) :
+ tmpf = Lambda(var,expr)
+ res = (tmpf(var)-tmpf(pta))/(var-pta)
+ res = limit(res,var,pta,pos)
+ res = latex(res,ln_notation=True,decimal_separator='comma')
+ res = res.replace("e^","\\text{e}^")
+ return res
+
+def latex_frit_nbderiv(expr,var,pta,pos) :
+ tmpf = Lambda(var,expr)
+ res = (tmpf(var)-tmpf(pta))/(var-pta)
+ res = limit(res,var,pta,pos)
+ res = latex(res,ln_notation=True,decimal_separator='comma')
+ return res
+
+def latex_fr_nbderiv_simpl(expr,var,pta,pos) :
+ tmpf = Lambda(var,expr)
+ res = (tmpf(var)-tmpf(pta))/(var-pta)
+ res = simplify(limit(res,var,pta,pos))
+ res = latex(res,ln_notation=True,decimal_separator='comma')
+ res = res.replace("e^","\\text{e}^")
+ return res
+
+def latex_frit_nbderiv_simpl(expr,var,pta,pos) :
+ tmpf = Lambda(var,expr)
+ res = (tmpf(var)-tmpf(pta))/(var-pta)
+ res = simplify(limit(res,var,pta,pos))
+ res = latex(res,ln_notation=True,decimal_separator='comma')
+ return res
+
+#Patch pour +oo
def patch_oo(res) :
if res == '\\infty' :
return '+\\infty'
else :
return res
+#Commande de forme exponentielle
def forme_expo(z) :
return abs(z)*exp(I*arg(z))
+#Commande de calcul d'image
+def imagefct(expr,var,pta) :
+ return expr.subs(var,pta)
+
\end{python}
%------Commandes de base
@@ -114,6 +155,35 @@ def forme_expo(z) :
{\displaystyle\sympycalc<#2>{#3}}%
}
+%------Image
+\NewDocumentCommand\sympyimage{ s D<>{Simplif} m O{x} m }{%
+ \StrSubstitute{#3}{/}{*S.One/}[\argtmp]%
+ \IfBooleanTF{#1}%*=frit, no*=fr
+ {%
+ \IfStrEq{#2}{Simplif}%
+ {%
+ \py{latex_frit_simpl(imagefct(\argtmp,#4,#5))}%
+ }%
+ {%
+ \py{latex_frit(imagefct(\argtmp,#4,#5))}%
+ }%
+ }%
+ {%
+ \IfStrEq{#2}{Simplif}%
+ {%
+ \py{latex_fr_simpl(imagefct(\argtmp,#4,#5))}%
+ }%
+ {%
+ \py{latex_fr(imagefct(\argtmp,#4,#5))}%
+ }%
+ }%
+}
+\NewDocumentCommand\dsympyimage{ s D<>{Simplif} m O{x} m }{%
+ \IfBooleanTF{#1}%
+ {\displaystyle\sympyimage*<#2>{#3}[#4]{#5}}%
+ {\displaystyle\sympyimage<#2>{#3}[#4]{#5}}%
+}
+
%------Développer
\NewDocumentCommand\sympydev{ s D<>{Simplif} m O{x} }{%
\StrSubstitute{#3}{/}{*S.One/}[\argtmp]%
@@ -172,6 +242,8 @@ def forme_expo(z) :
{\displaystyle\sympyfact<#2>{#3}}%
}
+%------Image
+
%------Dériver
\NewDocumentCommand\sympyderiv{ s D<>{Simplif} m O{x} }{%
\StrSubstitute{#3}{/}{*S.One/}[\argtmp]%
@@ -262,7 +334,7 @@ def forme_expo(z) :
%------Limite
\NewDocumentCommand\sympylim{ s D<>{Simplif} m O{x} m O{} }{%
\StrSubstitute{#3}{/}{*S.One/}[\argtmp]%
- \def\poslim{}
+ \def\poslim{'+-'}
\IfStrEq{#6}{g}%
{\def\poslim{'-'}}{}
\IfStrEq{#6}{d}%
@@ -293,6 +365,40 @@ def forme_expo(z) :
{\displaystyle\sympylim<#2>{#3}[#4]{#5}[#6]}%
}
+%------Nb deriv
+\NewDocumentCommand\sympynbderiv{ s D<>{Simplif} m O{x} m O{} }{%
+ \StrSubstitute{#3}{/}{*S.One/}[\argtmp]%
+ \def\poslim{'+-'}
+ \IfStrEq{#6}{g}%
+ {\def\poslim{'-'}}{}
+ \IfStrEq{#6}{d}%
+ {\def\poslim{'+'}}{}
+ \IfBooleanTF{#1}%*=frit, no*=fr
+ {%
+ \IfStrEq{#2}{Simplif}%
+ {%
+ \py{patch_oo(latex_fr_nbderiv_simpl(\argtmp,#4,#5,\poslim))}%
+ }%
+ {%
+ \py{patch_oo(latex_frit_nbderiv_simpl(\argtmp,#4,#5,\poslim))}%
+ }%
+ }%
+ {%
+ \IfStrEq{#2}{Simplif}%
+ {%
+ \py{patch_oo(latex_fr_nbderiv(\argtmp,#4,#5,\poslim))}%
+ }%
+ {%
+ \py{patch_oo(latex_frit_nbderiv(\argtmp,#4,#5,\poslim))}%
+ }%
+ }%
+}
+\NewDocumentCommand\dsympynbderiv{ s D<>{Simplif} m O{x} m O{} }{%
+ \IfBooleanTF{#1}%
+ {\displaystyle\sympynbderiv*<#2>{#3}[#4]{#5}[#6]}%
+ {\displaystyle\sympynbderiv<#2>{#3}[#4]{#5}[#6]}%
+}
+
%------FormeExpo
\NewDocumentCommand\sympyfexpo{ s D<>{NoSimplif} m }{%
%\StrSubstitute{#3}{/}{*S.One/}[\argtmp]%