LaTeXパッケージ覚え書き

$\LaTeX$ を使う上でさまざまなパッケージについて調べたが，忘れてしまいそうなのでメモ。


# 0. TeX Live 2020 から原ノ味フォントがデフォルトに変わった
日本語の LaTeX において，いままでデフォルトが [IPAex フォント](https://ipafont.ipa.go.jp/old/)だったのが，源ノ明朝・源ノ角ゴシックを Adobe-Japan1 フォントになるように組み替えた [原ノ味フォント](https://github.com/trueroad/HaranoAjiFonts)が使われるように変わったらしい。
IPAexフォントはかすれた感じで，太字（ゴシック体）はあまり強調されているように感じなかったため，自分としてはかなり高評価である。

**IPAex フォント**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280743/445a8481-8ebd-af4e-1ed4-15b7d04c2842.png)

**原ノ味フォント**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280743/681b8e77-d66d-fe62-26c2-72b5a87882a8.png)

# 1. `\documentstyle[×××]{〇〇〇}`
## 1.1. `{〇〇〇}`
### 1.1.1. article, jarticle, jsarticle
標準の文書クラス。`\section{},\subsection{}`などを使って文書を構成していく[^1]。article は英語，日本語では jarticle か jsarticle を用いる。jsarticle のほうが新しいので，基本はこっちを用いる。
### 1.1.2. book, jbook, jsbook
本を書くクラス。`\section{}`より上の階層に`\chapter{}`がある[^2]。book は英語， jbook, jsbook はどちらも日本語クラスだが，基本は jsbook を用いる。

[^1]: `\part{}`も使える。
[^2]: `\part{}`も使える。階層順に，`part, chapter, section, subsection,...`となっている。

### 1.1.3 beamer
高機能なスライドクラス。いずれ別記事にしたい。
### 1.1.4. slide, seminar
簡易スライドクラス。基本 beamer を使えばいいと思う。

他にも lualatex や xelatex 関連のものもあるが，自分は uplatex 使いなのでよくわからない。
uplatex は platex との違いをほぼ気にする必要がなく，両者ともユーザーが多いので，自分はこれを好んで使っている。

## 1.2. `[×××]`
オプションの部分

- uplatex  
js クラスで，platexでなく，unicode 対応の uplatex を使うときに記述する。uplatex は，platex のときのさまざまな問題を解決しているため，読み込んでおくと吉。
- a4paper, b4paper, b5paper など  
紙のサイズ。
- landscape  
紙を横長にする。
- twocolumn  
二段組にするときに使う。
- 〇pt  
フォントサイズ指定。10ptとか，12ptとか。
- dvipdfmx など  
コンパイルに用いるドライバーの指定。
- fleqn   
数式を中央ぞろえではなく，左揃えにしたいときに使う。
`\setlength{\mathindent}{2cm}`のようにして，左端からの距離を指定する。
- leqno  
数式の番号を左側でなく右側に置く。


自分は大体以下のような感じ。

```latex
% 英語のとき
\documentclass[a4paper,12pt]{article}
% 日本語のとき
\documentclass[uplatex,a4paper,dvipdfmx,10pt]{jsarticle}
```

**以下ではすべて pdflatex/article, uplatex/jsarticle/dvipdfmx を想定する。**

# 2. おまじないレベルで読み込むパッケージ
ここでは，デフォルトで読み込んでいるパッケージや，よく読み込むパッケージのうちの一部を記す。

## 2.1. ams系パッケージ

```latex
\usepackage{amsthm,amsmath,amssymb,amsfonts}
```

この辺はおまじないレベルで読み込んでいる。数式での`\begin{align} ... \end{align}`とか普段よく使っているのは大体これである。amsthm を用いた定理環境に関しては後述。

