![宏 \dv 和 \pdv 会吃掉后续的括号参数](https://linux22.com/image/447705/%E5%AE%8F%20%5Cdv%20%E5%92%8C%20%5Cpdv%20%E4%BC%9A%E5%90%83%E6%8E%89%E5%90%8E%E7%BB%AD%E7%9A%84%E6%8B%AC%E5%8F%B7%E5%8F%82%E6%95%B0.png)
这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}
像这样: