LaTeX でいろんなパッケージを usepackage する

# LaTeX でいろんなパッケージを usepackage する

LaTeX を利用するときには多くのパッケージを利用する。LaTeX のパッケージが集められている [CTAN](https://www.ctan.org/) を見てみると、およそ 6,000 以上のパッケージを見ることが出来る。これらから必要かつ適切なパッケージを選んで利用することはかなり難しい。
パッケージの存在を知らなければ、TeX や LaTeX を駆使して問題を解決するように頑張る人もいるが、労力に見合った対価を得られるか分からない。

そこで、本記事では筆者が知っているだけパッケージを書き出してみたい。よく目にしているが使ったことのないパッケージも含まれている。

:::note info
これらの情報は筆者が知る 2021 年 12 月時点での情報です。
もしも古い情報があった場合は教えてください。
:::

:::note warn
複数のパッケージを利用する場合、互換性や組み合わせ、読み込み順序などの問題を生じることがありますが、ここでは取り上げていません。使い方などの詳細はパッケージガイドを参照してください。（パッケージ名には CTAN のリンクを貼り付けてあります）
:::

:::note info
紹介するパッケージは基本的に TeX Live などのディストリビューションに含まれています。含まれていない場合にはダウンロード出来るリポジトリリンクを参照しています。
:::

いくつかのパッケージには、類似パッケージも提示している。しかしながら、実際にどちらの方が優位なパッケージであるかは分からない。
そのため、パッケージ名で適当に検索するなどして使いやすいものを利用すると良いと思われる。

<!-- https://www.webfx.com/tools/emoji-cheat-sheet/ -->

## ■ エンジンに依るもの

日本語を LaTeX する場合には、以下の 2 通りが挙げられる。

- upLaTeX + dvipdfmx
- LuaLaTeX

上の 2 つの方法で利用可能なパッケージを挙げてみたい。

### ▽ upLaTeX 専用のパッケージ

|                        パッケージ                         | 概要                                                                                                                                                    |
| :-------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------------------------------ |
| ***[plautopatch](https://www.ctan.org/pkg/plautopatch)*** | upLaTeX のためのパッチパッケージを自動補完する                                                                                                          |
|   [janapese-otf](https://www.ctan.org/pkg/japanese-otf)   | 外字などのフォントの追加と多書体化                                                                                                                      |
|        [pxchfon](https://www.ctan.org/pkg/pxchfon)        | 和文フォントの変更                                                                                                                                      |
|      [PXrubrica](https://www.ctan.org/pkg/pxrubrica)      | ルビ振りと圏点を提供                                                                                                                                    |
|   [jlreq-deluxe](https://www.ctan.org/pkg/jlreq-deluxe)   | 多書体化を提供 / <br> jlreq を利用時に japanese-otf パッケージから `deluxe` オプションを有効にすると jlreq の期待する組版が得られなくなるため必要になる |

plautopatch パッケージは文書の先頭で以下のように読み込むことが推奨されている。

```latex
\RequirePackage{plautopatch}
\documentclass[uplatex, dvipdfmx]{jlreq}
```

> [\# 新常識 (1) plautopatch は必ず読み込もう \- 日本語 LaTeX の新常識 2021 \- Qiita](https://qiita.com/wtsnjp/items/76557b1598445a1fc9da#%E6%96%B0%E5%B8%B8%E8%AD%98-1-plautopatch-%E3%81%AF%E5%BF%85%E3%81%9A%E8%AA%AD%E3%81%BF%E8%BE%BC%E3%82%82%E3%81%86)

また、いくつかのパッケージは DVI ドライバに依存するので、ドキュメントクラスで指定しておくと良い。

### ▽ LuaLaTeX 専用のパッケージ

|                      パッケージ                      | 概要                                                                   |
| :--------------------------------------------------: | :--------------------------------------------------------------------- |
| ***[luatex-ja](https://www.ctan.org/pkg/luatexja)*** | 日本語で LuaLaTeX するには必ず必要                                     |
|                     luatexja-otf                     | LuaLaTeX 用の OTF パッケージ                                           |
|                  luatexja-fontspec                   | 和文フォントの変更 / <br> luatexja-preset でプリセットが用意されている |
|    [fontspec](https://www.ctan.org/pkg/fontspec)     | 英文フォントの変更 / <br> XeLaTeX でも使用可能                         |
|                    luatexja-ruby                     | ルビ振りと圏点を提供                                                   |
|       [luacode](https://ctan.org/pkg/luacode)        | Lua コードを利用する                                                   |
|    [luacolor](https://www.ctan.org/pkg/luacolor)     | LuaLaTeX 用の color パッケージ                                         |

> *cf.*
>
> - [LuaTeX\-ja Wiki \- LuaTeX-ja \- OSDN](https://ja.osdn.net/projects/luatex-ja/wiki/FrontPage)
> - [徹底攻略！LuaLaTeX で Lua コードを「書く」ためのコツ - Qiita](https://qiita.com/zr_tex8r/items/af2905bc93ac2c936a67)

### ▽ 一般的な文書クラス

文書クラスは次のようなものを利用すると良いだろう。

|                   パッケージ                    | 概要                                                                                                                                       |
| :---------------------------------------------: | :----------------------------------------------------------------------------------------------------------------------------------------- |
|  ***[jlreq](https://www.ctan.org/pkg/jlreq)***  | デフォルトは article スタイル / <br> report や book スタイルはオプションで指定する / <br> 縦書きにも対応                                   |
| [jsclasses](https://www.ctan.org/pkg/jsclasses) | jclasses を拡張した upLaTeX 用の文書クラスバンドル / <br> jsarticle、jsreport、jsbook と学会用と紀要用がある / <br> slide オプションがある |
|                   ltjsclasses                   | jsclasses を LuaLaTeX にも対応させた文書クラス                                                                                             |
|   [BXjscls](https://www.ctan.org/pkg/BXjscls)   | upLaTeX や LuaLaTeX、XeLaTeX に対応した文書クラス / <br>bxjsarticle、bxjsreport、bxjsbook と学会用と紀要用がある                           |
|    [beamer](https://www.ctan.org/pkg/beamer)    | TikZ と同じ PGF ベースで作られているプレゼンテーション用の文書クラス                                                                       |

基本的には (u)pLaTeX でも LuaLaTeX でも jlreq を利用すれば良いと思われる。
jlreq では `\sidenote` や `\endnote` などを備えている。使う前には 20 ページ程度のドキュメントを一読しておくと良いと思われる。

スライドには beamer を利用することになるが、日本語をするにはフォントメトリックなど気にする必要があるらしい。

## ■ 一般

geometry パッケージは特に重要なパッケージになる。

|                     パッケージ                      | 概要                                                                                                                                    |
| :-------------------------------------------------: | :-------------------------------------------------------------------------------------------------------------------------------------- |
| ***[geometry](https://www.ctan.org/pkg/geometry)*** | 余白調整をより容易に / <br> 訳も分からず `\setlength` するよりも良いと思われる                                                          |
|    [fancyhdr](https://www.ctan.org/pkg/fancyhdr)    | ヘッダーとフッターの編集                                                                                                                |
|    [abstract](https://www.ctan.org/pkg/abstract)    | アブストラクトのカスタマイズを簡単にする                                                                                                |
|    [appendix](https://www.ctan.org/pkg/appendix)    | 付録の追加制御                                                                                                                          |
|     [tocloft](https://www.ctan.org/pkg/tocloft)     | 目次のカスタマイズ / <br> 新しい目次の定義                                                                                              |
|      [xcolor](https://www.ctan.org/pkg/xcolor)      | 文字などの色付け                                                                                                                        |
|     [comment](https://www.ctan.org/pkg/comment)     | 複数行をコメントアウトする comment 環境を提供 / <br> 新たなコメント環境を定義することも可能 / <br> comment 環境のインデントに注意が必要 |

comment パッケージではインデントに気を付ける必要がある。
`\begin{comment}` や `\end{comment}` をインデントしてはいけないことに注意しておきたい。

```latex
\begin{comment}
    ↑
  インデントしない
    ↓
\end{comment}
```


### ▽ フォント

和文フォントに関しては LaTeX エンジンによって利用するパッケージが異なるが、欧文フォントはどのエンジンであっても以下のようなパッケージを利用することが出来る。

|                  パッケージ                  | 概要                                                                          |
| :------------------------------------------: | :---------------------------------------------------------------------------- |
| ***[lmodern](https://www.ctan.org/pkg/lm)*** | Latin Modern フォント                                                         |
| [newpxtext](https://www.ctan.org/pkg/newpx)  | Palatino 系フォント / <br> PXfonts は newpxtext と newpxmath に分けられている |
| [newtxtext](https://www.ctan.org/pkg/newtx)  | Times 系フォント / <br> TXfonts は newtxtext と newtxmath に分けられている    |

Computer Modern のままだと少しだけフォントの取り扱いがアレなため、少なくとも以下のようにしておくと良いようだ。

```latex
\usepackage[T1]{fontenc}
\usepackage{lmodern}
```

> [LaTeX の「アレなデフォルト」傾向と対策 - Qiita](https://qiita.com/zr_tex8r/items/297154ca924749e62471#%E3%81%9D%E3%81%AE5ot1%E3%82%A8%E3%83%B3%E3%82%B3%E3%83%BC%E3%83%87%E3%82%A3%E3%83%B3%E3%82%B0%E3%81%8C%E3%82%A2%E3%83%AC)

jlreq クラスを利用すると lmodern はデフォルトで読み込まれるため、これらは必要ないようだ。

### ▽ 脚注と注釈

本文の左右の余白に記載する注釈はマージンノートなどと呼ばれる。

|                       パッケージ                        | 概要                                                                                                                                                                |
| :-----------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| [tablefootnote](https://www.ctan.org/pkg/tablefootnote) | 表内で脚注を使用する                                                                                                                                                |
|      [endnotes](https://www.ctan.org/pkg/endnotes)      | 文章末や章末に脚注を挿入する                                                                                                                                        |
|      [ftnright](https://www.ctan.org/pkg/ftnright)      | 二段組の際に脚注を右側に寄せる                                                                                                                                      |
|      [mparhack](https://www.ctan.org/pkg/mparhack)      | `\marginpar` のバグを修正 / <br> マージンを修正するための [marginfix](https://www.ctan.org/pkg/marginfix) や [marginfit](https://www.ctan.org/pkg/marginfit) もある |
|    [marginnote](https://www.ctan.org/pkg/marginnote)    | `\marginpar` コマンドの用途の広い代替手段の提供                                                                                                                     |
|     [sidenotes](https://www.ctan.org/pkg/sidenotes)     | テキストにこだわらず、図や表なども含めることも出来る                                                                                                                |

TODO のために左右の余白を使う場合には、[todonotes](https://www.ctan.org/pkg/todonotes) や [snaptodo](https://www.ctan.org/pkg/snaptodo)、[zebra-goodies](https://www.ctan.org/pkg/zebra-goodies) を利用すると良い。
LuaLaTeX を使う場合には [luatodonotes](https://www.ctan.org/pkg/luatodonotes) もある。

### ▽ ドラフト

ドラフト段階で使えそうなパッケージに以下のようなものがある。

|                      パッケージ                       | 概要                                                                                                             |
| :---------------------------------------------------: | :--------------------------------------------------------------------------------------------------------------- |
|       [lineno](https://www.ctan.org/pkg/lineno)       | 出力する PDF に行番号を表示させる / <br> 数式環境には上手く対応できない模様                                      |
| [linoamsmath](https://www.ctan.org/pkg/linenoamsmath) | amsmath に対応して、数式環境にも式番号を付与することが出来る                                                     |
|     [showkeys](https://www.ctan.org/pkg/showkeys)     | 相互参照のラベル名を PDF に表示 / <br> 類似パッケージに [showlabels](https://www.ctan.org/pkg/showlabels) がある |
|      [ifdraft](https://www.ctan.org/pkg/ifdraft)      | ドラフトと清書を制御                                                                                             |

### ▽ PDF について

|                  パッケージ                   | 概要                                                                           |
| :-------------------------------------------: | :----------------------------------------------------------------------------- |
| [pdfpages](https://www.ctan.org/pkg/pdfpages) | PDF をページとして直接挿入する / <br> PDF のページを切り貼りするよりも楽になる |
| [BXpdfver](https://www.ctan.org/pkg/bxpdfver) | PDF のバージョンと圧縮レベルを指定 / <br> ごく稀に必要になることがある         |

## ■ リスト環境と定理環境

リスト環境や定理環境はデフォルトでも定義することが出来るが、パッケージを利用した定義の方がカスタマイズしやすい。

|                  パッケージ                   | 概要                                                                                       |
| :-------------------------------------------: | :----------------------------------------------------------------------------------------- |
| [enumitem](https://www.ctan.org/pkg/enumitem) | itemize 環境、enumerate 環境、description 環境をカスタマイズ / <br> 新しいリスト環境の定義 |
|   [amsthm](https://www.ctan.org/pkg/amsthm)   | 定理環境を AMS ライクにカスタマイズ                                                        |
| [ntheorem](https://www.ctan.org/pkg/ntheorem) | 定理環境を高度にカスタマイズ                                                               |

> *cf.*
>
> - [list (LaTeX2e unofficial reference manual (October 2021))](http://latexref.xyz/list.html)
> - [theorem (LaTeX2e unofficial reference manual (October 2021))](http://latexref.xyz/theorem.html)

## ■ 画像と表と浮動体

画像を挿入するには graphicx パッケージを利用すれば良い。
また、表には tabular 環境を利用すれば良いが、これらをサポートするさまざまなパッケージによってカスタマイズすることが出来る。

|                     パッケージ                      | 概要                                                                                                                           |
| :-------------------------------------------------: | :----------------------------------------------------------------------------------------------------------------------------- |
| ***[graphicx](https://www.ctan.org/pkg/graphicx)*** | 画像を挿入する `\includegraphics` を提供 / <br> graphics パッケージの拡張 / <br> 画像は PDF 形式で挿入することが推奨されている |
|       [array](https://www.ctan.org/pkg/array)       | array 環境と tabular 環境の拡張                                                                                                |
|    [booktabs](https://www.ctan.org/pkg/booktabs)    | 表の上部、中、下部に応じた太さの罫線を提供                                                                                     |
|    [arydshln](https://www.ctan.org/pkg/arydshln)    | 破線を引く                                                                                                                     |
|   [longtable](https://www.ctan.org/pkg/longtable)   | ページをまたぐ表の作成                                                                                                         |
|    [multirow](https://www.ctan.org/pkg/multirow)    | セルの縦方向を結合 / <br> 横方向はデフォルトの `\multicolmun` を利用すれば結合できる                                           |
|     [dcolumn](https://www.ctan.org/pkg/dcolumn)     | 縦方向に並べられた数値の小数点 `.` で整列させる / <br> siunitx パッケージによる `S` でも同じことが出来る                       |
|    [colortbl](https://www.ctan.org/pkg/colortbl)    | 表の色付け                                                                                                                     |
|     [diagbox](https://www.ctan.org/pkg/diagbox)     | セル内に斜線を引く / <br> 類似パッケージに [slashbox](https://www.ctan.org/pkg/slashbox) がある                                |

array パッケージや arydshln パッケージは array 環境にも利用することが出来る。

### ▽ 浮動体

一般的な文書では、画像は figure 環境に、表は table 環境に挿入する。これらの環境は浮動体 (floating body) と呼ばれる。

|                    パッケージ                     | 概要                                                                                                                               |
| :-----------------------------------------------: | :--------------------------------------------------------------------------------------------------------------------------------- |
|   ***[float](https://www.ctan.org/pkg/float)***   | 浮動体のカスタマイズや新たな浮動体の定義 / <br> `H` 指定子の提供（[here](https://www.ctan.org/pkg/here) パッケージを吸収している） |
|     [lscape](https://www.ctan.org/pkg/lscape)     | 浮動体を回転 / <br> 類似パッケージに [rotfloat](https://www.ctan.org/pkg/rotfloat) がある                                          |
| [subcaption](https://www.ctan.org/pkg/subcaption) | 表や画像を横並びに / <br> minipage 環境を利用するよりも綺麗にできる                                                                |
|    [wrapfig](https://www.ctan.org/pkg/wrapfig)    | 表や画像の周りに文字を回り込ませる / <br> wrapfigure 環境と wraptable 環境を提供                                                   |
|   [endfloat](https://www.ctan.org/pkg/endfloat)   | 表や画像をドキュメントの最後に移動させる                                                                                           |
|    [caption](https://www.ctan.org/pkg/caption)    | キャプションのカスタマイズ / <br> 浮動体外で利用するためのキャプション `\captionof` を提供                                         |

subcaption パッケージと同様な subfig や subfigure があるが、これらは古いとされている。ただし、互換性はない。

余談だが、特定の場所に画像や表を指定したい場合には浮動体に含めず、そのまま挿入した方が簡単。
そもそも、浮動体は文章から独立し且つページ分割のされないコンテンツを取り扱うための環境なので、特定の場所に配置したい場合には不向き。

## ■ ソースコード

ソースコードの挿入は verbatim 環境を利用せずに、以下のようなパッケージを利用して挿入すると良い。

|                      パッケージ                       | 概要                                                                                                                                                                    |
| :---------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|     [listings](https://www.ctan.org/pkg/listings)     | ソースコードの挿入 / <br> シンタックスハイライトの付与                                                                                                                  |
|                       plistings                       | pLaTeX 上で listings を利用する際に日本語を挿入する / <br> TeX Live とは別にダウンロードする必要がある / <br> :link: https://github.com/h-kitagawa/plistings            |
|                       jlisting                        | pLaTeX 上で listings を利用する際に日本語を挿入する / <br> TeX Live とは別にダウンロードする必要がある / <br> :link: https://osdn.net/projects/mytexpert/releases/p6275 |
|       [minted](https://www.ctan.org/pkg/minted)       | Pygments を利用したソースコードの挿入 / <br> シンタックスハイライトの付与                                                                                               |
|    [PygmenTeX](https://www.ctan.org/pkg/pygmentex)    | Pygments を利用したソースコードの挿入 / <br> シンタックスハイライトの付与                                                                                               |
| [algorithmicx](https://www.ctan.org/pkg/algorithmicx) | 疑似コードの挿入                                                                                                                                                        |

あまり知られていないが listing 内で Unicode を利用するための [listingsutf8](https://www.ctan.org/pkg/listingsutf8) もある。

※ \.bz2 は `$ bzip2 -d [file name].bz2` で解凍できる。

> *cf.*
>
> - [TeX でソースコードを VSCode 風に出力してみた - Qiita](https://qiita.com/pepper_kyaon2/items/183234ec5a51d710cffb)
> - [minted で LaTeX ドキュメントにソースコードを載せる - Qiita](https://qiita.com/float168/items/2884a4d80a54ffa89a34)
> - [algorithmicx を使い LaTeX に擬似コードを追加 - Qiita](https://qiita.com/tomoyk/items/6016123b5c9034bb0087)

~~listings 内に日本語を含む場合の plistings と jlisting ではどちらの方が良いのだろう。~~

ちなみに、LuaLaTeX では LuaTeX-ja によって listings のパッチ (lltjp-listings) を利用することが出来るため、plistings や jlisting は必要ない。

**_2022/02/07 追記_**
~~plistings は日本語の文字色を変更できるのに対し、jlisting は日本語の文字色を変更できない。~~[@pepper_kyaon2 さんにコメント](https://qiita.com/Yarakashi_Kikohshi/items/97f9f920fb23974e0011#comment-b52cc9646c72e1d6c199) で教えていただきました。ありがとうございます :smile:

また、画像を見比べると日本語の文字間隔が少し異なっている。この他にも違いがあると思われる。画像をよく確認すると良いだろう。

**_2022/07/21  追記_**
jlisting であっても、listings を読み込みこむことで plistings と同様の結果を得られる。
どうやら、plistings では listings が自動的に読み込まれるが、jlisting では listings を自動的に読み込まないことが原因のようだ。

|        plistings        |       jlisting        |
| :---------------------: | :-------------------: |
| ![plistings][plistings] | ![jlisting][jlisting] |

[plistings]:https://i.gyazo.com/c467650a45eddc3600377d522f133af0.png

[jlisting]:https://i.gyazo.com/fd1b39316bf6f237d4b7b2021321fb33.png

<details>
<summary> 画像のソース（折りたたみ）</summary>
<div>

[plistings レポジトリの test2.tex](https://github.com/h-kitagawa/plistings/blob/master/test/test2.tex) を一部改変して利用しました。これを pdfcrop でトリミングしています。

```latex
\documentclass[uplatex, dvipdfmx]{jsarticle}
% \usepackage{plistings}
\usepackage{jlisting}
%% jlisting を使う場合、plistings と同様の結果を得るには、以下のように先に listings を読み込めば良い。
%% \usepackage{listings, jlisting}
\usepackage{xcolor}
\usepackage{lmodern}
\usepackage{showexpl}
\lstset{
  language=C, frame=trbl, framesep=5pt,
  commentstyle=\color{green!50!black},
  basicstyle=\ttfamily, basewidth=0.5em,
  keywordstyle=\bfseries\color{blue},
}
\pagestyle{empty}
\begin{document}

\begin{lstlisting}
#define N 6
#define ARSZ 2*N
#define ARY unsigned int
/* 1 次元配列 ARY data[ARSZ] をテーブルだと思う */
/* ARY は 32bit 符号なし整数と仮定。すると各行 1 変数で済む */

/* 読みだし */
inline ARY read(const ARY data[], const int row, const int col) {
  return data[row] & ((ARY)1)<<col;
}
/* 書き込み */
inline void mark(ARY data[], const int row, const int col) {
  data[row] |= ((ARY)1)<<col;
}

unsigned long long counter;
/* 「次に探索」 */
int next_pos_x, next_pos_y;
/* pos_history[i][k] は、i 番の短冊の (k-1) 番目の cell の位置を
    pack(row, col) = (row << 8) + col という 16 ビット整数として管理する。*/
int pos_history[(N*N)<<2];
#define pack(x, y) ((x)<<8)+(y)
\end{lstlisting}

\end{document}
```

</div></details>

## ■ 数式

equnarray 環境、displaymath 環境、`$$` は使わずに、amsmath パッケージから提供された環境を利用すべき。

|                    パッケージ                     | 概要                                                                                                                                                                             |
| :-----------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| ***[amsmath](https://www.ctan.org/pkg/amsmath)*** | 基本的な数式環境を提供                                                                                                                                                           |
|  [mathtools](https://www.ctan.org/pkg/mathtools)  | <ul><li>amsmath パッケージのバグ修正 / 環境の拡張 </li><li> いくつかの有用なコマンドの提供 </li><li>`showonlyrefs` オプションによる相互参照された数式のみの式番号表示 </li></ul> |
|     [empheq](https://www.ctan.org/pkg/empheq)     | amsmath パッケージから提供される環境をさらに拡張                                                                                                                                 |
|  [autobreak](https://www.ctan.org/pkg/autobreak)  | split 環境を拡張するような形で自動折り返しを実現する                                                                                                                             |
|      [breqn](https://www.ctan.org/pkg/breqn)      | 数式の自動折り返しを実現する                                                                                                                                                     |

<!--
<ul>
<li>amsmath パッケージのバグ修正 / 環境の拡張 </li>
<li> いくつかの有用なコマンドの提供 </li>
<li>`showonlyrefs` オプションによる相互参照された数式のみの式番号表示 </li>
</ul>
-->

> *cf.*
>
> - [LaTeX の数式モードをまとめたよ - Qiita](https://qiita.com/Yarakashi_Kikohshi/items/ef693d7abb195c55af7a)
> - [amsmath と mathtools のパッケージオプション - Qiita](https://qiita.com/Yarakashi_Kikohshi/items/c1c33eb67953e291b466)
> - [autobreak を使いこなす - Qiita](https://qiita.com/Yarakashi_Kikohshi/items/098621ab4b4d4f5ce8cc)

### ▽ 数学記号

いくつかの数学記号やフォントを追加したい場合には、以下のようなパッケージを読み込む。

|                     パッケージ                     | 概要                                                                                                                                                                   |
| :------------------------------------------------: | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| ***[amssymb](https://www.ctan.org/pkg/amsfonts)*** | 数学記号やフォントを提供 <ul><li> 数学記号 </li><li> 黒板文字 (`\mathbb`)</li><li> フラクトゥール (`\mathfrak`)</li></ul> amssymb は読み込むと amsfonts も読み込まれる |
|   [mathrsfs](https://www.ctan.org/pkg/mathrsfs)    | 花文字 (`\mathscr`) を提供                                                                                                                                             |
|    [upgreek](https://www.ctan.org/pkg/upgreek)     | 立体のギリシャ文字を提供                                                                                                                                               |
|   [euscript](https://www.ctan.org/pkg/euscript)    | カリグラフィー体と花文字を提供                                                                                                                                         |
|        [bbm](https://www.ctan.org/pkg/bbm)         | 黒板太字を提供 <ul><li> アルファベット大文字小文字 </li><li> アラビア数字の `1` と `2`</li></ul>                                                                       |
|   [mathbbol](https://www.ctan.org/pkg/mathbbol)    | 黒板太字を提供 <ul><li> アルファベット大文字・小文字 </li><li> アラビア数字 </li><li> ギリシャ文字大文字・小文字 </li></ul>                                            |
|      [esint](https://www.ctan.org/pkg/esint)       | さまざまなスタイルの積分記号を提供                                                                                                                                     |
|    [wasysym](https://www.ctan.org/pkg/wasysym)     | 男性、女性の記号や惑星記号を提供 / <br> ただし、地球を表す丸十字 `🜨` は含まれていない（mathabx を利用すれば良いかもしれない）                                          |

<!--
<ul>
<li> 数学記号 </li>
<li> 黒板文字 (`\mathbb`)</li>
<li> フラクトゥール (`\mathfrak`)</li>
</ul>
-->

<!--
<ul>
<li> アルファベット大文字小文字 </li>
<li> アラビア数字の `1` と `2`</li>
</ul>
-->

<!--
<ul>
<li> アルファベット大文字小文字 </li>
<li> アラビア数字 </li>
<li> ギリシャ文字大文字小文字 </li>
</ul>
-->

> *cf.*
>
> - [黒板文字を使いたい \- Gist](https://gist.github.com/Yarakashi-Kikohshi/cf19ee163ff426196d7494b81339c3cf)
> - [[TeX] [LaTeX] LaTeX の数式でイイ感じに惑星記号を使う [mathabx] - East Opera 2021](http://circle9tym.blog.fc2.com/blog-entry-378.html)

PXfonts や TXfonts 等に変更している場合には追加する必要がないものもあるため注意が必要。

### ▽ 数学フォント

筆者はデフォルトの Computer Modern で満足しているので特段変更したことはないが、以下のような数学フォントが有名だと思われる。
上 3 つはかなり有名。

|                      パッケージ                       | 概要                                                                                                                                                      |
| :---------------------------------------------------: | :-------------------------------------------------------------------------------------------------------------------------------------------------------- |
|      [newpxmath](https://www.ctan.org/pkg/newpx)      | Palatino 系フォント / <br> PXfonts は newpxtext と newpxmath に分けられている                                                                             |
|      [newtxmath](https://www.ctan.org/pkg/newtx)      | Times 系フォント / <br> TXfonts は newtxtext と newtxmath に分けられている                                                                                |
|      [eulervm](https://www.ctan.org/pkg/eulervm)      | オイラーフォント                                                                                                                                          |
|    [STIX2 OTF](https://www.ctan.org/pkg/stix2-otf)    | STIX フォント（[stix](https://www.ctan.org/pkg/stix) は廃止されている）/ <br> 類似パッケージに [STIX2-Type1](https://www.ctan.org/pkg/stix2-type1) がある |
|         [XITS](https://www.ctan.org/pkg/xits)         | 理系のための Times 系の数学フォント                                                                                                                       |
|      [mathabx](https://www.ctan.org/pkg/mathabx)      | Computer Modern と AMS fonts の上位互換を目指したフォント                                                                                                 |
|     [mathpazo](https://www.ctan.org/pkg/mathpazo)     | Palatino 系フォント                                                                                                                                       |
| [unicode-math](https://www.ctan.org/pkg/unicode-math) | fontspec の数式フォント版 / <br> LuaLaTeX と XeLaTeX のみに対応している                                                                                   |

特に `:=` などの文字は mathtools から提供されなくとも、これらのフォントパッケージからも提供されていることがある。注意深くパッケージガイドを確認しておきたい。

また、beamer でスライドを作成する際には数式フォントはサンセリフ体になるが、これらにもさまざまなパッケージがある。
あまり詳しくないため、適当に列挙するのみに留めておく。

- [arev](https://www.ctan.org/pkg/arev)
- [cmbright](https://www.ctan.org/pkg/cmbright)
- [firamath](https://www.ctan.org/pkg/firamath)
- [helvet](https://www.ctan.org/pkg/helvet)
- [iwona](https://www.ctan.org/pkg/iwona)
- [newtxsf](https://www.ctan.org/pkg/newtxsf)
- [notomath](https://www.ctan.org/pkg/notomath)
- [sansmath](https://www.ctan.org/pkg/sansmath)

### ▽ 数学記法

さまざまな数学記法を簡略的にすることが出来る。

|                      パッケージ                       | 概要                                                                                                                                                                                                                                                                                                                               |
| :---------------------------------------------------: | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|   [mleftright](https://www.ctan.org/pkg/mleftright)   | `\left` \~`\right` で調整された括弧の左右の空白を調整した `\mleft` \~`\mright` を提供 / <br> `\mleftright` によって `\left` \~`\right` に再定義することも可能                                                                                                                                                                      |
|    [diffcoeff](https://www.ctan.org/pkg/diffcoeff)    | 微分記法を提供 / <br> 類似パッケージとして [derivative](https://www.ctan.org/pkg/derivative) などもある                                                                                                                                                                                                                            |
|       [esvect](https://www.ctan.org/pkg/esvect)       | 矢線ベクトル表記のバリエーションを提供 / <br> 下付き文字のためのコマンドを提供                                                                                                                                                                                                                                                     |
|           [bm](https://www.ctan.org/pkg/bm)           | ベクトルなどで利用する太字斜体用コマンド `\bm` を提供 / <br> amsmath から提供される `\boldsymbol` よりも一般的で堅牢な実装となっているらしい                                                                                                                                                                                       |
|   [nicematrix](https://www.ctan.org/pkg/nicematrix)   | PGF を利用し自由度の高い行列を表現できる <ul><li> 長い省略のためのドット </li><li> 行列内に線を引く </li><li> 行と列にラベルを付ける </li><li> 部分行列を挿入する </li><li> 色付けや行列要素を囲むなどのマークアップ </li></ul> 行列環境の他、表に関する NiceTabular 環境も提供している                                            |
|       [tensor](https://www.ctan.org/pkg/tensor)       | テンソル表記のためのコマンドを提供                                                                                                                                                                                                                                                                                                 |
|       [braket](https://www.ctan.org/pkg/braket)       | Dirac の bra-ket 記法のためのコマンドを提供 / <br> 集合論における内包的記法のためのコマンドを提供                                                                                                                                                                                                                                  |
|      [slashed](https://www.ctan.org/pkg/slashed)      | Feynman のスラッシュ記法のためのコマンドを提供 / <br> 類似パッケージに [centernot](https://www.ctan.org/pkg/centernot) がある（これの方が汎用性が高いかも）                                                                                                                                                                        |
|      [accents](https://www.ctan.org/pkg/accents)      | 数学記号に複数のアクセントをつける                                                                                                                                                                                                                                                                                                 |
|       [cancel](https://www.ctan.org/pkg/cancel)       | 取り消しの斜線を引く                                                                                                                                                                                                                                                                                                               |
|    ~~[physics](https://www.ctan.org/pkg/physics)~~    | ~~xparse パッケージを利用して次のような簡易記法を提供 <ul><li> 高さが自動調整される括弧 </li><li> ベクトル記法 </li><li> いくつかの作用素（`\sin` などには続けて高さが自動調整される括弧を与えられる）</li><li> 挿入テキストの簡易コマンド </li><li> 微分記法 </li><li>Dirac の bra-ket 記法 </li><li> 行列の簡易記法 </li></ul>~~ |
|     [physics2](https://www.ctan.org/pkg/physics2)     | physics パッケージの代替 / <br> physics パッケージの問題が解消されている <ul><li>高さが自動調整される括弧</li><li> Dirac の bra-ket 記法</li><li>行列の簡易記法</li></ul>                                                                                                                                                          |
|     [SemanTeX](https://www.ctan.org/pkg/SemanTeX)     | 意味論を重視した数式の表現                                                                                                                                                                                                                                                                                                         |

<!--
<ul>
<li> 高さが自動調整される括弧 </li>
<li> ベクトル記法 </li>
<li> いくつかの作用素 (`\sin` などには続けて高さが自動調整される括弧を与えられる)</li>
<li> 挿入テキストの簡易コマンド </li>
<li> 微分記法 </li>
<li>Dirac の bra-ket 記法 </li>
<li> 行列の簡易記法 </li>
</ul>
-->

<!--
<ul>
<li> 長い省略のためのドット </li>
<li> 行列内に線を引く </li>
<li> 行と列にラベルを付ける </li>
<li> 部分行列を挿入する </li>
<li> 色付けや行列要素を囲むなどのマークアップ </li>
</ul>
-->

より自然な記法を目的とした [nath](https://www.ctan.org/pkg/nath) や自動的に記号のスタイルを変更する [smart-eqn](https://www.ctan.org/pkg/smart-eqn) などもあるが、実用に耐えるのか分からない。

> *cf.*
>
> - [数式をもっと楽に書ける TeX の physics パッケージまとめ - Qiita](https://qiita.com/HelloRusk/items/ce9f49e9b3fc0344ae23)
> - [LaTeX：esvect パッケージによる矢線ベクトル表記 - Qiita](https://qiita.com/ryutaatkagawanct/items/0830df487bcaf95f4f9d)
> - [diffcoeff パッケージのすゝめ - Qiita](https://qiita.com/Ishotihadus/items/8880bdfdc2525873ca63)
> - [unicode-mathとかdiffcoeffとか - Qiita](https://qiita.com/Niccori250km/items/af798fe64419adfc3877)
> - [徹底解説！ unicode-mathパッケージでココが変わる - Qiita](https://qiita.com/zr_tex8r/items/648b024e55126f3ba077)

<!-- physics パッケージは名前に依らず数学を扱う文書を作成するならば非常に有用である。 -->
<!-- 高さが自動調整される括弧のためのコマンドはかなり使い勝手がよく、Dirac の bra-ket 記法は braket パッケージよりも physics パッケージの方が機能的だと思われる。 -->

<!-- しかしながら、各個人で xparse パッケージを利用して定義することが出来るのであれば、必要ないあるいは手に余るパッケージのように感じることもある。（頑張れば xparse パッケージを使って自分で作ることも出来る） -->
<!-- また、xparse パッケージでは `g` オプションを使用しないように推奨していたが、physics パッケージでは利用している。 -->
<!-- 加えて、微分記法に関しては diffcoeff パッケージの方が圧倒的に便利と思われる。 -->
<!-- 
physics パッケージは有用である一方で、いくつかの問題をはらんでいる。以下を参照してほしい。

> [macros - Alternatives to the physics package - TeX - LaTeX Stack Exchange](https://tex.stackexchange.com/questions/471532/alternatives-to-the-physics-package)
-->
<!-- > *cf.* [physics パッケージを自分好みに \- Gist](https://gist.github.com/Yarakashi-Kikohshi/1234154314d2d1afdee8df8d3bcaa33c) -->

physics パッケージの問題点と、その代替パッケージととなりうる physics2 パッケージについては以下の記事を参照してください。

https://qiita.com/Yarakashi_Kikohshi/items/131e2324f401c3effb84


## ■ 多言語

多言語文書を作成するためのパッケージ。

<!-- 各言語にはそれぞれの組版の規則がある。1 つの文書内でそれぞれの言語の規則に対応できるようになるらしい。 -->


|                     パッケージ                      | 概要                                              |
| :-------------------------------------------------: | :------------------------------------------------ |
|       [babel](https://www.ctan.org/pkg/babel)       | 多言語文書を作成する                              |
| [polyglossia](https://www.ctan.org/pkg/polyglossia) | LuaLaTeX と XeLaTeX のための babel 代替パッケージ |

利用したことはないので分からないが、おそらくロゼッタストーン <sup>[Wikipedia][wiki-babel]</sup> を書くことが出来る。

[wiki-babel]: https://ja.wikipedia.org/wiki/%E3%83%AD%E3%82%BC%E3%83%83%E3%82%BF%E3%83%BB%E3%82%B9%E3%83%88%E3%83%BC%E3%83%B3



> [Babel - TeX Wiki](https://texwiki.texjp.org/?Babel)

## ■ 相互参照

相互参照に関するいくつかのパッケージ。

|                     パッケージ                      | 概要                                                                                                                                                                                                                                                                                                                                                                                                                                                      |
| :-------------------------------------------------: | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| ***[hyperref](https://www.ctan.org/pkg/hyperref)*** | ハイパーリンクを埋め込む / <br> URL を挿入したい場合には `\url` や `\nolinkurl` を利用すると良い                                                                                                                                                                                                                                                                                                                                                          |
|   [prettyref](https://www.ctan.org/pkg/prettyref)   | `\prettyref{format:name}` とすることで相互参照の種類を識別する                                                                                                                                                                                                                                                                                                                                                                                            |
|    [cleveref](https://www.ctan.org/pkg/cleveref)    | 相互参照をより簡単にする / <br> mathtools の `showonlyrefs` オプションとの併用が出来ない                                                                                                                                                                                                                                                                                                                                                                  |
|     [autonum](https://www.ctan.org/pkg/autonum)     | 参照している数式のみに式番号を付与する / <br> よく cleveref の利用時に利用される / <br> 対応している数式環境は amsmath から提供されているものに限る                                                                                                                                                                                                                                                                                                       |
|          [xr](https://www.ctan.org/pkg/xr)          | ファイルをまたぐ相互参照を可能に                                                                                                                                                                                                                                                                                                                                                                                                                          |
|       [xr-hyper](https://www.ctan.org/pkg/xr)       | xr パッケージにハイパーリンクの埋め込みを追加                                                                                                                                                                                                                                                                                                                                                                                                             |
|        [zref](https://www.ctan.org/pkg/zref)        | 新たな相互参照システムを提供 / <br> 11 のモジュールが提供されている <div style="padding: 10px; margin-bottom: 10px; border: 1px dashed #333333;"><code>zref-user</code>, <code>zref-abspage</code>, <code>zref-lastpage</code>, <code>zref-nextpage</code>, <code>zref-totpages</code>, <code>zref-pagelayout</code>, <code>zref-perpage</code>, <code>zref-titleref</code>, <code>zref-dotfill</code>, <code>zref-env</code>, <code>zref-xr</code></div> |
|  [zref-check](https://www.ctan.org/pkg/zref-check)  | zref を利用した柔軟な相互参照のインターフェースを提供                                                                                                                                                                                                                                                                                                                                                                                                     |
| [zref-clever](https://www.ctan.org/pkg/zref-clever) | zref を利用した cleveref に似た賢い相互参照の提供                                                                                                                                                                                                                                                                                                                                                                                                         |

<!--
<ul>
<li><code>zref-user</code></li>
<li><code>zref-abspage</code></li>
<li><code>zref-lastpage</code></li>
<li><code>zref-nextpage</code></li>
<li><code>zref-totpages</code></li>
<li><code>zref-pagelayout</code></li>
<li><code>zref-perpage</code></li>
<li><code>zref-titleref</code></li>
<li><code>zref-dotfill</code></li>
<li><code>zref-env</code></li>
<li><code>zref-xr</code></li>
</ul>
-->


> *cf.*
>
> - [cleveref で賢く参照する - Qiita](https://qiita.com/wktkshn/items/110cd6007837938e6c88)
> - [にっき♪: xr パッケージ](http://abenori.blogspot.com/2017/03/xr.html)
> - [Cross referencing with the xr package in Overleaf - Overleaf, オンライン LaTeX エディター](https://ja.overleaf.com/learn/how-to/Cross_referencing_with_the_xr_package_in_Overleaf)

これと同じような実装として次のような記事も見つけることが出来た。

- [参照をいい感じにしつつ TeX ファイル分割 - Qiita](https://qiita.com/yjjtw/items/575d6528bb799b93d010)
- [参照を良い感じにしつつ TeX ファイル分割 (2) - Qiita](https://qiita.com/yjjtw/items/03d7b73ca0bbcf98ef5d)

<!-- 個人的に相互参照に関連するパッケージは何かを立てると一方は立たなくなる。すべてを上手く動作させるようにするには不可能な場合が多いように感じる。
それぞれで必要な機能のみが動作する環境を模索する必要がある。 -->

## ■ 文献リスト

文献リストは BibTeX を利用すると比較的簡単に作成できる。

|                  パッケージ                   | 概要                                                                                                                                                                                                                                                 |
| :-------------------------------------------: | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|   [natbib](https://www.ctan.org/pkg/natbib)   | `\cite` のスタイルをカスタマイズ                                                                                                                                                                                                                     |
| [multibib](https://www.ctan.org/pkg/multibib) | 複数の文献リストを作成                                                                                                                                                                                                                               |
| [biblatex](https://www.ctan.org/pkg/biblatex) | natbib や multibib のような機能を一手に引き受けることが出来る <ul><li> 処理には Unicode 対応した biber を利用（BibTeX ではない）</li><li> 文献リストのスタイル </li><li>`\cite` のスタイルをカスタマイズ </li><li> 複数の文献リストを作成 </li></ul> |

<!--
<ul>
<li> 処理には Unicode 対応した biber を利用 (BibTeX ではない)</li>
<li> 文献リストのスタイル </li>
<li>`\cite` のスタイルをカスタマイズ </li>
<li> 複数の文献リストを作成 </li>
</ul>
-->

> *cf.*
>
> - [biblatex のオプションの解説 - Qiita](https://qiita.com/shiro_takeda/items/fac1351495f32c224a28)
> - [初心者のための BibTeX とは \- Gist](https://gist.github.com/Yarakashi-Kikohshi/986bb23547866e32c8916b81099a470a)

## ■ お絵描きとグラフ

絵を描いたりグラフを描いたりも出来る。

|                    パッケージ                     | 概要                                                                      |
| :-----------------------------------------------: | :------------------------------------------------------------------------ |
|     [TikZ/PGF](https://www.ctan.org/pkg/tikz)     | グラフや図形を描く / <br> TikZ では多くあるライブラリを利用する           |
|  [tcolorbox](https://www.ctan.org/pkg/tcolorbox)  | PGF を利用して色付けた枠を作成                                            |
| [gnuplottex](https://www.ctan.org/pkg/gnuplottex) | gnuplot を利用してグラフを作成する                                        |
|                 gnuplot-lua-tikz                  | gnuplot を利用してグラフを作成する / <br> sty ファイルは gnuplot から導入 |

> *cf.*
>
> - [論文やプレゼンテーションで使えるグラフを gnuplottex と tikz で描く。 \- Qiita](https://qiita.com/satl/items/0c11c8808b43f806ee21)
> - [Gnuplot で LaTex 用の綺麗なグラフを作成する \- mano.xyz](https://mano.xyz/post/2017-03-22-gnuplot-latex-graph/)

tcolorbox は PGF を利用した枠を組むことが出来るが、これはかなり多岐にわたる。ドキュメントも TikZ/PGF と負けず劣らずのページ数を誇っている。
カスタマイズ性が高いことに起因するドキュメント量だが、tcolorbox さえあれば書けない枠はないと思わせられるほどさまざまなスタイルの枠を作ることが出来る。同様のパッケージに [mdframed](https://www.ctan.org/pkg/mdframed) などもあるが、これらの比にならないだろう。

> tcolorbox に関する記事
>
> - [tcolorbox の基本 - 物理と TeX に関する話題](https://texmedicine.hatenadiary.jp/entry/2015/12/17/000339)
> - [tcolorbox を利用した表作成 - 物理と TeX に関する話題](https://texmedicine.hatenadiary.jp/entry/2016/08/21/231741)
> - [tcolorbox のお誘い - ぱるちのものおき 2.0](https://marukunalufd0123.hatenablog.com/entry/2019/03/15/071717)
> - [LaTeX の定理環境に囲みを付けたい - Qiita](https://qiita.com/rityo_math/items/5ef248024b294d72799a)
> - [LaTeX の数式を映えさせる - Qiita](https://qiita.com/t_kemmochi/items/483b8fcdb5db8d1f5d5e)
> - [tcolorbox でスライドを作る - Qiita](https://qiita.com/t_kemmochi/items/75eabd5e2437e0483605)

もはや文章中の枠を作るという枠組みを超えて、表やスライドまで作成できてしまう。ここにはないが、listings などと連携して tcolorbox 内にソースコードを挿入することも出来る。

また、tcolorbox を利用してピカチュウを模したものを作っている人もいる。

> [tcolorbox でピカチュウフレーム - hohei’s diary](https://hohei3108.hatenablog.com/entry/2017/09/23/165454)

### ▽ TikZ/PGF について

PGF は "Portable Graphics Format" の略、TikZ は "TikZ ist kein Zeichenprogramm" の略。
TikZ を利用することで TeX から直接ベクター画像を作成することが出来る。これは LaTeX から提供されている picture 環境よりも高度に記述することが出来る。

> *cf.* [TikZ - TeX Wiki](https://texwiki.texjp.org/?TikZ)

TikZ & PGF のマニュアルは、広大な大魔境となっている。前半のチュートリアルは良いかもしれない。ある程度 TikZ が使えるようになってから読むと良いだろう。
したがって、TikZ の基本的な使い方は以下のような記事を参照して学習すると良いだろう。

> [LaTeX で図を直接描ける TikZ の使い方 1 \| 基本的な描線](https://math-note.xyz/latex/tikz/tikz-line/)

また、TikZ/PGF の機能を絞ったパッケージは多数存在する。
以下の記事ではこれらの機能を絞ったパッケージを紹介しているので、参照すると良いだろう。

> [私家版：PGF/TikZ を利用したパッケージ一覧 - Qiita](https://qiita.com/ryutaatkagawanct/items/271903006826474d843a)

tcolorbox パッケージはこのような TikZ の機能を絞ったパッケージの 1 つになる。

## ■ 新しい環境やコマンドの定義

新しい環境やコマンドを定義する場合、`\newenvironment` や `\newcommand` を利用する。しかしながら、これらによる定義では表現に限界がある。
次のようなパッケージを利用することでより表現の広い定義をすることが出来るようになる。

また、使っていないつもりでも、これらのパッケージを利用して作成されているパッケージも多い。

|                  パッケージ                   | 概要                                                                                                                    |
| :-------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------- |
|   [xparse](https://www.ctan.org/pkg/xparse)   | オプション引数付きのコマンドを定義                                                                                      |
|   [ifthen](https://www.ctan.org/pkg/ifthen)   | 条件分岐と反復処理を可能に                                                                                              |
|  [xkeyval](https://www.ctan.org/pkg/xkeyval)  | key-value 形式によるコマンドの定義を可能に / <br> 類似パッケージに [l3keys2e](https://www.ctan.org/pkg/l3keys2e) がある |
| [etoolbox](https://www.ctan.org/pkg/etoolbox) | 様々なツールを提供                                                                                                      |
|     [calc](https://www.ctan.org/pkg/calc)     | レイアウトなどのコマンドに演算を行うことが出来る                                                                        |

> *cf.*
>
> - [xparse パッケージでスゴイ LaTeX マクロを作ろう！ - Qiita](https://qiita.com/zr_tex8r/items/50168ad7087516c3e139)
> - [LaTeX で条件分岐や反復処理：ifthen パッケージのキホン - Qiita](https://qiita.com/zr_tex8r/items/71ae46c9c4e8cb575073)
> - [LaTeX で key-value リストを活用する：xkeyval パッケージ - Qiita](https://qiita.com/wtsnjp/items/92720fac07d5dc366f10)

xparse と ifthen を利用して時間微分と空間微分のコマンドを作成した例を紹介しておく。
`\newcommand` では出来ないオプション引数を利用できるので、定義するコマンドの幅が広がる。

https://qiita.com/Yarakashi_Kikohshi/items/c5873f2b25219829b68f

ちなみに、新たにパッケージやドキュメントクラスを作成する場合には、[expl3](https://www.ctan.org/pkg/expl3) を利用すると良いようだ。

## ■ ファイル分割

ファイルを分割して親ファイルで子ファイルを読み込むには、子ファイルを `\input` や `\include` すれば良いが、このときの子ファイルにはプリアンブルを挿入することが出来ない。
そのため、子ファイルの個別のタイプセットが不可能になっている。これを解消することが出来る。

|                    パッケージ                     | 概要                                                                                 |
| :-----------------------------------------------: | :----------------------------------------------------------------------------------- |
|    [docmute](https://www.ctan.org/pkg/docmute)    | もっともシンプルなファイル分割                                                       |
|   [subfiles](https://www.ctan.org/pkg/subfiles)   | プリアンブルを共有したファイル分割                                                   |
| [standalone](https://www.ctan.org/pkg/standalone) | 表や TikZ などの分割 / <br> standalone クラスは余白のない PDF を作るために使われがち |

> *cf.*
>
> - [分割 TeX ファイルを docmute を用いて単体/統合コンパイルする - Qiita](https://qiita.com/Yarakashi_Kikohshi/items/b3a84f23022393208aab)
> - [分割した LaTeX ファイルを subfiles を使ってコンパイルする - Qiita](https://qiita.com/sankichi92/items/1e113fcf6cc045eb64f7)
> - [LaTeX de 余白のない PDF を作って画像に変換 (1) - Qiita](https://qiita.com/Yarakashi_Kikohshi/items/8a46d2d16cf770b0259e)

standalone では文書そのものではなく、表や TikZ などのコンテンツを分割することを目的としている。
本来あるべき使い方を記述するような記事を見つけることは出来なかった。

また、これらのパッケージを利用せずに分割する方法もある。

> [効率的な LaTeX ファイル分割術 - Qiita](https://qiita.com/wtsnjp/items/6ba3b8e12514d8a3bd41)

## ■ 絵文字

|                  パッケージ                   | 概要                                                                                                                                                                                                                                                   |
| :-------------------------------------------: | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| [twemojis](https://www.ctan.org/pkg/twemojis) | twemoji を利用することが出来る / <br> [byo-twemojis](https://www.ctan.org/pkg/byo-twemojis) から絵文字を作成することも出来る                                                                                                                           |
|                 BXcoloremoji                  | カラーの絵文字を使う / <br> TeX Live などとは別途にダウンロードが必要 / <br> :link: https://github.com/zr-tex8r/BXcoloremoji / <br> 類似パッケージに [emoji](https://www.ctan.org/pkg/emoji)、[coloremoji](https://www.ctan.org/pkg/coloremoji) がある |
|    [emoji](https://www.ctan.org/pkg/emoji)    | LuaLaTeX 用の emoji                                                                                                                                                                                                                                    |
|      [emo](https://www.ctan.org/pkg/emo)      | カラーの絵文字                                                                                                                                                                                                                                         |

## ■ その他

特定の分野に専門的な人が使いそうなパッケージたち。

|                         パッケージ                          | 概要                                                                                                                                                                                                                                                                                                        |
| :---------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|         [askmaps](https://www.ctan.org/pkg/askmaps)         | カルノー図を描く                                                                                                                                                                                                                                                                                            |
|         [tikz-cd](https://www.ctan.org/pkg/tikz-cd)         | TikZ で可換図式を描く / <br> 簡単な可換図式であれば amsmath の CD 環境でも描ける / <br> 類似パッケージに [commutative-diagrams](https://www.ctan.org/pkg/commutative-diagrams) がある                                                                                                                       |
|         [siunitx](https://www.ctan.org/pkg/siunitx)         | 単位を立体文字で書く / <br> dcolumn パッケージに似た小数点を揃えた表を作成することも出来る                                                                                                                                                                                                                  |
|         [causets](https://www.ctan.org/pkg/causets)         | 因果集合 (causal sets) や Hasse 図を描く                                                                                                                                                                                                                                                                    |
|    [tikz-feynman](https://www.ctan.org/pkg/tikz-feynman)    | TikZ で Feynman ダイアグラムを描く / <br> ローエンド版の [TikZ-FeynHand](https://www.ctan.org/pkg/tikz-feynhand) もある                                                                                                                                                                                     |
|    [simpler-wick](https://www.ctan.org/pkg/simpler-wick)    | Wick の縮約記法を提供                                                                                                                                                                                                                                                                                       |
|          [mhcem](https://www.ctan.org/pkg/mhchem)           | H<sub>2</sub>O などの化学記号を書く / <br> 化学反応式なども書くことが出来る                                                                                                                                                                                                                                 |
|         [chemfig](https://www.ctan.org/pkg/chemfig)         | TikZ を利用して構造式を描く                                                                                                                                                                                                                                                                                 |
|          [lipsum](https://www.ctan.org/pkg/lipsum)          | 英文用のダミーテキスト / <br> QA サイトで質問する際によく使われている印象                                                                                                                                                                                                                                   |
|      [BXjalipsum](https://www.ctan.org/pkg/bxjalipsum)      | 和文用のダミーテキスト                                                                                                                                                                                                                                                                                      |
|       [PythonTeX](https://www.ctan.org/pkg/pythontex)       | TeX ファイル内でコードを実行する / <br> 対応している言語は次のものである <div style="padding: 10px; margin-bottom: 10px; border: 1px dashed #333333;">Bash, JavaScript, Julia, Octave, Perl, Python, R, Raku (Perl 6), Ruby, Rust</div> 類似パッケージに [runcode](https://www.ctan.org/pkg/runcode) がある |
|    [longdivision](https://www.ctan.org/pkg/longdivision)    | 筆算による割り算の途中式を含めた計算結果を記述することが出来る / <br> 途中で止めることも可能                                                                                                                                                                                                                |
|      [witharrows](https://www.ctan.org/pkg/witharrows)      | align 環境等で下に続く数式の右側に式変形などの説明を付した矢印を描く                                                                                                                                                                                                                                        |
|         [systeme](https://www.ctan.org/pkg/systeme)         | 連立方程式において、変数ごとに整列 / <br> ドキュメントはフランス語のみ                                                                                                                                                                                                                                      |
|          [eqexpl](https://www.ctan.org/pkg/eqexpl)          | 変数の一覧を書く / <br> MakeIndex を利用した [nomencl](https://www.ctan.org/pkg/nomencl) もある                                                                                                                                                                                                             |
|        [numerica](https://www.ctan.org/pkg/numerica)        | 計算式とともに数値計算の結果を表示                                                                                                                                                                                                                                                                          |
| [numerica-tables](https://www.ctan.org/pkg/numerica-tables) | 数表を自動的に作成 / <br> 対数表や三角関数表を自動的に作成できる                                                                                                                                                                                                                                            |
|         [cascade](https://www.ctan.org/pkg/cascade)         | 推論                                                                                                                                                                                                                                                                                                        |
|         [termsim](https://www.ctan.org/pkg/termsim)         | 各 OS の代表的なターミナルを tcolorbox で再現                                                                                                                                                                                                                                                               |
|          [sankey](https://www.ctan.org/pkg/sankey)          | 工程の流量を表現する sankey 図を描く                                                                                                                                                                                                                                                                        |
|          [gitver](https://www.ctan.org/pkg/gitver)          | Git のバージョンタグを PDF に出力                                                                                                                                                                                                                                                                           |
|                             ceo                             | 「大学への数学」などで使われているフォントとマクロ集 / <br> TeX Live などとは別途にダウンロードが必要 / <br> :link: http://hocsom.com/links.html                                                                                                                                                            |
|                            emath                            | tDB こと大熊一弘が開発した LaTeX 上で使う初等数学プリント作成マクロ集 / <br> TeX Live などとは別途にダウンロードする必要がある / <br> :link: http://emath.s40.xrea.com                                                                                                                                      |

他にも、[dynkin-diagrams](https://www.ctan.org/pkg/dynkin-diagrams) で Dynkin 図形を描いたり、[braids](https://www.ctan.org/pkg/braids) で組み紐の模式図を描いたりすることが出来る。

> *cf.*
>
> - [LaTeX: 化学に関わる記号と式 (mhchem)](http://www.yamamo10.jp/yamamoto/comp/latex/make_doc/chemistry/index.php)
> - [chemfig パッケージによる構造式描画 \- TeX Alchemist Online](https://doratex.hatenablog.jp/entry/20141212/1418393703)
> - [天地有情 [LaTeX] askmaps --- カルノー図を描く](https://konoyonohana.blog.fc2.com/blog-entry-462.html)
> - [LaTeX で Feynman 図を描画する:TikZ-FyenHand \- Qiita](https://qiita.com/hermite2053/items/2209741ce7709dcc1c21)

PythonTeX ではさまざまなスクリプトを実行することが出来るようになっている。その中には R も含まれている。R Markdown を利用して LaTeX 経由で PDF に変換するよりも、TeX ファイル内で R を実行出来た方が楽なようにも思われるが、どうなのだろうか。（Markdown ですぐに見ることが出来ると利便性が高いのかしら）

各 OS の代表的なターミナルを模した termsim パッケージがあるなら、Twitter のツイート表示を模したパッケージが出てきても良さそう（妄言）

## ■ 有用なツール

パッケージの他に、LaTeX ではさまざまなツールが開発されている。

|                         ツール                          | 概要                                                                                                                     | Repository                                                                              |
| :-----------------------------------------------------: | :----------------------------------------------------------------------------------------------------------------------- | :-------------------------------------------------------------------------------------- |
|   [latexindent](https://www.ctan.org/pkg/latexindent)   | formatter / <br> tabular 環境などの整形                                                                                  | [cmhughes/latexindent.pl \- GitHub](https://github.com/cmhughes/latexindent.pl)         |
|        [chktex](https://www.ctan.org/pkg/chktex)        | LaTeX の構文を静的解析                                                                                                   | [sharelatex/chktex \- GitHub](https://github.com/sharelatex/chktex)                     |
|       [lacheck](https://www.ctan.org/pkg/lacheck)       | LaTeX の構文を静的解析                                                                                                   | [mitchmoser/LACheck \- GitHub](https://github.com/mitchmoser/LACheck)                   |
|       [latexdiff](https://ctan.org/pkg/latexdiff)       | 2 つのファイルの差分をマークアップ / <br> 差分 TeX ファイルは PDF にできる                                               | [ftilmann/latexdiff \- GitHub](https://github.com/ftilmann/latexdiff/)                  |
| [git-latexdiff](https://www.ctan.org/pkg/git-latexdiff) | Git による差分をマークアップ / <br> 差分 TeX ファイルは PDF にできる                                                     | [git-latexdiff/Git Latexdiff \- GitLab](https://gitlab.com/git-latexdiff/git-latexdiff) |
|       [latexpand](https://ctan.org/pkg/latexpand)       | 分割したファイルの統合                                                                                                   | [latexpand/Latexpand \- GitLab](https://gitlab.com/latexpand/latexpand)                 |
|      [TeXcount](https://www.ctan.org/pkg/texcount)      | TeX ファイル内に含まれる単語数をカウントする / <br> ガイドを見ると Japanese オプションから日本語のカウントも可能のようだ | https://app.uio.no/ifi/texcount/                                                        |

> *cf.*
> [latexindent の使い方 \- Gist](https://gist.github.com/Yarakashi-Kikohshi/8c39707f83ba73b3bce73c54638ac594)

# 余談

本記事で 180 程度のパッケージを紹介しているらしい。（それでも全体の約 3% しかない）
さすがにありすぎる。把握しきれない。

この他にも [igo](https://www.ctan.org/pkg/igo) や [chessboard](https://www.ctan.org/pkg/chessboard)、[crossword](https://www.ctan.org/pkg/crossword) や [sudoku](https://www.ctan.org/pkg/sudoku) でボードゲーム、パズルを記述できる。また、[coffee stains](https://www.ctan.org/pkg/coffeestains) でコーヒーでできた染みを作ることも出来る。
ハロウィンには [halloweenmath](https://www.ctan.org/pkg/halloweenmath) でハロウィン :jack_o_lantern: な数式を出力できるし、雪の日には [scsnowman](https://www.ctan.org/pkg/scsnowman) で雪だるま :snowman: を作れるし、いつでも [bearwear](https://www.ctan.org/pkg/bearwear) でテディベア :bear: の着せ替えで遊ぶことも [randomwalk](https://www.ctan.org/pkg/randomwalk) でランダムウォークすることも出来る。なんだってできちゃうすごい！

LaTeX で困ったことがあれば一度パッケージを探してみると良いだろう。まだまだパッケージは眠っているので、時間があるときに CTAN の森でさまよってみてはどうだろうか。

他に、オススメのパッケージが紹介されているページは次ようなものもある。

- [CTAN: Package docsurvey](https://www.ctan.org/pkg/docsurvey) [PDF]

    > 特に <q>Useful classes, packages, and programs</q> を参照

- [Documentation - Overleaf, Online LaTeX Editor](https://www.overleaf.com/learn)

    > Overleaf のドキュメント（~~残念なことに~~日本語によるドキュメントは展開されていない）

## トピックから探す

CTAN では各パッケージにトピックがタグ付けのようにされており、これを元に同じようなパッケージを探すことが出来る。

一部例を示しておく。

- [Topics List \- CTAN](https://www.ctan.org/topics/highscore)
    - [Maths](https://www.ctan.org/topic/maths)
    - [Physics](https://www.ctan.org/topic/physics)
    - [Chemistry](https://www.ctan.org/topic/chemistry)
    - [PGF TikZ](https://www.ctan.org/topic/pgf-tikz)
    - [Subdocs](https://www.ctan.org/topic/subdocs)
    - [Diagrams](https://www.ctan.org/topic/diagram)
    - [Circuit Diagram](https://www.ctan.org/topic/diagram-circ)

例えば、回路図を描きたい場合には Circuit Diagram を参照すれば良いだろう。

パッケージを探すときの注意点として、別のパッケージが後継になっておりサポートされていないが、後方互換のために残っているパッケージも多い。

例えば、here パッケージは後方互換のためだけに残っている。また、caption パッケージでは、caption と caption2 があるものの、現在最新のバージョン 3 は caption で利用することが出来る。かなりややこしい。パッケージのドキュメントを読んだり最終更新日を確認したりしておくべきだろう。

<!--
ローカル

ディストリビューションが TeX Live の場合には、ターミナルで以下のようにするとパッケージがインストールされているか確認することが出来る。

```
$ tlmgr info <package_name>
```

また、パッケージのドキュメントは texdoc から確認することが出来る。

```
$ texdoc <package_name>
```
-->

# 追記

- 2022/02/07 : plistings と jlisting の違いについて追記。いくつかのパッケージを追加
- 2022/05/11 : いくつかのパッケージの説明を追加。軽微修正。
- 2022/07/21 : 多言語について追加。ソースコードについて追記。軽微修正。
- 2023/05/30 : physics パッケージと physics2 パッケージについて追記。軽微修正。


<!-- https://www.webfx.com/tools/emoji-cheat-sheet/ -->