尝试重新定义物理包中的 \dv 和 \pdv 以显示样式,而不设置周围环境以显示样式

尝试重新定义物理包中的 \dv 和 \pdv 以显示样式,而不设置周围环境以显示样式

我正在使用物理包除了 \dv 和 \pdv 命令(它们只是简写版本)之外,还添加了 \derivative 和 \partialderivative 命令。对于那些不熟悉的人来说,这些命令具有可变数量的参数,这使得它们更加有用。

\( 
    \dv{x} \\ 
    \dv{f}{t}  \\ 
    \dv[2]{h}{x}
\)

在此处输入图片描述

这些命令默认为文本样式模式,但我试图将 \dv 和 \pdv 命令更改为默认显示样式。

这是我尝试过的。

\renewcommand{\pdv}{
    \ensuremath{\displaystyle \partialderivative}
}
\renewcommand{\dv}{
    \ensuremath{\displaystyle \derivative}
}

这几乎可以正常工作,但它会将行的其余部分设置为显示样式模式。我希望此命令不会改变其周围文本的样式。

例如,

\(
    \dv{f} \qquad \frac{A}{b}
\)

将产生以下输出:

当前不需要的输出

但我希望它产生这样的输出:

期望输出

我还没有找到一种方法将命令放在它自己的块中,同时保持将可变数量的参数传递给 \derivative 和 \partialderivative 的能力。

答案1

显示样式中的方程的位置部分,我们需要使用 对其进行分组{...}。要做到这一点并允许访问 的所有参数\derivative,我们需要使用 来获取参数\dv。加载physics和使用\ShowCommand\derivative为我们提供信息

> \derivative=document command:
  #1:s
  #2:o
  #3:m
  #4:g
  #5:d()

获取参数很容易,但相当尴尬的形式意味着传递给\derivative并不容易。我不会使用一组复杂的分支,而是选择\expanded

\RenewDocumentCommand\dv{somgd()}{%
  {%
    \displaystyle
    \expanded{%
      \derivative
        \IfBooleanT{#1}{*}%
        \IfNoValueF{#2}{[{\unexpanded{#2}}]}%
        {\unexpanded{#3}}%
        \IfNoValueF{#4}{{\unexpanded{#4}}}%
        \IfNoValueF{#5}{({\unexpanded{#5}})}%
    }%
  }%
}

这里的想法是,除了强制性的 之外#3,我们还要测试每个其他参数是否存在,并使用条件重新创建正确的形式。由于\derivative不会展开\expanded,但条件会展开,因此最终结果后面\derivative跟着要传递的参数,所有这些都在 内设置{\displaystyle ...}

答案2

这似乎是一件很奇怪的事情,但是\dv有一种*形式可以在两种分数样式之间切换,因此您可以使用*并在本地颠覆 只\flatfrac使用一次。\dfrac

在此处输入图片描述

\documentclass{article}

\usepackage{physics}
\let\savedfrac\flatfrac

\renewcommand{\dv}{%%%
 \def\flatfrac{\let\flatfrac\savedfrac\dfrac}\derivative*%%%
}
\begin{document}

\(
    \dv{f} \qquad \frac{A}{b}
\)

\end{document}

相关内容