14

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.

2
  • 2
    I cannot recommend using the physics package. See e.g. this post: tex.stackexchange.com/questions/453274 Commented Jan 19, 2019 at 7:23
  • @HenriMenke Thanks for your answer below and recommendation. I didn't know anything about the poor practices that were done in physics package. I'll try to switch over to amsmath as you suggested, especially after seeing your remarks about how \ev is defined Commented Jan 19, 2019 at 7:38

3 Answers 3

9

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.

1
  • 1
    \partialderivative and therefore \pdv will probably have the same problem. Commented Jan 19, 2019 at 7:23
15

The package physics abuses the possibilities afforded by xparse to define commands having very weird syntax.

For instance, if you want to typeset the standard \frac{dx}{dt}, you have to type

\dv{x}{t}

If you want instead \frac{d}{dt}(f(t)) you type

\dv{t}(f(t))

which is where the syntax is weird: the variable you differentiate with respect to is no longer the second mandatory argument, but the first and a mandatory argument is missing altogether.

Of course this is achieved by actually making the second braced argument optional, which breaks all standard LaTeX conventions.

It is very counterintuitive having the independent variable first when the “long form” is desired and second for the “short (Leibniz) form”.

How can you do? My best advice is to keep at arm's length from physics. It seems to provide many bells and whistles for typesetting math, but this is at the expense of syntax clarity.

If you are tied to the package, simply add a no-op; a simple one in this context is \/:

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

enter image description here

2

Renewing the commands in this way probably does it:

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

like this:

enter image description here

1
  • 3
    This breaks the starred variants. Commented Jan 19, 2019 at 7:20

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .