脱 physics パッケージして physics2 パッケージを使おう

<!-- # 脱 physics パッケージして physics2 パッケージを使おう -->

LaTeX で数式を取り扱う場合、[physics][] パッケージは非常に有用なパッケージとして有名です。他方で、physics パッケージには数多くの問題があるとされています。この問題は快適さとトレードオフの関係にあるものではなく、修正されるべき問題です。

本記事では、physics パッケージの問題点を明らかにし、代替パッケージを検討します。また、代替パッケージの内、[physics2][] パッケージの使い方について紹介します。

[physics]: https://www.ctan.org/pkg/physics "physics - CTAN"
[physics2]: https://www.ctan.org/pkg/physics2 "physics2 - CTAN"
[fixdif]: https://www.ctan.org/pkg/fixdif "fixdif - CTAN"
[diffcoeff]: https://www.ctan.org/pkg/diffcoeff "diffcoeff - CTAN"
[derivative]: https://www.ctan.org/pkg/derivative "derivative - CTAN"
[braket]: https://www.ctan.org/pkg/braket "braket - CTAN"
[xparse]: https://www.ctan.org/pkg/xparse "xparse - CTAN"
[amsmath]: https://www.ctan.org/pkg/amsmath "amsmath - CTAN"
[siunitx]: https://www.ctan.org/pkg/siunitx "siunitx - CTAN"
[mleftright]: https://www.ctan.org/pkg/mleftright "mleftright - CTAN"
[unicode-math]: https://www.ctan.org/pkg/unicode-math "unicode-math - CTAN"

## ■ physics パッケージのココがヤバい

実は、physics パッケージは実装やそこから得られる結果にいくつもの問題を抱えています :scream:

これは、[LaTeX Stack Exchange][latexstackexchange] や [physics2][] パッケージで多く提起・議論されています。ここで提起・議論されている問題を以下のリストにまとめました。

[latexstackexchange]: https://tex.stackexchange.com/ "TeX - LaTeX Stack Exchange"

- **実装の問題**：
    - 内部で使用される `\DeclareDocumentCommand` ([xparse][]) によってコマンドを強制的に上書きする（警告もない！）
    - xparse パッケージで非推奨とされている `g` 引数を利用している
    - ドキュメントに記載されていない `\homework` コマンドが存在する
    - `\Xmat` コマンドの定義では、トークンリストレジスタを無駄遣いする
    - 部分的なコマンドを個別モジュールとして読み込みすることが出来ない
    - 2012 年のリリース以降、更新されていない！（[参考][physics-ctanann]）
- **他パッケージとの衝突**：
    - `\qty` コマンドが [siunitx][] パッケージと衝突する
    - 内部で使用される `\boldsymbol` ([amsmath][]) は [unicode-math][] パッケージと併用すると失敗する
- **得られる結果に生じる問題**：
    - 実装内に奇妙なスペースを構成している ([LaTeX Stack Exchange][space-lse])
        ```latex: 例：括弧周りのスペースが左右で異なっている
        \fbox{$\ev*{\hat{O}_P}$}
        ```
        ![odd spacing](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/590705/4e129aac-a5a2-b723-a8d6-0148f8996380.png)

    - ドキュメント作成者の意図しない引数の扱い方をする ([LaTeX Stack Exchange][parenarg-lse])
        ```latex: 例：(y^2-5) が無視される
        \[
          \dv{x}{t}(y^2-5)
        \]
        ```
        ![ignore argument](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/590705/1c092403-d84c-0421-3b54-e29bccf99308.png)

[physics-ctanann]: https://www.ctan.org/ctan-ann/pkg/physics "CTAN: CTAN-ann - physics"
[space-lse]: https://tex.stackexchange.com/questions/453274/how-to-fix-the-spacing-before-starred-commands-from-physics-package/453275 "How to fix the spacing before starred commands from physics package - TeX - LaTeX Stack Exchange"
[parenarg-lse]: https://tex.stackexchange.com/questions/470819/macros-dv-and-pdv-eat-the-subsequent-parenthesis-argument/470842 "brackets - Macros \dv and \pdv eat the subsequent parenthesis argument - TeX - LaTeX Stack Exchange"

