TeXで修論を書く

# あらまし

`latexmk`とTeXファイルの分割、その他の細かいTipsをまとめています。

# はじめに
修士論文を書き終えました。日本語です。卒業に伴い、TeXを触る機会が~~たぶん~~なくなります。せっかくTeXについても色々勉強したのにこのまま忘れてしまうのはもったない気がしました。そこで、これまで自分が資料や卒論、修論を書く上で、そして日本語で書く上で色々と調べたりした小技をまとめておくことにしました。

私の環境はOSはM1チップのMacBook Proで、`brew`を使って`TeXLive`[^a1]をインストールし、TeX使っています。コンパルは`uplatex`を使い、dvi->pdfは`dvipdfmx`、参考文献には`biblatex`を使い、ドキュメントクラスは`ujreport`です。確認はしていませんが、ある程度他の環境でも使えるともいます。

[^a1]: [TeX Live](https://texwiki.texjp.org/?TeX%20Live)

# TeXの処理系について
そもそも`TeX`は処理系を表し、`LaTeX`はプログラミング言語でいうライブラリに相当する物です[^1] 。ドキュメントクラス(`\documentclass{ujarticle}`など)を指定するだけで`\section{XXX}`などで綺麗に図版してくれるのはこれのおかげです。いろいろなバージョンが存在しますが、近年日本語では`uplatex`、`platex`、が一般的です。`p~`は日本語対応、`u~`はunicodeに対応させたものを表します。`LuaLaTeX`も最近では第三の選択肢としてでてきました[^2]。ですが、大学や学会からのテンプレートは`uplatex`、`platex`を前提としているものがまだ多く、やはり`uplatex`などを使ったほうが可搬性が高そうです。

# 日本語対応パッチ
`\usepackage{XXXXX}`でパッケージを読み込むことができますが、日本語対応していないパッケージも多いです。そんな時は日本語対応させてくれる`px~`パッケージを追加で読み込みます。例えば、`hyperref`に対し、 `pxjahyper`などです。このような組み合わせはたくさんあり、全部覚えておくことは不可能です。(そもそもすぐにわかるエラーがなければどれが日本語非互換か気づかないこともあります。)

これに対応した非常に便利なパッケージが[plautopatch](https://www.ctan.org/pkg/plautopatch)です[^3]。`\RequirePackage{plautopatch}`を`\documentclass{XXXXXX}`より前に読み込んでください。

```:logファイル
***** List of packages loaded by `plautopatch': *****
 plarray, plsiunitx, pxjahyper.
*****************************************************
```

logファイルにこのような出力がありました。気がつかず`hyperref`以外にも$2$つ非互換なパッケージを使っていたようです。ちなみに、明示的に`pxjahyper`を読み込んでもlogファイルにこの様な記述がされます。

# `latexmk`を使おう

`main.tex`ファイルをコンパイルしようと思うと、

```bash
uplatex main.tex  ## tocファイル(目次)、auxファイル(相互参照など)などが重要
biber main        ## bblファイル(biblatexの中間ファイル)と、blgファイル(biberのlogファイル)ができます。
uplatex main.tex  ## texファイル、tocファイル(目次)とbblファイル(文献)とauxファイル(相互参照)があれば図版されるようです。
uplatex main.tex  ## ですが、複数回実行しないと正しいファイルができないようです。
dvipdfmx main.dvi ## dviファイルからpdfファイルに変換
```

これだけコマンドを叩く必要があります。めっちゃめんどいです。しかも、logファイルやらなんやら、中間ファイルが大量に作られます。この状況を解決してくれるのが`latexmk`です[^32]。

「Latexmkは、LaTeX文書をコンパイルするプロセスを完全に自動化します。」[^32]。また、基本的にはTeXLiveに含まれているので、基本的には追加でインストールする必要もありません。

## 準備

使用のためにはホームディレクトリに`.latexmkrc`ファイルを作り、設定を書いておきます。

### `latexmkrc`の置く場所について補足

先ほどホームディレクトリに置く(`$HOME/.latexmkrc`)と書きましたが、別な選択肢があります。また、ディレクトリローカルな設定を作ることもできます。

ユーザーの設定ファイルは`$HOME/.latexmk`または`$XDG_CONFIG_HOME/latexmk/latexmkrc`が読み込まれます。環境変数`$XDG_CONFIG_HOME`が設定されていない場合、自動的に`$HOME/.config`に設定されるので、代わりに`$HOME/.config/latexmk/latexmkrc`を利用することができます。

また、latexmkを実行するディレクトリ(以後カレントディレクトリとします。)にも`.latexmkrc`または`latexmkrc`ファイルを作ることで、上記のファイルに加えてカレントディレクトリローカルな追加の設定を書くことができます。構成変数の設定が衝突した場合はホームディレクトリの設定が優先されるようです。また、カレントディレクトリに`latexmkrc`、`.latexmkrc`の両方のファイルがあった場合**先に見つけた方のみ**が有効のようです。私の環境では`.latexmkrc`が有効でした。(`ls -a`で上に出てくる順番だと思います。)


### 設定ファイルの例

```perl:$HOME/.config/latexmk/latexmkrc
# 使用するコマンドの設定
$latex          = 'uplatex %O -synctex=1 -halt-on-error -interaction=nonstopmode %P';
# biblatexは裏でbiberを使っているので設定が必要です。
$biber          = 'biber';
# dvipdf設定
$dvipdf         = 'dvipdfmx %O -o %Z%R.pdf %S'; #カレントディレクトリにpdfファイルを出力したい場合は%Zを消してください。任意のディレクトに出力したい場合は%Zの部分を変更してください。
# jobnameの設定:役割がよくわからない人は設定しない方が無難です。
#$jobname        = 'great_thesis';
# 最大繰り返し回数
$max_repeat     = 5;
# 1~5まで存在し,dvipdfの設定を使うためには3を指定する。
$pdf_mode       = 3;

# 中間ファイルやログファイルの出力場所
$aux_dir         = "build/"; #auxファイルとfdb_latexmkだけこちら
$out_dir        =  "build/"; #
# pdfビューワーの設定
$pdf_previewer  = 'open -a skim'; #macでskimを使用する場合。環境に合わせて変更。
# texファイルのプリアングルになにか追加したい時とかに使えます。
#$pre_tex_code   = \RequirePackage{plautopatch} #この設定は個人的にはおすすめしません。
```

このファイルを用意した後、実行するには、

```bash
latexmk main.tex
```

と端末上で打ち込むだけです。一気にpdfファイルが作られます。

役に立つ`latexmk`のオプションとして、`-g`、`-pv`、`-pvc`、`-silent`、`-c`などを紹介しておきます。

```bash
latexmk -g -pv main.tex
```

など`latexmk`に続いて入力し、複数指定することができます。

|オプション||
|:---|:---|
|-g|通常変更のない場合はコンパイルされませんが、強制的に全て再コンパイルします。|
|-pv|pdfビュワーが立ち上がり、出力したpdfファイルを見ることができます。|
|-pvc|-pvの効果に加えて、texファイルやbibファイル(確認していませんが各種中間ファイルが編集された場合もおそらく)が変更された場合に自動的に再コンパイルします。|
|-silent|端末常に表示されるログが少なくなります。|
|-c|コンパイル終了後にaux、log、bbl、blg、dviが取り除かれます。|

latexmkにはまだまだ山のようにオプションが存在します[^32]。

## .latexmkファイルの記述について

`.latexmk`ファイル中の記述にして説明していきます。`.latexmkrc`はperlで書かれるので、文字列を指定する場合は`'`シングルクオートで括ってください。ちなみに、スカラーの変数は`$`から始まり、配列は`@`から始まります。

### 構成変数(`$latex`などについて)[^51]

|構成変数| |
| ---- | ---- |
|$latex|実行する`latex`のエンジンとオプションが設定できます。後ほど設定しているオプションの詳細を説明します。|
|$biber|実行する`biber`のコマンドを設定できる。|
|$dvipdf|実行するコマンドの設定ができる。`%O`などは後から説明します。|
|$jobname|jobの名前を設定できる。出力されるファイルの名前が変わったりする。|
|$out_dir|出力されたファイルが保存されるディレクトリ。|
|$aux_dir|auxファイルとfdb_latexmkファイルはこっちに保存される。|
|$pdf_previewer|pdfビュワーの設定。`【設定した値】 ファイル名.pdf`が実行される模様|
|$max_repeat|#無限ループの可能性があるとlatexから抜け出すまでの最大の実行回数。既定値は5で、全ての正常な場合をカバーしています。|
|$pre_tex_code| `%P`や`%U`などと合わせて使う。texのコードに追加ができる。`$pre_tex_code = '\AtBeginDocument{\input{【inputしたいファイルのパス】}}'; `などとすると特定のページを１ページ目に挿入できたりします。(所属組織の情報とか入れる場合とかに役立ちそうです。`\AtBeginDocument`はプリアングルに記述するコマンドです。プリアングル終了後に、(\begin{document}後)命令を実行します。)絶対に日本語文書しか書かないという人は`$pre_tex_code = \RequirePackage{plautopatch}`とかもありかもしれませんが、設定したこと自体を忘れそうなので私はやっていません。|

[^51]: `CONFIGURATION VARIABLES` を構成変数としましたが、正しいのかいまいちわからないので、良い訳があったら教えてください。

### プレースホルダー(`%O`などについて)

latexmkのドキュメントから引っ張ってきました。和訳時にドキュメントの内容から変更したり、追加して説明しています。プレースホルダーはこれで全てです。

|プレースホルダー||
|:----:|:----|
|`%A`| メインのtexファイルのファイル名(拡張子なし)です。`%R`と異なり、jobnameやthw-jobenameオプション、$jobname 構成変数の設定で影響されません。|
|`%B`| 現在のコマンドのファイルのファイル名(拡張子なし)です。例えば、dviファイル main.dvi からpdfファイルを作るdvipdfmxの場合、mainとなります。|
|`%D`| 目的ファイルのファイル名です。(つまり、`main.dvi`ファイルからpdfファイルを作るときのpdfファイル、`main.pdf`です。)|
|`%O`| オプションです。latexmkが設定するオプションをlatexやbiber、dvipdfmxのどこに挿入するかを指定することができるようです。`%S`を併用しないとファイル名の入力を求められるようにないります。|
|`%P`|構成変数`$pre_tex_code`が設定されている場合、`main.tex`ファイルの冒頭に設定した値が挿入されます。(正確には逆で`$pre_tex_code \input{main.tex}`となるようです。)`$pre_tex_code`が設定されていない場合は`%S`と同じです。|
|`%R`|主なファイルのファイル名(拡張子なし)です。`-jobname` オプションや構成変数`$jobname`を指定した場合、指定した値に変更されます。latexmkrcはカレントディレクトリに設定することで、ディレクトリローカルな設定にすることが出来るので、主なファイル名は`main.tex`としつつ、出力されるpdfファイルや中間ファイル、ログファイルの名前を変更するとかできます。|
|`%S`|ソースファイルのファイル名(拡張子あり)を指します。(dviファイルをpdfに変換するときのdviファイル名です。)|
|`%T`|主要なTeXファイルの名前です。即ち`main.tex`を表します。|
|`%U`|`$pre_tex_code`が設定されているとき、そのまま置き換えられます。`%P`と異なり、`main.tex`の挿入処理をしません。`$pre_tex_code`が設定されていないときは、null文字になります。(即ち消えます。)|
|`%Y`|中間ファイルの出力ディレクトリ名(`$aux_dir`)に置き換えられます。`$out_dir`が設定され、`$aux_dir`が設定されていない場合、`$aux_dir`は`$out_dir`と同じ値に設定されます。|
|`%Z`|出力ファイルの出力ディレクトリ名(`$out_dir`)に置き換えられます。|

### `$pdf_mode`について

|$pdf_mode | |
| :--: | ---- |
|0 |pdfを作成しない|
|1 |$pdflatex で指定したコマンドでpdfを作成する。|
|2 |$ps2pdfで指定したコマンドでpdfを作成する。|
|3 |$dvipdfで指定したコマンドでpdfを作成する。dviファイルを作成する。|
|4 |$lualatexで指定したコマンドでpdfを作成する。|
|5 |$xelatex and xdvipdfmxで指定したコマンドでpdfを作成する。|

## latexのオプション[^31]

`$latex`の値で、実行する`latex`のエンジンとオプションが設定できます。今回`$latex`指定しているオプションを説明します。

```perl
$latex = 'uplatex %O -synctex=1 -halt-on-error -interaction=nonstopmode %P';
```

|オプション| |
| ---- | ---- |
|-synctex=1|SyncTeX[^34]を有効にしています。pdfファイルとtexファイルを自由に行き来できる便利な機能です[^35]。.synctex.gzファイルが作られるようになります。|
|-halt-on-error|処理中最初のエラーが出た時にストップします。|
|-interaction|コンパイル中のエラーなどにどう対処するのかを指定します。|

`-interaction`で指定できるmodeは4つあります。それぞれどのような動作か解説します。

|オプション| |
| ---- | ---- |
|errorstopmode(既定値)|エラーがあるたびに停止し、ユーザーの介入を求めます。未定義コマンドの場合などは、エンターを押しまくると最後まで実行してくれます。(修正をすることができるみたいですが、あまり使い方がわかっていません。)xを押すと終了します。|
|scrollmode|ファイル不足やキーボード入力があった場合にTeXが停止します。あんまり使い方分かりません。(どこ読めばわかるかもわからないので誰か教えてください。)とりあえず<*>が出ているときは「Ctr + C」で抜け出して、？になるので同じくxを入力すると終われる。|
|nonstopmode|端末上にエラーメッセージが表示されますが、エラーで止まりません。errorstopmodeでエンターを押しまくった場合と同じような動きになります。|
|batchmode|ターミナルには何も表示されません。(実際には$3$行くらい出力されます。)|

`-halt-on-error`と`-interaction=nonstopmode`はsyntax errorのときは似たような動作になります。

ですが、`-halt-on-error`は`\input{xxxx}`などでファイルが見つからないなど場合は正しいファイル名を入力すると訂正されて実行することができます。エラーがでたときに、errorstopmodeで`x`を入力する場合と同じような動きだと思います。

一方で、`-interaction=nonstopmode`はファイルが見つからない場合はそのまま通過します。基本的に最後まで実行されるようです。

両方指定しておけば、コンパイル中に一切入力する必要はありません。どのみちファイルを修正するので、両方指定してコンパイルを止めています。

## dvipdfのオプション[^41]

`$dvipdf`の値で、dviファイルからpdfファイルを作成します。オプションの解説をします。

```perl
$dvipdf = 'dvipdfmx %O -o %Z%R.pdf %S'; 
```

`-o`で出力ファイル名を指定できます。ファイル名はパスを指定できるので、任意のディレクトリに出力させることができます。現在の設定では、`%Z`で`$out_dir`の値を指定することで、他の各種出力ファイルと同じディレクトリに、`%R`を使うことで、構成変数`$jobname`またはlatexmkのオプション`-jobname="xxx"`で設定したファイル名、どちらも指定していない場合はlatexmkに与えたファイル名でpdfファイルを出力しています。

他にも山のように様々なオプションが存在します[^41]。

[^32]: [latexmk](https://ctan.org/pkg/latexmk/)
[^31]: [LaTeX2e unofficial reference manual (January 2022)](https://ftp.jaist.ac.jp/pub/CTAN/info/latex2e-help-texinfo/latex2e.html#interaction-modes)
[^33]: [github plk/biber](https://github.com/plk/biber)
[^34]: [SyncTeX](https://texwiki.texjp.org/?SyncTeX)
[^35]: pdfビュワーとエディタの関連が強いので、次書く~~予定~~の「neovimで修論を書く(仮題)」で詳細を書きます。
[^41]: [dvipdfmx – An extended version of dvipdfm](https://ctan.org/pkg/dvipdfmx)

# ファイルを分割しよう

>*困難は分割せよ。* 

ちょっとしたメモ書きや、課題を書く分には１つのファイルにまとめて書いてしまう方が楽ですが、ある程度長くなると一つのファイルにまとめておくのが大変になります。また、何度も同じ内容を書く場合はTeXのソースファイルとして書いておき、使い回せるととても楽です。複数人で同じ一つの文書を作成する場合などもファイルを適切に分割する必要がでてきます。

幸いなことにLaTeXにはファイルを読み込むコマンドが用意されています。説明のために、以下に示す様なディレクトリと関連ファイルがあるとします。


```bash
.
├─── main.tex
└── contents
    ├── body1.tex  #文書の内容1
    └── body2.tex  #文書の内容2
```

また、`latexmk`または`uplatex`は、`main.tex`をソースファイルとしています。即ち、

```bash
latexmk main.tex  #またはuplatex main.tex
```

です。この`main.tex`のことをルートファイルと呼びます。

## コマンド紹介

ファイルの分割に関連するコマンドは以下の４つです。

|コマンド||
|:---|:---|
|\input{xxx}|texファイルであればどこでも使えます(`main.tex`、`body1.tex`、`body2.tex`)。このコマンドを実行した箇所に`hoge.tex`ファイルの内容をそのまま挿入します。入り子は私の環境では14まで許されました。|
|\endinput|読み込まれるファイルに記述します(`body1.tex`、`body2.tex`の適切な場所)。このコマンド以後の記述はコメントの様に扱われます。詳しい挙動は未調査です。数式のalign環境中に記述すると、align環境終了までは表示されたり、itemize環境中に記述するとエラーがでたりします。実際にはファイルの最後まで読み込んでいるので、`\if`、`\fi`などを使った分岐を行うこともできます。問答無用で記述した箇所からコメントにならないという意味で`%`とは違った使い道がたくさんありそうです。|
|\include{xxx}|ルートファイル(`main.tex`)のdocument環境下でのみ利用可能です。`\clear(dobule)page`をしたのちファイル内容を挿入します。`\clear(dobule)page`は、ページをまたげない図や表の配置を決めさせます。**重要なことは、改ページされるということです。**|
|\include & \includeonly|includeonlyコマンドは`\include`コマンドと組み合わせて扱います。ルートファイルのプリアングル(`\begin{document}`の前)に書きます。includeで指定したファイルを実際読み込むのかを制御します。どの様に使うのか補足をします。|

## ファイル名について

`\input{xxxx}`などで指定するファイル名は拡張子`.tex`をつける必要がありません。`\input{body1}`となっていた場合、**最初に**`body1.tex`をカレントディレクトリで探し、見つからなかった場合に`body1`(拡張子無し)を探します。`\input{body1.tex}`となっている場合は`.tex`をくっつけずにそのまま`body1.tex`を探してくれます。

また、xxxの部分にはパスを指定することができます。相対パスでも、絶対パスでも指定可能です。

:::note warn
相対パスの場合はカレントディレクトリ(`latexmk`を実行するディレクトリ)を起点に記述してください。ルートファイルがある場所でも、`input{xxx}`を記述したファイルのある場所でもありません。
:::

```tex:記述例
\input{contents/body1} % `.` で `latexmk main.tex` を行う場合
```

## `\includeonly`について

大きなtexのファイル群を相手にコンパイルをするとよくて数秒、長いと何分(出版される様な本なら何時間もかかるかもしれない)も時間がかかります。そこで、一部分だけをコンパイルしようと、`\input`や`\include`コマンドをコメントアウトすると、目次や参照、引用文献などが正しく処理されません。そんな時に使えるのが`\includeonly`コマンドです。

`\includeonly`コマンドはカンマで区切って、読み込むファイルを指定します。`main.tex`、`contents/body1.tex`、`contents/body2.tex`の具体的な記述を載せていきます。私の環境で実際のコンパイル可能なことを確認しています。

```tex:main.tex
\documentclass{ujreport}
\includeonly{%
    contents/body1,
    contents/body2
}
\begin{document}
    \include{contents/body1}
    \include{contents/body2}
\end{document}
```

```tex:contents/body1.tex
\chapter{本編}
\section{本編だよ}
素晴らしい本編 \ref{test:1}
```

```tex:contents/body2.tex
\chapter{２つ目の章だよ！}
\section{実験のための節だよ！}
実験のためのページ参照\label{test:1}
```
![main.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/308715/ca8d6911-942e-b13e-6093-eed60428158d.png)
![main2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/308715/08737486-0701-930c-ce12-a50757e0721c.png)


この状態で`latexmk`を使ってコンパイルすると参照(`\ref{test:1}`)は、`2.1`と出てきます。この状態で、`contents/body1.tex`、`contents/body2.tex`を**変えずに**、`main.tex`の記述のみ以下の様に変更します。

```tex:main2.tex
\documentclass{ujreport}
\includeonly{%
    contents/body1,
    %contents/body2
}
\begin{document}
    \include{contents/body1}
    \include{contents/body2}
\end{document}
```

![main.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/308715/ca8d6911-942e-b13e-6093-eed60428158d.png)

すると、第２章の記述は丸々**出力されなく**なります。ところが、参照(`\ref{test:1}`)は正しく`2.1`を挿しています。

:::note warn
必ず一度`contents/body2`を含む形でコンパイルし、auxファイルを生成してください。単に`main2.tex`のファイルをコンパイルしても参照は正しく処理されません。
:::


# 付録には`appendix`パッケージを使おう
付録をつけるときは`appendix`パッケージを読み込んで使うと便利です。読み込まずとも`\appendix`コマンドで章の数字をリセットしてAlphabetにしてくれます。ですが、目次に追加しようとすると`appendix`と出てきます。この名前を自由に変更したい場合などは`appendix`を使うと便利です。

```tex
\renewcommand{\appendixname}{付録} %%ここを付録と変更することで「付録 A」などと変更されます。デフォルトでは「appendix A」。
\renewcommand{\appendixtocname}{付録} %%目次のappendix開始ページに表示される文字列を変更できます。
\renewcommand{\appendixpagename}{付録} %%\appendixpage で表示されるページにでる文字列を変更できます。
\appendix %%appendixを開始します。
\appendixpage %%付録開始時に \appendixpagename と書かれたページを1枚追加します。
\addappheadtotoc %%目次に付録が始まるページを追加してくれます。

\chapter{付録ですよ}
\section{一つ目の付録}
素晴らしい付録
```

### 徹底的に変更したい場合

このままの設定だと、「付録 A」とアルファベットが出てくるのが気に入らないという人がもしかしたらいるかもしれません。カウンターをイロハはに変更する方法を一応紹介します。

カウンターをいろはで表示するマクロは存在しないので、まずはいろはマクロを作ります[^4]。プリアングル(`\begin{document}`の前)に挿入してください。

```tex
\makeatletter
\def\@kiroha#1{%
  \ifcase#1\or イ\or ロ\or ハ\or ニ\or ホ\or ヘ\or ト\or チ\or リ\or ヌ\or ル\or ヲ\or
  ワ\or カ\or ヨ\or タ\or レ\or ソ\or ツ\or ネ\or ナ\or ラ\or ム\or
  ウ\or ヰ\or ノ\or オ\or ク\or ヤ\or マ\or ケ\or フ\or コ\or エ\or テ\or 
  ア\or サ\or キ\or ユ\or メ\or ミ\or シ\or ヱ\or ヒ\or モ\or セ\or ス\else\@ctrerr\fi}
\def\kiroha#1{\expandafter\@kiroha\csname c@#1\endcsname}%イロハ
\makeatother
```
これでTeXのカウンターをいろはで表示することができます。使用方法は簡単です。

```tex
\renewcommand{\the【カウンター名】}{\kiroha{【カウンター名】}
```
とすれば良いです。`\the【カウンター名】`はカウンター`【カウンター名】`を表示するコマンドです。
これを踏まえると、先ほどのTeXのソールファイルは以下のようになります。

```tex
\renewcommand{\appendixname}{付録} %%ここを付録と変更することで「付録 A」などと変更されます。デフォルトでは「appendix A」。
\renewcommand{\appendixtocname}{付録} %%目次のappendix開始ページに表示される文字列を変更できます。
\renewcommand{\appendixpagename}{appendixpagename} %%\appendixpage で表示されるページにでる文字列を変更できます。
\appendix %%appendixを開始します。
\renewcommand{\thechapter}{\iroha{chapter}}
\appendixpage %%付録開始時に \appendixpagename と書かれたページを1枚追加します。
\noappendicestocpagenum %% 目次のページ数が表示されなくなります。
\addappheadtotoc %%目次に付録が始まるページを追加してくれます。

\chapter{付録ですよ}
\section{一つ目の付録}
素晴らしい付録
```

:::note warn
必ず`\appendix`コマンドの後に`\renewcommand{\thechapter}{\iroha{chapter}}`を挿入してください。`\appendix`コマンドが出力を`\renewcommand{\thechapter}{\Alph{chapter}}` をしてしまうからです。
:::


ただし、この方法では前後の空白などが若干気持ち悪くなります。これ以上は長くなる上に、せっかく`appendix`パッケージを読み込んだ意味がなくなってしまう気がするので、チャプター名や、セクション名を変更する方法がまとまっている[こちら](https://qiita.com/ryunryunryun/items/46b01f847d7b28b1d41b)の記事を参考に変更してみてください。


[^1]: [TeX と LaTeX の違い](https://texwiki.texjp.org/?LaTeX#b9485cfe)
[^2]: [新常識 (4) 日本語 LaTeX は (u)pLaTeX だけじゃない](https://qiita.com/wtsnjp/items/76557b1598445a1fc9da#%E6%96%B0%E5%B8%B8%E8%AD%98-4-%E6%97%A5%E6%9C%AC%E8%AA%9E-latex-%E3%81%AF-uplatex-%E3%81%A0%E3%81%91%E3%81%98%E3%82%83%E3%81%AA%E3%81%84)
[^3]: [新常識 (1) plautopatch は必ず読み込もう](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)
[^4]: [LaTeX の箇条書の番号を全角文字で](http://www.math.kobe-u.ac.jp/HOME/kodama/tips-latex-enumz.html)
[^5]: [参考文献リストの作成 - thebibliography, bibitem](https://medemanabu.net/latex/thebibliography-bibitem/)

# 参考文献には`BibLaTeX`を使おう

参考文献をつける方法も様々あります。自分でで記述する方法[^5]もありますが、正直とても大変なので基本的にはおすすめできません。`bibtex`や`biblatex`を使うと、一度`ファイル名.bib`ファイルという参考文献リストを作っておくことで、文章中で引用した文献のみ参考文献リストとして表示しくくれたり、自動で並び変えたりしてくれるので、可搬性が高くなります。また、`bibtex`よりも`biblatex`の方がカスタマイズ性が高いので、私は`biblatex`を使用しました。

## `ファイル名.bib`ファイルの作り方

【ファイル名】はなんでも構いません。仮に`reference.bib`とします。
Google Scholarなどで`BiBTeX`の情報をコピーし、`reference.bib`に貼るだけです。(Google Scholarの情報は間違っていることが非常に多いので、使う場合は確認が必要です。学会の公式ページなどで`cite`->`bibtex`などがあると思うので、可能ならばそこからコピーしましょう。)
![Google Scholarの例](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/308715/86f7fc1a-3380-8f5b-cee9-4ac3813601e0.png "Google Scholarの例")

```bib:reference.bib
@book{高木貞治2010定本解析概論,
  title={定本解析概論},
  author={高木貞治},
  year={2010},
  publisher={岩波書店}
}
```
## `ファイル名.bib`の読み込みと引用の仕方

`tex`ファイルと同じディレクトリに`reference.bib`を置いてください。(別ディレクトリに置く場合は[ファイルを分割しよう](https://qiita.com/sigma7641/items/fc2638f92d5915326b4a#%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%92%E5%88%86%E5%89%B2%E3%81%97%E3%82%88%E3%81%86)を参考にしてください。)`\begin{document}`の前に次の$2$行を加えてください。

```tex
\usepackage{biblatex}
\addbibresource{reference.bib}
```

文中の引用は

```tex
\cite{高木貞治2010定本解析概論}
```

などと行います。ファイル`reference.bib`の`{`の始まってすぐから`,`までが引用のキーワードとなっており、ここは任意の文字列で構いません。そして、文献リストを表示したい箇所で(document環境)

```tex
\addcontentsline{toc}{chapter}{参考文献} %%目次に参考文献を追加できます。
\printbibliography[title=参考文献]%%文献リストの表示
```

を入れることで参考文献を表示してくれます。オプションの`[title=参考文献]`が無い場合はタイトルは`Bibliography`となります。

`biblatex`パッケージを読み込む時にさまざまなオプションをつけることができます。

```tex
\usepackage[citestyle=numeric,sorting=none,bibstyle=ieee, giveninits=true,maxnames=8,minnames=3]{biblatex}
```

- `style=numeric`
    - `\cite`を使って引用したときに`[1]`などとなります[^7]。
- `sorting=none`
    - 文献を引用した順番で文献リストができます[^7]。
- `bibstyle=ieee`
    - IEEEの形式で参照できます。
    - [使えるスタイル](https://www.overleaf.com/learn/latex/Biblatex_citation_styles)
- `giveninits=true`
    - 名前がイニシャルだけになります。[^8]
- `maxnames=8,minnames=3`
    - `maxnames`以上の著者がいるとき`minnames`まで表示し、`et al.`とします。[^8]
   

他にも様々なオプションがあります[^7][^8][^6]。

[^6]: [BibLATEX](https://ctan.org/pkg/biblatex) 英独語のドキュメントしかないです。
[^7]: [BibLaTeX+Biberの始め方](https://tm23forest.com/contents/biblatex-biber-begin)
[^8]: [biblatex のオプションの解説](https://qiita.com/shiro_takeda/items/fac1351495f32c224a28)

# おわりに

本記事では、主に日本語の文章を意識して`uplatex`+`biblatex`+`dvipdfmx`を`latexmk`を使ってコンパイルをする方法をまとめました。
また、筆者の知見としてTeXファイルを分割するコマンドについて述べ、具体的なディレクトリの構成についても提案しています。
細かいTipsとして日本語対応パッチや、appendixパッケージの使用、bibファイルをGoogleスカラ(bibの記述は間違いが多いので、必ず確認すること)などを使って作成することを推奨しています。
最後に付録として今回紹介した設定のソースファイルやコンパイルした結果を画像として載せています。

# 付録

## ソースコード

最後に資料などを書くときのために用意しているテンプレートを載せて終わりにしたいと思います。もう少し色々設定していますが今回紹介した内容に関連がある物を基本的に載せています。(例えば、図を入れる用のディレクトリ`./figure`も用意していますが、表示していません。)


### ディレクトリ構成

```bash:カレントディレクトリ
.
├── config
│   └── my-macros.tex # マクロをまとめて書いています。汎用性の高いものはシンボリックを張り、同期しつつ使いまわしています。もっと汎用性が高くなったらpackageとしてまとめるべきみたいです。
├── contents # `input`や`include`するファイル、参考文献のファイルをまとめています。
│   ├── body1.tex
│   ├── body2.tex
│   └── reference.bib
├── .latexmkrc #ディレクトリローカルな設定を記述しています。
└── main.tex
```

```bash:ホームディレクトリ
$HOME
└── .config
    └── latexmk 
        └── latexmkrc
```

### `latexmkrc`

```perl:$HOME/.config/latexmk/latexmkrc
#!/usr/bin/env perl
# shebang
# 構成変数
# latex設定
$latex          = 'uplatex %O -synctex=1 -halt-on-error -interaction=nonstopmode %P';
# biblatexのバックエンドでbiberが動くので設定
$biber          = 'biber'; # -u -U --output_safechars'; #コメントアウトのオプションは文字コードをutf8に対応させるものですが、基本的にデフォなのでいらない設定です。
# dvipdf設定
$dvipdf         = 'dvipdfmx %O -o %Z%R.pdf %S';
# 最大繰り返し回数
$max_repeat     = 5;
# pdfの出力形式を合わせる
$pdf_mode       = 3;
# 中間ファイルとか出力ファイル出力先
$aux_dir         = "build/";
$out_dir        =  'build/';
# pdfビューワーの設定
$pdf_previewer  = 'open -a skim %Z%R.pdf';
```

```perl:./.latexmkrc
#!/usr/bin/env perl
# shebang
#$pre_tex_code= '\AtBeginDocument{\thispagestyle{empty}付け加えだよ}';
$jobname = 'great_thesis';
```

### `main.tex`

ルートファイル。

```tex:./main.tex
\RequirePackage{plautopatch} 
\documentclass{ujreport}
\usepackage{appendix}
\usepackage{amsmath}
  \input{config/my-macros}
  \includeonly{ %
      contents/body1,
      contents/body2
  }
\title{素晴らしい題名}
\author{素晴らしい著者}
\date{素晴らしい日}%\date{\today}とするとコンパイルした日の日付になります。
\usepackage[citestyle=numeric,sorting=none,bibstyle=ieee, giveninits=true,maxnames=8,minnames=3]{biblatex}
\addbibresource{contents/reference.bib}
\begin{document}
  % 参考文献のための設定
  \maketitle       %タイトルページの作成
  \tableofcontents %目次の作成
  \include{contents/body1}
  \include{contents/body2}
  \appendix
  \renewcommand{\thechapter}{\kiroha{chapter}}
  \noappendicestocpagenum
  \appendixpage
  %\addappheadtotoc
  \chapter{付録をつける}
  \section{付録ですよ}
  素晴らしい付録
  %参考文献
  \addcontentsline{toc}{chapter}{参考文献}
  \printbibliography[title=参考文献]
\end{document}
```

###  読み込んでいるファイル

```tex:./config/my-macros.tex
% いろはのカウンター
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\makeatletter
\def\@kiroha#1{%
  \ifcase#1\or イ\or ロ\or ハ\or ニ\or ホ\or ヘ\or ト\or チ\or リ\or ヌ\or ル\or ヲ\or
  ワ\or カ\or ヨ\or タ\or レ\or ソ\or ツ\or ネ\or ナ\or ラ\or ム\or
  ウ\or ヰ\or ノ\or オ\or ク\or ヤ\or マ\or ケ\or フ\or コ\or エ\or テ\or 
  ア\or サ\or キ\or ユ\or メ\or ミ\or シ\or ヱ\or ヒ\or モ\or セ\or ス\else\@ctrerr\fi}
\def\kiroha#1{\expandafter\@kiroha\csname c@#1\endcsname}%イロハ
\makeatother
% appendixの設定をします。
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\renewcommand{\appendixname}{付録}
\renewcommand{\appendixtocname}{付録}
\renewcommand{\appendixpagename}{付録}
```

```tex:./contents/body1.tex
\chapter{本編}
\section{本編だよ}
素晴らしい本編\cite{高木貞治2010定本解析概論}です。
\ref{test:1}
\iftrue
    \begin{align}
        x^2 + 4x +4 &=0\\
        {(x + 2)}^2 &=0\\
    \endinput
        x &= -2
    \end{align}
    endinputによって表示されないよ。
\else
    ここもif文的に表示されないよ。
\fi
```

```tex:./contents/body2.tex
\chapter{２つ目の章だよ！}
\section{実験のための節だよ！}
実験のためのページ参照\label{test:1}
```

```bib:./contents/reference.bib
@book{高木貞治2010定本解析概論,
  title={定本解析概論},
  author={高木貞治},
  year={2010},
  publisher={岩波書店}
}
```

## 出力されるファイル

![great_thesis_page-0001.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/308715/67fb6ae3-5740-ce66-fd46-625363dc7e0e.jpeg)
![great_thesis_page-0002.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/308715/345ba8fa-c34e-dde3-2935-9387f6e730de.jpeg)
![great_thesis_page-0003.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/308715/7b1ddde4-65ee-6bca-d1c6-92de8de2b345.jpeg)
![great_thesis_page-0004.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/308715/b1f62323-f30a-6223-2c90-d43be2b9152f.jpeg)
![great_thesis_page-0005.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/308715/f99ad22c-094d-4bd4-49ff-65efd409b2a6.jpeg)
![great_thesis_page-0006.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/308715/001c2707-d3d7-71b0-6355-d47cee538448.jpeg)
![great_thesis_page-0007.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/308715/82ac1510-9423-295d-2b5b-e5c560764332.jpeg)
![great_thesis_page-0008.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/308715/d0d66472-736b-9666-3a77-c9cfae625aa0.jpeg)

# 謝辞

本記事は著者が修士論文を書き終えて、~~テンションがあがったので~~これまでに知ったことをまとめておこうと書いたものです。
なぜか書くにあたって、英語の文章をたくさん読んだり、実験したりして二度と使わない予定のTeXに関してより詳しくなってしまいました。
しかし、疑問に思ったことは大抵文書にまとめられていたので、マニュアルやドキュメント、`man`コマンド、`help`を作ってくれた偉大な先駆者たちに感謝します。
また、~~某リッチテキストエディタを使って修論を書いたら発狂していたと思うので、~~ TeX、LaTeX、pLaTeXを作って下さっている方々に心から御礼申し上げます。
あと、間違っていることもあるかと思うので、仮にこれから指摘してくださる方がいらっしゃったら深くお礼申し上げます。

# 参考文献

- [TeX Wiki](https://texwiki.texjp.org/)
    - TeXに関するWikiで、調べたらなんでも出てきます。
- [日本語 LaTeX の新常識 2021](https://qiita.com/wtsnjp/items/76557b1598445a1fc9da)
    - 日本語LaTeXに関する最近の動向が書いてあり非常に勉強になりました。
- [K.Kodama's page](http://www.math.kobe-u.ac.jp/HOME/kodama/index.html)
    - LaTeXなどのTipsを紹介しています。
- [jsreportのchapter名を変更する](https://qiita.com/ryunryunryun/items/46b01f847d7b28b1d41b)
    - 付録のカウンターをいろはに変更したい人は確認してみてください。
- [LaTeX入門](https://medemanabu.net/latex/)
    - ちょっとしたコマンドの確認で重宝します。
- [CTAN Comprehensive TEX Archive Network](https://ctan.org/)
    - TeXのパッケージがまとまっています。
    - [BibLATEX](https://ctan.org/pkg/biblatex)
        - 英語とドイツ語のドキュメントしかない。
- [TM23FOREST.COM](https://tm23forest.com)
    - BibLaTeXのはじめ方が綺麗にまとまってました。tlmgrなどについてもあってとても勉強になりました。
- [biblatex のオプションの解説](https://qiita.com/shiro_takeda/items/fac1351495f32c224a28)
    - 探したなかでBibLaTeXのオプションが一番まとまって紹介されていました。