diff options
author | Karl Berry <karl@freefriends.org> | 2023-05-12 20:35:18 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2023-05-12 20:35:18 +0000 |
commit | a38215d9fd5a0227acaf76c58e73c7d4f4a35280 (patch) | |
tree | 3aabfa36bcc09443b9942f27d63061a1091bc03b /Master | |
parent | c1ef4345c6011a866da674830ff5b43957ce9fb0 (diff) |
sympycalc (12may23)
git-svn-id: svn://tug.org/texlive/trunk@67087 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master')
-rw-r--r-- | Master/texmf-dist/doc/lualatex/sympycalc/README.md | 5 | ||||
-rw-r--r-- | Master/texmf-dist/doc/lualatex/sympycalc/SympyCalc-doc.pdf | bin | 130436 -> 145115 bytes | |||
-rw-r--r-- | Master/texmf-dist/doc/lualatex/sympycalc/SympyCalc-doc.tex | 164 | ||||
-rw-r--r-- | Master/texmf-dist/tex/lualatex/sympycalc/SympyCalc.sty | 110 |
4 files changed, 243 insertions, 36 deletions
diff --git a/Master/texmf-dist/doc/lualatex/sympycalc/README.md b/Master/texmf-dist/doc/lualatex/sympycalc/README.md index 7b34198db4c..aa918b9a9a4 100644 --- a/Master/texmf-dist/doc/lualatex/sympycalc/README.md +++ b/Master/texmf-dist/doc/lualatex/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/Master/texmf-dist/doc/lualatex/sympycalc/SympyCalc-doc.pdf b/Master/texmf-dist/doc/lualatex/sympycalc/SympyCalc-doc.pdf Binary files differindex 20964a4b68f..f2e9838bee0 100644 --- a/Master/texmf-dist/doc/lualatex/sympycalc/SympyCalc-doc.pdf +++ b/Master/texmf-dist/doc/lualatex/sympycalc/SympyCalc-doc.pdf diff --git a/Master/texmf-dist/doc/lualatex/sympycalc/SympyCalc-doc.tex b/Master/texmf-dist/doc/lualatex/sympycalc/SympyCalc-doc.tex index b294eb56f6b..418bccc6526 100644 --- a/Master/texmf-dist/doc/lualatex/sympycalc/SympyCalc-doc.tex +++ b/Master/texmf-dist/doc/lualatex/sympycalc/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/Master/texmf-dist/tex/lualatex/sympycalc/SympyCalc.sty b/Master/texmf-dist/tex/lualatex/sympycalc/SympyCalc.sty index 736da2c084a..ec7da673908 100644 --- a/Master/texmf-dist/tex/lualatex/sympycalc/SympyCalc.sty +++ b/Master/texmf-dist/tex/lualatex/sympycalc/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]% |