一方で、physics パッケージを代替するパッケージの検討に関する議論もなされています。

- [macros - Alternatives to the physics package - TeX - LaTeX Stack Exchange](https://tex.stackexchange.com/questions/471532/alternatives-to-the-physics-package)
- [package writing - Physics replacement effort - TeX - LaTeX Stack Exchange](https://tex.stackexchange.com/questions/471563/physics-replacement-effort)

ここで紹介されているパッケージは、以下のようなものです。それぞれで提供される機能も付記しました。

- **[physics*2*][physics2] パッケージ**
    - 高さが自動調整される括弧（`ab` モジュール）
    - Dirac の bra-ket 記法（`ab.braket`・`braket` モジュール）
    - 行列の簡易記法（`diagmat`・`xmat` モジュール）
    - レガシーモジュール
        - ベクトル記法
        - いくつかの作用素
        - 挿入テキストの簡易コマンド
- **[fixdif][] パッケージ**
    - 微分のための微小量記号
- **[diffcoeff][] パッケージ**
    - 微分記法
- **[derivative][] パッケージ**
    - 微分記法
- **[braket][] パッケージ**
    - Dirac の bra-ket 記法

本記事では、physics*2* パッケージについて紹介します。この他のパッケージについては他の記事に譲ります。

## ■ physics2 パッケージを使おう

physics パッケージの後継に相当する physics*2* パッケージが 2023/02/08 に公開されました。
本記事では、バージョン 1.0.1 (2024/01/10) に準拠します。

https://www.ctan.org/pkg/physics2

physics*2* パッケージはその名前から推測されるように、physics パッケージに影響を受けたパッケージです。そのため、このパッケージの目的は次の 2 点です。

- より簡単かつ可読性が高まるようにコマンドを提供する
    - コマンド名は目的が明瞭かつ覚えやすいように定義している
- physics パッケージで書かれた文書を維持する <sup>(?)</sup>
    - と言いつつ、完全な互換性はありません……

physics パッケージとの差別化点は以下の 4 点が挙げられます。

- physics パッケージのような実装内の問題がない（はず）
- 現在進行形で開発されている
- コマンドを目的別にモジュール化している
- unicode-math パッケージと併用できる

:::note warn
physics パッケージを単純に physics*2* パッケージに置き替えることは出来ません。複数のコマンドについて、多くの違いがあるため注意してください。
:::

physics*2* パッケージから提供されるモジュールは、以下の 6 つのモダンなモジュールと 5 つのレガシーモジュールがあります。

- **モダンモジュール**：
    |                                                                  |
    | :--------------------------------------------------------------: |
    | `ab`、`ab.braket`、`braket`、<br>`doubleprod`、`diagmat`、`xmat` |
- **レガシーモジュール**：
    |                                                                              |
    | :--------------------------------------------------------------------------: |
    | `ab.legacy`、`bm-um.legacy`、<br>`nabla.legacy`、`op.legacy`、`qtext.legacy` |

    physics パッケージが提供するいくつかのコマンドを後方互換しています。

モジュールは `\usepackage{physics2}` の後で `\usephysicsmodule` によって読み込みます。モジュールにはオプションを含むものもあり、`\usephysicsmodule` のオプションからモジュール毎に読み込むことが出来ます。

それぞれのモダンなモジュールについて簡単に説明しておきます。

|  モジュール  | 説明                                                                      |
| :----------: | :------------------------------------------------------------------------ |
|  デフォルト  | `\delopen`・`\delclose` コマンドの提供                                    |
|     `ab`     | 高さが自動調整される括弧 <br>（physics パッケージにおける `\qty` に対応） |
| `ab.braket`  | 明示的な括弧による bra-ket 記法                                           |
|   `braket`   | 波括弧による bra-ket 記法                                                 |
| `doubleprod` | テンソルのダブルクロス積記号                                              |
|  `diagmat`   | 対角行列の簡易記法                                                        |
|    `xmat`    | 行列の添え字表記法                                                        |

レガシーモジュールについても簡単に説明しておきます。場合によっては、これらは自力で定義した方が簡便な可能性もあります。

|   モジュール   | 説明                                                                                                                                   |
| :------------: | :------------------------------------------------------------------------------------------------------------------------------------- |
|  `ab.legacy`   | `\abs`、`\norm`、`\eval`、`\order` を提供                                                                                              |
| `bm-um.legacy` | `\bm` を unicode-math パッケージに対応するように変更                                                                                   |
| `nabla.legacy` | `\grad`、`\div`、`\rot` を提供（`÷` は `\divsymbol`）                                                                                  |
|  `op.legacy`   | `\asin`、`\acos`、`\atan`、`\acsc`、`\asec`、`\acot`、`\Tr`、`\tr`、`\rank`、`\erf`、`\Res`、`\res`、`\PV`、`\pv`、`\Re`、`\Im` を提供 |
| `qtext.legacy` | `\qq`、`\qq*`、`\qcc`、`\qcc*`、`\qif`、`\qthen` を提供                                                                                |

レガシーモジュールに関するより詳細なガイドは、[physics2 manual for physics users (PDF)][physics2-legacy-pdf] を参照してください。

[physics2-legacy-pdf]: http://mirrors.ctan.org/macros/latex/contrib/physics2/doc/physics2-legacy.pdf "physics2 manual for physics users (PDF) - CTAN"

以下では、モダンなモジュールのみを紹介します。

### ！接頭辞

`ab`・`diagmat`・`xmat` モジュールから提供されるコマンドでは、接頭辞を付けることで括弧を指定することが出来ます。

| 接頭辞 |     名     | 対応する括弧                                                           |
| :----: | :--------: | :--------------------------------------------------------------------- |
|  `p`   |   丸括弧   | `(`・`)`                                                               |
|  `b`   |   角括弧   | `[`・`]`                                                               |
|  `B`   |   波括弧   | `\{`・`\}` または `\lbrace`・`\rbrace`                                 |
|  `v`   |   垂直棒   | <code>&#124;</code>・<code>&#124;</code> または `\lvert`・`\rvert`     |
|  `V`   | 二重垂直棒 | <code>\\&#124;</code>・<code>\\&#124;</code> または `\lVert`・`\rVert` |
|  `a`   |   山括弧   | `<`・`>` または `\langle`・`\rangle`                                   |

これらに関して、接頭辞付きコマンドを `\X~~` と表現します。(e.g. `\pab`, `\bab`, … , `\aab` → `\Xab`)

### ▽ デフォルト

physics*2* パッケージを読み込むと利用できるデフォルト機能です。（ver.1.0 以前では `common` モジュールと呼ばれていました）

デフォルトの機能は、括弧の高さを手動で調整する `\big` 系統に、`g` が 3 つ続く `biggg`・`Biggg` が提供されます。

したがって、次のように 7 種類の高さを表現でき、次表の 8 つのコマンドが追加されます。

![variation of brace size](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/590705/c1c78150-771f-799d-85a5-a7f02c7ff0b1.png "p.4 - The physics2 package - 2023/04/02 Version 0.2.1" )

| 高さ  | 場所無し | 左        |   中央    |        右 |
| :---: | -------- | :-------- | :-------: | --------: |
| biggg | `\biggg` | `\bigggl` | `\bigggm` | `\bigggr` |
| Biggg | `\Biggg` | `\Bigggl` | `\Bigggm` | `\Bigggr` |

また、自動で括弧の高さを調整する `\delopen`・`\delclose` が提供されます。これは [mleftright][] パッケージの `\mleft`・`\mright` と類似しています。

![compare space size around parenthesis](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/590705/0c47df7e-84b0-f630-db51-6a1816e1678f.png)

上の図を見れば明らかなように、`\left`・`\right` 使用時に生じる括弧周りの余分なアキが無いように動作します。

次で紹介する `ab` モジュール提供の `\ab` コマンドも同様に動作します。(`tightbraces=true`)

### ▽ `ab` モジュール

このモジュールから提供されるコマンドは、`\ab` と接頭辞を付けたコマンドの計 7 つです。

- `\ab`
- `\pab`
- `\bab`
- `\Bab`
- `\vab`
- `\Vab`
- `\aab`

```latex
\usephysicsmodule{ab}
```

|  オプション   | デフォルト値 | 説明                                                                                                 |
| :-----------: | :----------: | :--------------------------------------------------------------------------------------------------- |
| `tightbraces` |    `true`    | <ul><li>`true`：`\delopen`・`\delclose` を利用 </li><li>`false`：`\left`・`\right` を利用 </li></ul> |

`ab` は “**A**utomatic **b**races” の略です。

----------

モジュール名の通り、`\ab` コマンドと対応する括弧を用いることで、高さが自動調整された括弧を挿入することが出来ます。このコマンドは、physics パッケージにおける `\qty` と同じように括弧を明示的に表現することが出来ます。

```latex
\[
  \ab (\frac{1}{2})    \quad
  \ab [\frac{1}{2}]    \quad
  \ab\{\frac{1}{2}\}   \quad
  \ab |\frac{1}{2}|    \quad
  \ab\|\frac{1}{2}\|   \quad
  \ab <\frac{1}{2}>
\]
```

![ab command sample](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/590705/e4480ed8-1f3a-cbe2-07b1-2a73f9462add.png)

[sec-pos]: #接頭辞 "§「接頭辞」に移動"

また、`\ab` は接頭辞 <sup>[§][sec-pos]</sup> (`p`・`b`・`B`・`v`・`V`・`a`) を用いることで、常に `{}` によって表現することも出来ます。これは、上に示したコマンドが次のコマンドと同等であることを意味しています。

```latex
\[
  \pab{\frac{1}{2}}    \quad %  ( )
  \bab{\frac{1}{2}}    \quad %  [ ]
  \Bab{\frac{1}{2}}    \quad %  { }
  \vab{\frac{1}{2}}    \quad %  | |
  \Vab{\frac{1}{2}}    \quad % \| \|
  \aab{\frac{1}{2}}          %  < >
\]
```

`\ab` は `[]` を付けずに `\big`、`\Xab` は `[big]` 等とすることで、手動によって括弧の高さを調整します。

```latex
\[
  \ab\Bigg[\frac{1}{2}]
  \bab[Bigg]{\frac{1}{2}}
\]
```

![Adjust the size of parentheses manually](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/590705/e62be1bf-2e7d-0f23-3632-f9c553716893.png)

:::note warn
physics パッケージの `\qty` では、波括弧の高さを自動調整する `\qty{...}` のような使い方ができました。これは xparse パッケージで非推奨としている `g` 引数を利用しているためです。physics*2* パッケージでは、このような非推奨な実装をしていないため、`\ab{...}` によって `\qty{...}` と同じ結果は得られません。

`\qty{...}` に相当するコマンドは、`\ab\{...\}` または `\Bab{...}` です。また、`\ab{...}` は存在しないことに注意してください。
:::

### ▽ `ab.braket`・`braket` モジュール

このモジュールから提供されるコマンドは、以下の 4 つとその `*` 付きの計 8 つです。`*` 付きは高さの自動調整をしません。

- `\bra`
- `\ket`
- `\braket`
- `\ketbra`

:::note warn
`ab.braket`・`braket` モジュールは、ともに Dirac の bra-ket 記法を提供します。しかし、この 2 つのモジュールは競合するため、どちらか一方しか利用できません。
:::

```latex
\usephysicsmodule{ab.braket}
```

```latex
\usephysicsmodule{braket}
```

両モジュールの違いは表現方法にあります。

| モジュール  | 相違点                                                                                                                                                 |
| :---------: | :----------------------------------------------------------------------------------------------------------------------------------------------------- |
| `ab.braket` | <ul><li>`ab` モジュールと同じように、`<`・<code>&#124;</code>・`>` を明示的に用いる </li><li> 括弧高さの手動調整する場合は、`[]` を用いない </li></ul> |
|  `braket`   | <ul><li> 引数を常に `{}` で挿入する </li><li> 括弧高さの手動調整や引数の数を指定する場合は、`[]` を用いる </li></ul>                                   |

----------

ここでは、`\braket` を使ったそれぞれの例を紹介しておきます。braket パッケージの記法とも少し異なることに注意してください。

```latex
% ab.braket module
\[
  \braket< \psi >                           \quad
  \braket< \frac{\phi}{2} | \psi >          \quad
  \braket< \frac{\phi}{2} | H | \psi >      \quad
\]
```

```latex
% braket module
\[
  \braket[1]{ \psi }                         \quad
  \braket{ \frac{\phi}{2} }{ \psi }          \quad
  \braket[3]{ \frac{\phi}{2} }{ H }{ \psi }  \quad
\]
```

![Dirac's bra-ket notation by braket module](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/590705/0b397951-f2d5-8f96-266b-88186d664d98.png)

もしも、これらモジュールの記法や機能が気に入らない場合は、モジュールを有効にせずに [braket][] パッケージを利用すると良いでしょう。

### ▽ `doubleprod` モジュール

このモジュールから提供されるコマンドは、以下の 2 つです。

- `\doublecross`
- `\doubledot`

![doubleprod module](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/590705/fae1d83b-6d98-7b15-34e2-261649e8c0bc.png)

```latex
\usephysicsmodule{doubleprod}
```

|  オプション   | デフォルト値 | 説明         |
| :-----------: | :----------: | :----------- |
| `crossscale`  |    `0.8`     | 大きさ       |
|  `dotscale`   |     `1`      | 大きさ       |
| `crossopenup` |    `0.02`    | `×` の間隔幅 |
|  `dotopenup`  |    `0.2`     | `⋅` の間隔幅 |

### ▽ `diagmat` モジュール

このモジュールから提供されるコマンドは、`\diagmat` と接頭辞を付けたコマンドの計 6 つです。これらは、括弧の有無や形状以外は同じ機能を有しています。

- `\diagmat`
- `\pdiagmat`
- `\bdiagmat`
- `\Bdiagmat`
- `\vdiagmat`
- `\Vdiagmat`

```latex
\usephysicsmodule{diagmat}
```

このモジュールは amsmath を必要とします。

このモジュールはオプションがあります。このオプションはモジュールでグローバルに指定できます。また、各コマンドのオプション指定もできます。

| オプション | デフォルト値 | 説明             |
| :--------: | :----------: | :--------------- |
|  `empty`   |     `0`      | 非対角成分の文字 |

----------

実際に使った例をいくつか紹介します。

`\diagmat` は対角行列成分を引数に採って、対角行列を書くことが出来ます。各成分は `,` で区切ります。

```latex
\[
  \diagmat{1, 2, 3, 4}
\]
```

![default diagmat command by diagmat module](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/590705/bdcd5247-0772-660e-3ea8-5b0f515681c7.png)

`\diagmat` は接頭辞 <sup>[§][sec-pos]</sup> (`p`・`b`・`B`・`v`・`V`) を用いること (`\Xdiagmat`) で、括弧を自動的に与えることが出来ます。また、`empty` オプションから非対角成分を指定できます。

```latex
\[
  \pdiagmat[empty={}]{1, 2, 3, 4}
\]
```

![with empty option by diagmat module](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/590705/5457c6f3-d4bd-ef1d-f590-6fa8fe803b77.png)

現在、反対角行列を書くコマンドは提供されていません。

### ▽ `xmat` モジュール

このモジュールから提供されるコマンドは、`\xmat` と接頭辞を付けたコマンドの計 6 つです。これらは、括弧の有無や形状以外は同じ機能を有しています。

- `\xmat`
- `\pxmat`
- `\bxmat`
- `\Bxmat`
- `\vxmat`
- `\Vxmat`

```latex
\usephysicsmodule{xmat}
```

このモジュールは amsmath を必要とします。

このモジュールはオプションがあります。このオプションはモジュールでグローバルに指定できます。また、各コマンドのオプション指定もできます。

| オプション | デフォルト値 | 説明                                                                                               |
| :--------: | :----------: | :------------------------------------------------------------------------------------------------- |
| `showtop`  |     `8`      | 省略せずに表示する行数                                                                             |
| `showleft` |     `8`      | 省略せずに表示する列数                                                                             |
|  `format`  | `#1_{#2#3}`  | 行列の形式を指定する <ul><li>`#1`：行列要素 </li><li>`#2`：行番号 </li><li>`#3`：列番号 </li></ul> |

`showtop`・`showleft` のデフォルト値は <samp>MaxMatrixCols</samp> より 2 小さくなります。amsmath では <samp>MaxMatrixCols</samp> は 10 であるため、`8` がデフォルト値となっています。

----------

実際に使った例をいくつか紹介します。

`\xmat` は $a_{mn}$ のような行列を簡単に書くことができます。

```latex
\[
  \xmat{a}{2}{3}
\]
```

![xmat command by xmat module](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/590705/c8853b40-c865-d8d6-69c7-8454146455b5.png)

`\xmat` は接頭辞 <sup>[§][sec-pos]</sup> (`p`・`b`・`B`・`v`・`V`) を用いること (`\Xxmat`) で、括弧を自動的に与えることが出来ます。

また、`showtop`・`showleft` オプションから省略せずに表示する行列の数を指定できます。m 行 n 列の行列を表現したい際に有益です。

```latex
\[
  \pxmat[showtop=2, showleft=3]{M}{m}{n}
\]
```

![with showtop and showleft options by xmat module](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/590705/ee932be9-014f-51c8-d8e2-ed7393a0da8f.png)
<!-- ![with showtop and showleft options by xmat module](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/590705/c9151b51-2619-8f1f-a5d6-92ee3aa2ae5a.png) -->

`format` オプションを利用すれば、`x[row][col]` のような行列を書くことが出来ます。

```latex
\[
  \xmat[
      showtop=3,
      showleft=2,
      format=\texttt{#1[#2][#3]}
    ]{x}{m}{n}
\]
```

![with format option by xmat module](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/590705/3306f8b1-cec3-fbc7-5e4d-8086d1160791.png)

### ☆ physics パッケージでの問題

この記事の [\# この節][sec-yabai] で physics パッケージで生じていた問題を 2 つ紹介していました。physics*2* パッケージでは、これらの問題は解消されているのか確かめておきましょう。

[sec-yabai]: #-physics-パッケージのココがヤバい "§ 「physics パッケージのココがヤバい」に移動"

提起した問題は次の 2 つでした。

- 実装内に奇妙なスペースを構成している
    ```latex
    \fbox{$\ev*{\hat{O}_P}$}
    ```
- ドキュメント作成者の意図しない引数の扱い方をする
    ```latex
    $\dv{x}{t}(y^2-5)$
    ```

physics*2* パッケージでは、微分記法に関するコマンドを提供していないため、1 つ目の問題に関して確かめてみましょう。

```latex
\fbox{$\braket[1]{\hat{O}_P}$}
```

![physics issue resolved in physics2](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/590705/cc726156-e815-e0a7-209e-883ac291968e.png)

括弧周りの奇妙なスペースはありません。physics パッケージで確認された問題は physics*2* パッケージで再現されません。嬉しいですね :satisfied:

少し山括弧が大きい気がする場合は、`big` をオプションに加えると良いでしょう。

```latex
\fbox{$\braket[1, big]{\hat{O}_P}$}
```

![braket command with big option](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/590705/457467fa-8053-910c-7f09-0cdd444ac849.png)

`big` オプションが与えられた場合でも、physics パッケージのような問題は再現されません :tada:

私は、実装に関してヤバいところがあるかどうか分かりません。分かる人は時間がある時に、ぜひコードを確認してみてください :eyes:

### ★ サポートされないコマンド

physics パッケージから提供されていたコマンドの内、いくつかのコマンドについて physics*2* パッケージはサポートを計画していません :cry:

- 微分記法に関するコマンド
- `\sin(...)`・`\log(...)` etc.
- `\comm`・`\comm*`
- `\acomm`・`\acomm*`
- `\pb`
- `\vb`・`\vb*`
- `\va`・`\va*`
- `\vu`・`\vu*`
- `\mqty`・`\Xmqty`
- `\smqty`

これらの解決方法については、[physics2 manual for physics users (PDF)][physics2-legacy-pdf] を参照すると良いでしょう。また、微分記法に関するコマンドは [diffcoeff][] や [derivative][] パッケージを利用すると良いでしょう。

# 余談

physics パッケージは、実は問題がいくつもあります。他のパッケージに乗り換えた方が賢明でしょう。physics パッケージの類似記法を数多く提供している physics2 パッケージは、移行先として有力なパッケージです。

今回紹介した physics2 パッケージは、以下のリポジトリで開発されています。問題や新たな機能リクエストがあれば、Issue を提起しておくと良いでしょう。

https://github.com/AlphaZTX/physics2

<details>
<summary> 画像生成用ファイル（折りたたみ）</summary>

```latex
% +++
% latex = "lualatex"
% +++
\documentclass[paper=a6]{jlreq}
\usepackage{amsmath}
\usepackage{mathtools}
\mathtoolsset{showonlyrefs}
\usepackage{physics}
\usepackage[active, tightpage, displaymath]{preview}
\begin{document}

\begin{preview}
  \rule{\textwidth}{0mm}
  \begin{center}
    \fbox{$\ev*{\hat{O}_P}$}
  \end{center}
\end{preview}

\begin{equation}
  \dv{x}{t}(y^2-5)
\end{equation}

\end{document}
```

```latex
% +++
% latex = "lualatex"
% +++
\documentclass[paper=a5]{jlreq}
\usepackage{amsmath}
\usepackage{mathtools}
\mathtoolsset{showonlyrefs}
\usepackage{mleftright}
\usepackage{physics2}
\usephysicsmodule{ab, braket, doubleprod, diagmat, xmat}
\newcommand{\cmd}[1]{\texttt{\textbackslash #1}}
\newcommand{\cmdtext}[1]{\text{\texttt{\textbackslash #1}}}
\usepackage[active, tightpage, displaymath]{preview}
\begin{document}

\begin{alignat}{4}
  \sin(x), &\qquad& \sum(x), &\qquad& (x)(x). &\qquad&& \text{normal}
  \\
  \sin\left(x\right), && \sum\left(x\right), && \left(x\right)\left(x\right). &&& \text{\cmd{left} and \cmd{right}}
  \\
  \sin\mleft(x\mright), && \sum\mleft(x\mright), && \mleft(x\mright)\mleft(x\mright). &&& \text{\cmd{mleft} and \cmd{mright}}
  \\
  \sin\delopen(x\delclose), && \sum\delopen(x\delclose), && \delopen(x\delclose)\delopen(x\delclose). &&& \text{\cmd{delopen} and \cmd{delclose}}
  \\
  \sin\ab(x), && \sum\ab(x), && \ab(x)\ab(x). &&& \cmdtext{ab}
\end{alignat}

\begin{equation}
  \ab (\frac{1}{2})
  \quad
  \ab [\frac{1}{2}]
  \quad
  \ab\{\frac{1}{2}\}
  \quad
  \ab |\frac{1}{2}|
  \quad
  \ab\|\frac{1}{2}\|
  \quad
  \ab <\frac{1}{2}>
\end{equation}

\begin{equation}
  \ab\Bigg[\frac{1}{2}]
  \bab[Bigg]{\frac{1}{2}}
\end{equation}

\begin{equation}
  \braket[1]{\psi}
  \quad
  \braket{\frac{\phi}{2}}{\psi}
  \quad
  \braket[3]{\frac{\phi}{2}}{H}{\psi}
\end{equation}

\begin{alignat}{5}
  \cmdtext{doublecross}&\quad&
  \doublecross
  &\qquad\qquad\qquad\qquad&
  \cmdtext{doubledot}&\quad&
  \doubledot
\end{alignat}

\begin{equation}
  \diagmat{1,2,3,4}
\end{equation}

\begin{equation}
  \pdiagmat[empty={}]{1,2,3,4}
\end{equation}

\begin{equation}
  \xmat{a}{2}{3}
\end{equation}

\begin{equation}
  \pxmat[showtop=2, showleft=3]{M}{m}{n}
\end{equation}

\begin{equation}
  \xmat[
      showtop=3,
      showleft=2,
      format=\texttt{#1[#2][#3]}
    ]{x}{m}{n}
\end{equation}

\begin{preview}
  \begin{center}
    \rule{\textwidth}{0mm}
    \fbox{$\braket[1]{\hat{O}_P}$}
  \end{center}
\end{preview}

\end{document}
```

</details>

# 追記

- 2023/05/24: いくつかの画像を追加。軽微修正。
- 2024/03/21: ver.1.0 以降では `common` モジュールが素の physics2 パッケージに取り込まれたため、`common` モジュールに関する記述を修正しました。