[Tex/LaTex] Macros \dv and \pdv eat the subsequent parenthesis argument

bracketsphysics

The physics package has the macros \dv and \pdv which are great but I have a small problem with them.

If an argument with parenthesis included right after them they eat the whole argument. If there is a space in between the argument everything works fine but I want to prevent this happening all together. I checked the documentation but couldn't find a solution. So an example would be

\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}

I want the output of the equation on the left to be the same as the middle one.

Best Answer

That's because \dv (which is a shorthand for \derivative) is defined as

\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(...)

Even if the optional g-type argument is given (as in your case) the command will scan further for an optional delimited d-type argument which is delimited by ( and ) (maybe not the best choice in a mathematical context). To circumvent this you have to redefine \derivative to always flush #5 if it is present.

\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}

enter image description here

At the same time I'd like to note that the physics package does not really help me writing physics formulae and I'm usually much better off typing the stuff by hand using the amsmath macros.