宏 \dv 和 \pdv 会吃掉后续的括号参数

宏 \dv 和 \pdv 会吃掉后续的括号参数

physics package有宏\dv\pdv它们很棒,但我对它们有个小问题。

如果参数后面紧跟着一个括号,它们会吃掉整个参数。如果参数之间有一个空格,一切都会正常,但我想完全防止这种情况发生。我查看了文档,但找不到解决方案。所以一个例子是

\documentclass{article}
\usepackage{physics}

\begin{document}

    \[\dv{x}{t}(y^2-5) \qquad \dv{x}{t} (y^2-5) \qquad \dv{x}{t} \]

\end{document}

我希望左边等式的输出与中间的等式的输出相同。

答案1

这是因为\dv(是 的简写\derivative)定义为

\DeclareDocumentCommand\derivative{ s o m g d() }
{ % Total derivative
    % s: star for \flatfrac flat derivative
    % o: optional n for nth derivative
    % m: mandatory (x in df/dx)
    % g: optional (f in df/dx)
    % d: long-form d/dx(...)

即使g给出了可选的 -type 参数(如您的情况),该命令仍会进一步扫描由andd分隔的可选分隔 -type 参数(在数学上下文中可能不是最佳选择)。为了避免这种情况,您必须重新定义为始终刷新(如果存在)。()\derivative#5

\documentclass{article}
\usepackage{physics}

\DeclareDocumentCommand\derivative{ s o m g d() }
{ % Total derivative
    % s: star for \flatfrac flat derivative
    % o: optional n for nth derivative
    % m: mandatory (x in df/dx)
    % g: optional (f in df/dx)
    % d: long-form d/dx(...)
    \IfBooleanTF{#1}
    {\let\fractype\flatfrac}
    {\let\fractype\frac}
    \IfNoValueTF{#4}
    {
        \IfNoValueTF{#5}
        {\fractype{\diffd \IfNoValueTF{#2}{}{^{#2}}}{\diffd #3\IfNoValueTF{#2}{}{^{#2}}}}
        {\fractype{\diffd \IfNoValueTF{#2}{}{^{#2}}}{\diffd #3\IfNoValueTF{#2}{}{^{#2}}} \argopen(#5\argclose)}
    }
    {\fractype{\diffd \IfNoValueTF{#2}{}{^{#2}} #3}{\diffd #4\IfNoValueTF{#2}{}{^{#2}}}\IfValueT{#5}{(#5)}}
}

\begin{document}

\[\dv{x}{t}(y^2-5) \qquad \dv{x}{t} (y^2-5) \qquad \dv{x}{t} \]

\end{document}

在此处输入图片描述

同时,我想指出的是,该physics软件包并没有真正帮助我编写物理公式,我通常最好使用宏手动输入内容amsmath

答案2

该包physics滥用所提供的可能性xparse来定义具有非常奇怪的语法的命令。

例如,如果你想排版标准\frac{dx}{dt},你必须输入

\dv{x}{t}

如果你想要,\frac{d}{dt}(f(t))你可以输入

\dv{t}(f(t))

这就是语法奇怪的地方:你区分的变量不再是第二个强制参数,而是第一个,并且强制参数完全缺失。

当然,这是通过实际制作第二个括号参数来实现的选修的,这违反了所有标准 LaTeX 约定。

这是非常当需要“长形式”时,首先要有独立变量,而当需要“短(莱布尼茨)形式”时,其次要有独立变量,这是违反直觉的。

该怎么办?我最好的建议是远离physics。它似乎为排版数学提供了许多花哨的功能,但这是以语法清晰度为代价的。

如果你被束缚在该包上,只需添加一个无操作;在这个上下文中一个简单的操作是\/

\documentclass{article}
\usepackage{physics}

\begin{document}

\[
\dv{x}{t}\/(y^2-5) \qquad \dv{x}{t}\/ (y^2-5) \qquad \dv{x}{t}
\]

\end{document}

在此处输入图片描述

答案3

以这种方式更新命令可能会实现此目的:

\documentclass{article}
\usepackage{physics}
\renewcommand\dv[2]{\derivative{#1}{#2}{}}
\renewcommand\pdv[3]{\partialderivative{#1}{#2}{#3}{}}
\begin{document}

    \[\dv{x}{t}(y^2-5) \qquad \dv{x}{t} (y^2-5) \qquad \dv{x}{t} \]

    \[\pdv{x}{t}{z}(y^2-5) \qquad \pdv{x}{t}{z} (y^2-5) \qquad \pdv{x}{t}{z} \]

\end{document}

像这样:

在此处输入图片描述

相关内容