## 2.2. 他の数学・数式系パッケージ
```latex
\usepackage{latexsym}
\usepackage{mathrsfs}
\usepackage{mathtools}
```
- latexsym  
数式で使える記号を増やす。
- mathrsfs  
花文字など。
- [mathtools](http://ftp.jaist.ac.jp/pub/CTAN/macros/latex/contrib/mathtools/mathtools.pdf)  
`\coloneqq`や`\mathtoolsset`，`\DeclarePairedDelimiter`で使う。

## 2.3. グラフィックと色のパッケージ
```latex
\usepackage[dvipdfmx]{graphicx, xcolor}
\usepackage{float}
\usepackage{wrapfig} % must be after float package.
```
- graphicx  
画像を挿入したり，テキストや図の拡大縮小・回転を行うためのパッケージ。
- xcolor   
色を付ける。
- float  
図や表の配置。これを読み込まずに配置しようとすると一部機能が使えない。
- wrapfig  
図を回り込ませるためのパッケージ。他の環境の中(`\begin{...}...\end{...}`の中)では機能しないことが多い。


# 3. フォント
## 3.1. 英語フォント
```latex
\usepackage[T1]{fontenc}
\usepackage{lmodern} % Latin Modern font
% \usepackage{newtxtext,newtxmath} % Times font
\usepackage{bm} % must be loaded after font change.
```
デフォルトの Computer modern フォントではなく，それを改良した Laten modern フォントを用いる。
Computer modern でないフォントを用いる場合は，7 ビットの OT1 エンコーディングから，
8 ビットの T1 エンコーディング に変えるために，`\usepackage[T1]{fontenc}`とかくようにする。

bm は数式で太字を使うときのパッケージ。使う場合はフォント設定の後に読み込まねばならないので注意。

## 3.2. 日本語フォント
```latex
\usepackage[uplatex,deluxe]{otf}
\usepackage[noalphabet]{pxchfon} % must be after otf package
\setlightminchofont{HaranoAjiMincho-Light.otf} % \mcfamily\ltseries
\setmediumminchofont{HaranoAjiMincho-Regular.otf} % \mcfamily\mdseries
\setboldminchofont{HaranoAjiMincho-Bold.otf} % \mcfamily\bfseries
\setmediumgothicfont{HaranoAjiGothic-Medium.otf} % \gtfamily\mdseries
\setboldgothicfont{HaranoAjiGothic-Medium.otf} % \gtfamily\bfseries
\setxboldgothicfont{HaranoAjiGothic-Heavy.otf} % \gtfamily\ebseries
\setmarugothicfont{HaranoAjiGothic-Regular.otf} % \mgfamily

\renewcommand{\textbf}[1]{{\bfseries\gtfamily#1}}
\usepackage{titlesec}
\titleformat*{\section}{\Large\bfseries\gtfamily}
\titleformat*{\subsection}{\large\bfseries\gtfamily}
\titleformat*{\subsubsection}{\bfseries\gtfamily}
```

### 3.2.1. [otf](https://texwiki.texjp.org/?OTF) パッケージ
多くの和文フォントメトリックの問題を解消してくれるため，otf フォントが使えるなら読み込んでおくとよい。[オプション](https://texwiki.texjp.org/?TeX%E3%81%A8%E3%83%95%E3%82%A9%E3%83%B3%E3%83%88#xad9bd71)は以下の通り。

- uplatex  
upLaTeXで使う。
- jis2004  
JIS X 0213:2004 に対応した字形を利用する。
- deluxe  
多ウェイト化。明朝体・ゴシック体それぞれ２ウェイトが使用可能。
- expert  
仮名が縦組専用，または横組専用のものにする。

### 3.2.2. [pxchfon](http://ctan.math.illinois.edu/language/japanese/pxchfon/pxchfon.pdf) パッケージ
日本語のフォントを簡単に変更するパッケージ。noalphabet オプションでアルファベットは変更しない設定にしている。  
`\set~~font{}`でいろいろなフォントが指定可能。原ノ味フォントの種類の詳細は[ココ](https://github.com/trueroad/HaranoAjiFonts)を参照せよ。

`\renewcommand~`以下は太字を日本語をゴシックに，アルファベットや数字はセリフ体のまま出力するための設定。
デフォルトでは日本語が明朝体の太字になってしまうので，好みで変更している。



# 4. ハイパーリンクのパッケージ
```latex
% 「%」は以降の内容を「改行コードも含めて」無視するコマンド
\usepackage[%
 dvipdfmx,%
 bookmarks=true,%
 bookmarksdepth=3,%
 bookmarksnumbered=true,%
 colorlinks=false,%
 setpagesize=false,%
 pdftitle={},%
 pdfsubject={},%
 pdfauthor={},%
 pdfkeywords={}%
]{hyperref}
% PDFのしおり機能の日本語文字化けを防ぐ。
\usepackage{pxjahyper}
```
テキストにハイパーリンク(テキスト上をクリックすれば飛ぶやつ)やしおり(ブックマーク。各セクションの見出しに飛べるやつ)を自動で貼ってくれるパッケージ。いろんなパッケージのできるだけ後ろの方で読み込んだ方が良い。[hyperref](https://texwiki.texjp.org/?hyperref) を読み込めば，文書中で`\url{}`コマンドも使えるようになる。(`\usepackage{url}`は不要)

ただし，beamer では，hyperref は自動で読み込まれるため，`\usepackage{pxjahyper}`のみ書くようにする(日本語のとき)。hyperref を読み込むとエラーの原因になる。

[hyperref のオプション](https://texwiki.texjp.org/?hyperref#re898c38)について(「=」の一番左がデフォルト)，

- dvipdfmx
ドライバー。欧文ではコメントアウトする。
- bookmarks(=true/false)  
ブックマークを作成するかどうか。
- bookmarkdepth(=topdepth/数値)  
ブックマークをどの階層(section, subsection, subsubsection など)まで作成するか。
- bookmarksnumbered(=false/true)  
ブックマークに番号を付記するかどうか。
- colorlinks(=false/true)  
リンクに色を付けるかどうか。 
- linkcolor(=red/他)  
上が true のときにリンクを何色にするか。 
- setpagesize(=true/false)  
hyperref パッケージは用紙サイズを変えてしまう。これは false にしておくのが良い。([実際は，`\usepackage{pxjahyper}`を読み込めば指定する必要はない](https://texwiki.texjp.org/?hyperref#v71488f4))
- pdftitle,pdfsubject,pdfauthor,pdfkeywords など  
pdf のメタ情報を定める。 

他にもさまざまなオプションがあるため，[ココ](https://texwiki.texjp.org/?hyperref#re898c38) を参照せよ。

# 5. [amsthm](https://ftp.yz.yamagata-u.ac.jp/pub/CTAN/macros/latex/required/amscls/doc/amsthdoc.pdf) を用いた定理環境

2.1. で読み込んだ`\usapackage{amsthm}`を用いた定理環境をみていく。

## 5.1. 定理環境の定義
```latex
 % 英語のとき
\theoremstyle{plain}
\newtheorem{Thm}{Theorem}[section]
\newtheorem{Lem}[Thm]{Lemma}
\newtheorem{Prop}[Thm]{Proposition}
\newtheorem{Cor}[Thm]{Corollary}
\theoremstyle{definition}
\newtheorem{Def}[Thm]{Definition}
\newtheorem{Rem}[Thm]{Remark}
\theoremstyle{remark}
\newtheorem{Eg}[Thm]{Example}

\theoremstyle{plain}
\newtheorem*{Thm*}{Theorem}
\newtheorem*{Lem*}{Lemma}
\newtheorem*{Prop*}{Proposition}
\newtheorem*{Cor*}{Corollary}
\theoremstyle{definition}
\newtheorem*{Def*}{Definition}
\newtheorem*{Rem*}{Remark}
\theoremstyle{remark}
\newtheorem*{Eg*}{Example}
```

```latex
% 日本語のとき
\theoremstyle{definition}
\newtheorem{Thm}{定理}[section]
\newtheorem{Lem}[Thm]{補題}
\newtheorem{Prop}[Thm]{命題}
\newtheorem{Cor}[Thm]{系}
\newtheorem{Def}[Thm]{定義}
\newtheorem{Rem}[Thm]{注}
\newtheorem{Eg}[Thm]{例}
\newtheorem{Egprob}[Thm]{例題}
\newtheorem{Prob}{問}
\newtheorem{Ex}{演習}[section]

\newtheorem*{Thm*}{定理}
\newtheorem*{Lem*}{補題}
\newtheorem*{Prop*}{命題}
\newtheorem*{Cor*}{系}
\newtheorem*{Def*}{定義}
\newtheorem*{Rem*}{注}
\newtheorem*{Eg*}{例}
\newtheorem*{Egprob*}{例題}
\newtheorem*{Prob*}{問}
\newtheorem*{Ex*}{演習}
```

`\newtheorem`で番号付き定理環境，`\newtheorem*`で番号なし定理環境を定義する。番号付き定理環境については，[section] をつけるとセクション番号も出力する。上でいう [Thm] のように，前に定義した定理環境をオプションにすることで，連番にすることができる。

定義した定理環境は`\begin{Thm}...\end{Thm}`のように使う。

## 5.2. 定理スタイルと自作定理スタイル
上で，`\theoremstyle`を使って定理のスタイルを定めることができる。theoremstyle には，以下のようなものがある。

- theorem  
タイトルが太字，内容はイタリック体。
- definition  
タイトルが太字，内容はローマン体。日本語の場合は原則これにするとよい。
- remark  
タイトルがイタリック，内容はローマン体。

また，自作も可能。以下に例を挙げる。

```latex
\newtheoremstyle{mystyle}%  % Name
  {18pt}%                   % Space above
  {18pt}%                   % Space below
  {\normalfont}%            % Body font
  {}%                       % Indent amount
  {\bfseries\gtfamily}%     % Theorem head font
  {.}%                      % Punctuation after theorem head
  {6pt}%                    % Space after theorem head, ' ', or \newline
  {\thmname{#1}\thmnumber{ #2}\thmnote{ (#3)}}%
```

## 5.3. 証明環境
証明環境もカスタマイズすることが可能。たとえば，日本語環境を整えたければ以下のようにするとよい。

```latex
# 証明の始まりを proof でなく 証明 に変える．
\renewcommand{\proofname}{証明}

% \renewcommand{\qedsymbol}{} % 証明終わりのマークをなくす
% \renewcommand{\qedsymbol}{$\blacksquare$} % 証明終わりのマークを黒くする

% 「証明」の部分をイタリックにせず，太字にする．
% 日本語しか書かないなら
% \renewcommand{\proofname}{\textbf{証明}}
% でよいが，それだと \begin{proof}[hoge] でhogeに数字やアルファベットなどを含むときはそこだけイタリック体になってしまう．
\makeatletter
\renewenvironment{proof}[1][\proofname]{\par
\pushQED{\qed}%
\normalfont \topsep6\p@\@plus6\p@\relax
\trivlist
\item\relax
% {\itshape
{\bfseries\gtfamily
#1\@addpunct{.}}\hspace\labelsep\ignorespaces
}{%
\popQED\endtrivlist\@endpefalse
}
\makeatother
```

# 6. 番号付けと箇条書き，数式の番号付け

## 6.1. 箇条書きの番号付け

```latex
\usepackage{enumitem}
\renewcommand{\theenumi}{\arabic{enumi}}
\renewcommand{\labelenumi}{(\theenumi)}
\renewcommand{\theenumii}{\roman{enumii}}
\renewcommand{\labelenumii}{(\theenumii)}
```

`\renewcommand{\theenumi}{\arabic{enumi}}`でトップレベルの数字を 「1,2,3,...」にし，`\renewcommand{\labelenumi}{(\theenumi)}`によって「(1),(2),(3),...」のように出力するようにしている。  
`\renewcommand{\theenumii}{\roman{enumii}}`で二番目のレベルのラベルを「i,ii,iii,...」にし，`\renewcommand{\labelenumii}{(\theenumii)}`によって「(i),(ii),(iii),...」のように出力するようにしている。

数字の指定は以下で行う。


| コマンド | 対応する番号  |
|---------|--------------|
| \arabic | 1,2,3,...    |
| \roman  | i,ii,iii,... |
| \Roman  | I,II,III,... |
| \alph   | a,b,c,...    |
| \Alph   | A,B,C,...    |

`\begin{enumerate}...\end{enumerate}`や`\begin{itemize}...\end{itemize}`
の具体的な使い方は[ココ](http://www3.otani.ac.jp/fkdsemi/pLaTeX_manual/kajyo.html)を参照せよ。
また，enumitem を用いたカスタマイズの詳細は[ココ](http://www.texnia.com/archive/enumitem.pdf)をみるとよい。


## 6.2. 数式の番号付け

```latex
\numberwithin{equation}{section}
\mathtoolsset{showonlyrefs=true}
```
1 行目で定理番号にセクション番号を含める。
2 行目で，参照しているときのみセクション番号を出力するようにする。これにより，
番号あり数式環境`\begin{equation}...\end{equation}`と
番号なし数式環境`\begin{equation*}...\end{equation*}`などを使い分ける必要がなくなる。


# 7. 新たにコマンドを定義する
## 7.1. 新たに作用素を定義する `\DeclareMathOperator`
```latex
%%% log type
\DeclareMathOperator{\sgn}{sgn}
\DeclareMathOperator{\Supp}{Supp}
\DeclareMathOperator{\tr}{tr}
\DeclareMathOperator{\Tr}{Tr}
\DeclareMathOperator{\Det}{Det}
\DeclareMathOperator{\Log}{Log}
\DeclareMathOperator{\rank}{rank}
\DeclareMathOperator{\rk}{rk}
\DeclareMathOperator{\corank}{corank}
\DeclareMathOperator{\Res}{Res}
\DeclareMathOperator{\Ker}{Ker}
\DeclareMathOperator{\coker}{coker}
\DeclareMathOperator{\Coker}{Coker}
%%% limit type
\DeclareMathOperator*{\argmin}{arg~min}
\DeclareMathOperator*{\argmax}{arg~max}
```

`\DeclareMathOperator`で添え字の位置が log と同じ，
$$\log_R f(x)$$
の形の作用素を定義する。
`\DeclareMathOperator*`で添え字の位置が lim と同じ，
$$\lim_R f(x)$$
の形の作用素を定義する。

## 7.2. 適切な括弧をかくコマンドを定義する`\DeclarePairedDelimiter`
mathtools パッケージで定義された`\DeclarePairedDelimiter`を用いて，括弧のペアを定義する。

```latex
\DeclarePairedDelimiter{\abs}{\lvert}{\rvert} % | | absolute value
\DeclarePairedDelimiter{\norm}{\lVert}{\rVert} % || || norm
\DeclarePairedDelimiter{\rbra}{(}{)} % () round brackets
\DeclarePairedDelimiter{\cbra}{\{}{\}} % {} curly brackets
\DeclarePairedDelimiter{\sbra}{[}{]} % [] square brackets
\DeclarePairedDelimiter{\abra}{\langle}{\rangle} % < > angle brackets
\DeclarePairedDelimiter{\floor}{\lfloor}{\rfloor} % floor function
\DeclarePairedDelimiter{\ceil}{\lceil}{\rceil} % ceil function
```

これにより，`$\abs{-\frac{1}{2}}$`で
$$|-\frac{1}{2}|$$
と出力する。括弧の大きさを調整したければ，`$\abs*{-\frac{1}{2}}$`とすることで，
$$\left|-\frac{1}{2}\right|$$
とすることができる。

括弧には，`\left|-\frac{1}{2}\right|`のように，`\left ~ \right`を使う人が多いかもしれないが，
これを用いると，前後に無駄なアキが入ってしまうという問題がある。これについては[このページ](https://qiita.com/Ishotihadus/items/bbbb85f54e6a4e7aaac0#%E3%82%AB%E3%83%83%E3%82%B3%E3%82%AA%E3%83%97%E3%82%B7%E3%83%A7%E3%83%8A%E3%83%AB)が詳しいので参照するとよい。なお，さらにいろいろカスタマイズできる類似コマンドもあるらしい。これについては，[このページ](https://mathlandscape.com/declarepairddelimiter/)を参照するとよい。

# 8. おわりに
備忘録として今後も内容を増やしていく予定。

# 参考文献
1. 奥村晴彦，黒木裕介 「$\LaTeX2e$美文書作成入門」，第6版，2013
2. [LaTeX の「アレなデフォルト」 傾向と対策](https://qiita.com/zr_tex8r/items/297154ca924749e62471)
3. [アカデミックヤクザにキレられないためのLaTeX論文執筆メソッド](https://qiita.com/suigin/items/10960e516f2d44f6b6de)
4. [イショティハドゥスにキレられないための LaTeX 論文執筆メソッド](https://qiita.com/Ishotihadus/items/bbbb85f54e6a4e7aaac0)
4. [【LaTeX】新しい演算子を定義するDeclareMathOperatorの使い方](https://mathlandscape.com/declaremathoperator/)
4. [【LaTeX】括弧類を定義するDeclarePairdDelimiterなど3つ](https://mathlandscape.com/declarepairddelimiter/)
5. [TeX Wiki](https://texwiki.texjp.org/?TeX%E3%81%A8%E3%83%95%E3%82%A9%E3%83%B3%E3%83%88#xad9bd71)

他多数