用于排版偏导数的数学宏,带有分子和分母的变量占位符

用于排版偏导数的数学宏,带有分子和分母的变量占位符

我想输入时间导数,例如,$ \frac{\partial x}{\partial t} = f(x,t) $以及空间梯度,例如$ \frac{\partial y}{\partial x} = k y $

为了使代码可读并避免重复输入,我找到了一个使用该包的\partial\pder(我在序言中提到过)xparse

\DeclareDocumentCommand{\pder}{ O{} O{} m }{\frac{\partial^{#2}#1}{\partial#3^{#2}}}

然而,\pder{t}{x}产生的输出如下

时间导数

而不是产生的期望输出\frac{\partial x}{\partial t}

correct_typeset_partial_time_derivative

如何声明一个数学宏,该宏接受分子和分母的变量但不在它们之间留空格?

附言:我不知道为什么 Tex.SX 不呈现 $..$ 内输入的内容。如果有人知道我做错了什么,请告诉我,我会修复它。

答案1

不要重新发明轮子:已经有一个esdiff包可以简化以莱布尼茨符号(偏导数或非偏导数)排版导数。此外,它可以自动确定交叉导数的导数顺序,并处理求值点:

\documentclass{article}%

\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{newtxtext, newtxmath}
\usepackage{esdiff}

 \begin{document}

\[ \diffp*{u}{t}{\mkern2mu t = 0}\qquad \diffp{u}{t x}\qquad \diffp{u}{{t^2}x} \]%

 \end{document}

在此处输入图片描述

答案2

\pder只需要一个强制参数,这样你就有了\pder{t} ,然后{x}使用未使用的括号组

用两个参数定义它

\DeclareDocumentCommand{\pder}{ O{} O{} m m}%
  {\frac{\partial^{#2}#1#4}{\partial#3^{#2}}}

答案3

这是我的解决方案。它可以计算差异。

\documentclass[17pt]{extarticle}

\usepackage{xparse}

\makeatletter
\newcounter{pdiff@total}

\DeclareDocumentCommand\linefrac{mm}
 {\left.#1\middle\slash{#2}\right.}

\NewDocumentCommand\pdiff{s o >{\SplitList{,}} m}%
 {\IfBooleanTF{#1}{\let\@tempa\linefrac}{\let\@tempa\frac}%
  \setcounter{pdiff@total}{0}%
  \ProcessList{#3}{\pdiff@c}%
  \@tempa%
   {\partial \ifnum\thepdiff@total >1\relax ^{\arabic{pdiff@total}} \fi%
     \IfValueT{#2}{#2}}%
   {\ProcessList{#3}{\pdiff@vars}}}

\NewDocumentCommand\pdiff@c{> { \SplitArgument { 1 } { * } } m}{\@pdiff@c#1}

\NewDocumentCommand\@pdiff@c{m G{1}}{\addtocounter{pdiff@total}{#2}}

\NewDocumentCommand\pdiff@vars{> { \SplitArgument { 1 } { * } } m}{\@pdiff@vars#1}

\NewDocumentCommand\@pdiff@vars{m g}{\mathinner{\partial #1 \IfValueT{#2}{^ {#2}}}}
\makeatother

\begin{document}

\[ \pdiff{x} \quad \pdiff[f(x)]{x*2,y*95,z*4} \quad \pdiff*[f(\vec r)]{\vec r*5}\]

\end{document}

偏微分

相关内容