計数工学科卒論LaTeXテンプレートをOverleafでコンパイルする

当記事は [物工/計数 Advent Calendar 2019](https://adventar.org/calendars/4128) の3日目です．

# 概要
東大工学部計数工学科の卒業論文では学科から推奨のLaTeXテンプレートが配布されています．
[Overleaf](https://www.overleaf.com/)で書こうとしている人がいると思いますがコンパイルを通すのにほんの少しだけ設定が必要なので書いていきます．
本当は自分の設定ファイルを全部GitHubか何かにあげて配布したいのですがいじって二次配布とかになるとちょっとアレなので手続きを書きます．
基本的にブラウザ上で動くものなのでOSには依らないと思います．Overleafでなく手元で作業したい人はこちら[^7]に詳しく方法が書いてあります．

ちなみに本記事にしたがって(分割コンパイルを除く)作業をしたものを学科同期がテンプレートとして[ここ](https://ja.overleaf.com/latex/templates/bachelors-thesis-template-for-keisu-system-university-of-tokyo/pywdgmkwmysd)にUPしてくれました．
Overleafですぐ使えます．

# ダウンロード
数理
https://www.keisu.t.u-tokyo.ac.jp/research/latex/

システム
https://www.keisu.t.u-tokyo.ac.jp/research/latex-system

上記URLの上の方にあるテンプレートをダウンロードします．

解凍したファイルのうち実際に使用するのは，数理の場合 `skeleton.tex` と `suribt.cls` だけ，システムの場合 `skeleton_system_B_Japanese.tex`と`systemB.cls`だけだと思って良いです． 

以下，数理コースのテンプレートを例にとって説明しますが，システムの場合も `skeleton.tex` を `skeleton_system_B_Japanese.tex`に， `suribt.cls`を`systemB.cls`に読みかえれば大丈夫です(動作検証済)．

# 文字コード変更
文字コードがShift-JISになっていてこのままだと日本語が文字化けする，また\と¥の使いわけでバグるので，学科側で直して配布してくれれば良いのにと思いながらUTF-8に文字コードを変換します．

方法はなんでも良いですが，例えば`nkf`コマンドなんかが使えます．
インストールは適当に行なってください．

```sh:nkf_shell
nkf -w -S --overwrite skeleton.tex
nkf -w -S --overwrite suribt.cls
```

他にもメモ帳で変換する方法とかWeb上の変換ツールとかあるみたいなので適当に．

# Overleafでコンパイルまで


Overleafにログインしたら `New Project` > `Blank Project` で適当な名前でProjectoを作ります(自分は `grad_thesis` という名前にしました)．

自動作成されている`main.tex`はいらないのでDeleteして，文字コードを変換した`skeleton.tex`と`suribt.cls`をアップロードしてください．

ここでコンパイルすると大量のエラーが出ます．テンプレートで指定されているpLaTeXというものを使用するために以下の設定[^1]を行います．

まず`New File`で`latexmkrc`というファイルを作成して以下の内容をコピペしましょう．

```txt:latexmkrc
$latex = 'platex';
$bibtex = 'pbibtex';
$dvipdf = 'dvipdfmx %O -o %D %S';
$makeindex = 'mendex %O -o %D %S';
$pdf_mode = 3; 
```

その後，画面左上の `Menu`をクリックして `Compiler`を`LaTeX`に，`Main document`を`skeleton.tex`に変更します．
![スクリーンショット 2019-11-15 23.02.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/323124/bf5078c4-1305-280a-d34a-840ea419a31a.png)


ここまで行なってskeleton.tex上で Cmd + Sとかなんとかでコンパイルすると無事通り，こんな感じのPDFが表示されます．嬉しい！
![スクリーンショット 2019-11-15 23.01.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/323124/ce7c98cc-70d3-1435-b69e-3843d4ebc225.png)

# BibTeX
ここまでで一応なんとなく書けるようになってはいますが，BibTeX(参考文献の記述ツール)はほぼ全員使うと思うのでついでに書いておきましょう．
`New File`で`reference.bib`というファイルを作成します．
例えば中身はこんな風に書いてみましょう[^2]．
ちなみにBibTeXの`.bib`ファイルに記述するテキストはGoogle Scholarから直接出力できる[^3]ので文法等を覚える必要は基本的にありません．

``` txt:reference.bib
@inproceedings{
  KyTea,
  title={Pointwise prediction for robust, adaptable Japanese morphological analysis},
  author={Neubig, Graham and Nakata, Yosuke and Mori, Shinsuke},
  booktitle={Proceedings of the 49th Annual Meeting of the Association for Computational Linguistics: Human Language Technologies: short papers-Volume 2},
  pages={529--533},
  year={2011},
  organization={Association for Computational Linguistics}
}
```

`skeleton.tex`も少し書き換えます．最初に `\bibliographystyle{junsrt}`を付け足すのと，参考文献部分をコメントアウトしたりコメントアウト外したり`.bib`ファイルのパスを入れたり．ちなみに`junsrt`を`jplain`にすると著者名のアルファベット順に引用番号がつきます．

``` tex:skeleton.tex
\documentclass{suribt}
\bibliographystyle{junsrt} % <----ココ

% ~~~~~~~~~ 省略 ~~~~~~~~~~

% \begin{thebibliography}{}%%%% 参考文献 %%%
%  \bibitem{}
% \end{thebibliography}
% \bibliographystyle{}%           BibTeX を使う場合
\bibliography{reference.bib}% BibTeX を使う場合
```

これで文章中の引用を入れたいところに，例えば今回の`reference.bib`の例だと `\cite{KyTea}`と入れれば引用番号が入ります．

```tex:example.tex
Neubigらによる研究\cite{KyTea}では...
```

# 数式環境などのパッケージ追加
数式環境やコードの記述環境などを整備する際に追加のパッケージを利用することがあるかと思います．
例えば`\begin{align*}`などを使うときには`amsmath`を利用します．
このようなパッケージの追加はプリアンブル(`\begin{document}` の前)に `usepackage` を書き足すことで行えます．

```tex:skeleton.tex
\documentclass[ipc]{suribt}
\bibliographystyle{jplain}
\usepackage{amsmath} % <------ ココ
% ~~~~~~ 省略 ~~~~~~~
```

# 分割コンパイル
Overleafではコンパイルに結構時間がかかります．
卒論くらいの規模になってくると全てまとめてコンパイルしたら数十秒はかかるため，章ごとに分割することをお勧めします[^8]．
方法は簡単で，まずは章ごとにtexファイルを作成します．
自分は`chapters`というフォルダを作成に，その中に`chap1.tex`などを作成しました．
![スクリーンショット 2020-02-12 14.36.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/323124/b7449d92-f441-2b4d-818f-0ab7f94be277.png)

それぞれのファイルの中では以下のように記述します．

``` tex:chap1.tex
\documentclass[../skeleton]{subfiles} %このファイルからのメインファイルの相対パス(.texを除く)を[]内に書く

\begin{document}

\chapter{序論}
\section{ほげほげ}
本論文では...について論じる．

\end{document}
```

mainのtexファイルに`subfile`パッケージを追加して，以下のように`subfile`を追加すると，全体に対して先ほどの小分けのファイルの内容が入れ込まれます．

``` tex:skeleton.tex
\documentclass{suribt}
\bibliographystyle{junsrt}
\usepackege{subfiles} % <----- ココ

% ~~~略 ~~~

\mainmatter% ここから本文 %%% 本文 %%%%%%%%

\subfile{chapters/chap01} % <----- ココ
\subfile{chapters/chap02} % <----- ココ
\subfile{chapters/chap03} % <----- ココ
\subfile{chapters/chap04} % <----- ココ
\subfile{chapters/chap05} % <----- ココ

\backmatter% ここから後付
\subfile{chapters/acknowledgements} % <----- ココ
% ~~~ 略 ~~~
```

小分けのファイルを表示した状態でコンパイルすると，そのファイルの中身のみをコンパイルしてくれるのであまり時間がかかりません．
表示される章番号はズレますが，全体でコンパイルしたときはきちんと合うので無問題です．

# その他
定理の証明環境とか必要になる可能性の高い細かいことはこのテンプレートを整備した過去の人々が色々書いてくれています[^4]．
LaTeXで卒論書く場合の数式等での記法のTipsはこの辺り[^5][^6]が非常に参考になるかと思います．

# 参考文献
[^1]: [Overleaf v2 で日本語を使用する方法](https://doratex.hatenablog.jp/entry/20180503/1525338512)
[^2]: [BibTeXとは - Qiita](https://qiita.com/SUZUKI_Masaya/items/14f9727845e020f8e7e9)
[^3]: [Google Scholarからbibtexを作成する](http://ajdkbsuvi.blogspot.com/2011/02/google-scholarbibtex.html)
[^4]: [卒論クラス suribt とその周辺](http://www.misojiro.t.u-tokyo.ac.jp/suribt/)
[^5]: [卒論をLaTeXで書こう! - Qiita](https://qiita.com/aya-chan/items/26e25ce13306319c4f69)
[^6]: [卒論をLaTeXで書こう!(続編) - Qiita](https://qiita.com/aya-chan/items/6d0e175d8f42fc4f53de)
[^7]: [計数工学科LaTeXテンプレートについて - Qiita](https://qiita.com/aya-chan/items/4a7b9a369bac753ea743)
[^8]: [分割した LaTeX ファイルを subfiles を使ってコンパイルする](https://qiita.com/sankichi92/items/1e113fcf6cc045eb64f7)