LaTeX (Ph. D dissertation)

# LaTeX
組版（くみはん）を行うプログラムパッケージ。Latexを用いて、博士論文執筆（英語で）したときのメモ。ここでは

- macを使っている
- ドキュメントはgitで管理している
- 使用言語は英語

ことを前提にしたメモ書きを記す。

## テキストエンコーディング
人間が読める文字に対して、PCで理解させるために番号を振っている。これを文字コードと呼び、文字コード指定が違うと、文字化け（書き手の想定していない文字が呼び出される）が発生する。

- UTF-8
    - Unicode用の符号化方式の一つで、世界的に最もポピュラー。
- JIS
    - インターネット上で標準的な文字コード
- Shift_JIS
    - ASCIIコードの文字に日本語の文字を加えたもの

## TeXの種類

|種類|説明|
|:--|:--|
|pTeX|和文組版を可能にする|
|upTeX|pTeXをUnicode対応させたもの|
|pLaTeX|和文組版を可能にする|
|upLaTeX|pTeXをUnicode対応させたもの|
|e-pTeX|pTeX + e-TeX|
|e-upTeX|upTeX+e-TeX|

## documentclass

|種類|英文|和文|和文(新)|
|:--:|:--:|:--:|:--:|
|論文|article|jarticle|jsarticle|
|本|book|jbook|jsbook|
|報告書|report|jreport|-|


# 論文の構成
## 目次

```TeX
\tableofcontents % 目次
\listoffigures   % 図一覧
\listoftables　　 % 表一覧 
```

## Appendix（付録）の出力

```TeX
\appendix
```
と宣言すると、それ以降のページが「Appendix」のページとなる。
通常のページと同様 `\chapter`、`\section` と宣言すれば自動的に章番号を振っていってくれる。この際に通し番号は Chapter1,2..ではなくA1, B1....となる。

# 差分ファイルの出力

```
latexdiff-vc --git --flatten -r <ハッシュ値> main_document.tex
```

これにより `main_document-<ハッシュ値>.tex` の名前がついたファイルが生成される。あとはコンパイルするだけで、修正前後の箇所が色付きで示される（ハッシュ値は `git log` で調べれる）。


## 表を90度回転させる

```latex
% 自分の環境にあった方を（1or2）宣言する
\usepackage[dvipdfmx]{pdflscape} % 1
\usepackage{pdflscape}           % 2

% で90度回転させたい箇所を、次のもので囲む
\begin{landscape}
\end{landscape}
```

こうすることで90度回転し、かつ見やすいアウトプットになる。

# 数式の書き方

```tex
% 基本的な数式
\begin{equation}
\end{equation}

% 複数の数式をまとめてかく（それぞれに式番号が割り振られる）
\begin{eqnarray}
\end{eqnarray}

% 式を自分の折りたい箇所で折る
% 「&」でマークした箇所の先頭が揃えられた形で出力される。
\begin{equation}
    \begin{split}
        y =& x^4 + x^3 
           &+ x^2 + x^1
    \end{split}
\end{equation}
```

## その他
- 数式中にハイフン（マイナス記号ではない）を打ちたい場合

```tex
\mathchar`-　%数式中のハイフン。普通に「-」と打つとマイナス記号として出力されてしまう
```

# 参考文献の書き方 (bibtex)

Bibtex では本文で引用した順（もしくは書籍のアルファベット順）に並べて、自動的に参考文献リストを作ってくれる。重要なことはその命令をプリアンプルの場所に書くこと（つまり `\begin{document}`の前!!）。

## そもそも

自分の業界では、

```
著者名, タイトル, 雑誌名 巻数 (発行年) ページ番号
```

という並びで書くのが一般的（たぶん）。Bibtexもこの順番で書いてくれるのだけれど、デフォルトの設定では納得の行かないフォーマットで出力されてしまう。そのためスタイルファイルをなんとかイジる必要もある（`.bst`）。

## bibtexの使い方


```shell
bibtex main # main.texではなく、拡張子を覗いたタイトルを引数に渡す
```
これで main.bbl ファイルが出力される。その後に2回main.texをコンパイルすることで、相互参照が正しくファイルの中に埋め込まれる。

##　参考文献の情報
- DOI (Digital Object Identifier)
    - ジャーナル財団がつける番号+ジャーナルがつける番号
    - 一度付けられた番号は恒久的に扱われ、`https://doi.ort/<DOIコード>`とすることで論文の元ページへアクセスする（リダイレクトされる）ことができる。

# マクロ
Latexでは（通常のプログラミング言語と同様）マクロを定義することができる。

```tex
\newcommand{\mymacroA}{マクロの中身}
\newcommand{\mymacroB}[1]{マクロの中身、引数#1も取れる。}
```

引数を取るもの、取らないものの二種類を説明した。文中で`\mymacroA`とすれば「マクロの中身」という文字列が表示されることとなる。引数の方も文中で`\mymacroB{text}`とすれば「マクロの中身、引数testも取れる」と展開される。以上はユーザー定義のマクロであり、通常はこの`\newcommand`を使えれば問題はない。

Latex内部のスタイルファイルではもう少しこみいったことをしている。マクロの名前がユーザー定義のものと被らないように、`\def`コマンドを使って以下のように定義している。

```tex
\makeatletter
\def\@maketitle ...
\makeatother
```

例に`\maketitle`を取る。


## bstファイルの編集

デフォルトのスタイルファイルを編集して、気の済むように色々したい場合。`unsrt.bst` を編集する方法をメモする。
- https://www.okomeda.net/wp/506/ 
を大いに参考にさせて頂きました

### 基本事項

```tex
FUNCTION {format.title} % 関数の名前
{ title empty$
    {""}                % title が空だったらどうするかの処理を記述する
    { なんかの処理 }　　　 % 空じゃない場合の処理を記述する
  if$ 　　　　　　　　　　 % 条件終了
}
```

### 自分のした修正箇所
- 論文タイトルを表記のまま出力させたい
    - デフォルトでは文頭以外小文字になってしまう。それを割けるためには `*.bib`の中で該当の単語を`{}`で囲めばいいのだが、スタイルファイルを編集すればそのような作業も必要なくなる。
    - コメントアウトして下記のように修正すればいい。（さらに斜体にするために `emphasize` を使用した）

```tex
FUNCTION {format.title}
{ title empty$
    {""}
    { title emphasize } % { title "t" change.case$ }
  if$ 
}
```


- 巻数 (年数）ページ番号、の順にしたい


# 小技

```latex
\mathchar`- % 数式中のハイフン
```

# 英文スペルチェックをする

LatexをMS wordで開ける形式(Rich Text Format; rtf)に変換して、wordのスペルチェッッカーを使う。

## 事前準備
```shell
brew install imagemagick
brew install latex2rtf
```

## 使い方


# おまけ
## ファインマン図の書き方
JaxoDrawと呼ばれるツールを使用する。GUI上でお絵かきしたものを、LateXを通してコンパイル→epsに変換してくれるもの。

インストールはこちらから：
- http://jaxodraw.sourceforge.net/index.html

### 必要なセットアップ
axodraw4j.styというスタイルファイルが必要となるので、それをまず取ってくる。

 - http://jaxodraw.sourceforge.net/download/axodraw4j.html

新しいスタイルファイルを持ってきたときには以下の作業が必要となる

```shell
cp -r axodraw4j_2008_11_19 /usr/local/texlive/2020/texmf-dist/tex/latex/axodraw
# ls /usr/local/texlive/2020/texmf-dist/tex/latex/axodraw
# README.txt            axodraw4j-summary.txt axodraw4j.sty         try-axo4j.tex
sudo mktexlsr
# mktexlsr: Updating /usr/local/texlive/2020/texmf-config/ls-R... 
# mktexlsr: Updating /usr/local/texlive/2020/texmf-dist/ls-R... 
# mktexlsr: Updating /usr/local/texlive/2020/texmf-var/ls-R... 
# mktexlsr: Updating /usr/local/texlive/texmf-local/ls-R... 
# mktexlsr: Done.
```

TeXが読み込めるパスに.styファイルを置いて、スタイルファイル一覧を`mktexlsr`で更新する（コメントアウトしている部分は補足情報）。これで使えるようになる。インストールした jaxodrawを起動する（クリックか `java -jar ...jar`で）。
![ScreenShot 2020-09-17 16.12.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/137120/764785bc-c209-b5ca-5f75-37d409cc07d5.png)
Options→Preferencesから、
![ScreenShot 2020-09-17 16.12.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/137120/e5caa847-7fa8-e4c3-10cd-c8d5047199f6.png)
の画面を呼び出して、「Preferred Postscript viewer」、「Latex Path」、「dvips path」を自分の環境に合うように編集する。左下の「Save」
を押して、右下「OK」で初期設定は終了。

### 出力方法
左上の File→Exportで好きな場所、好きなフォーマットで出力させることができる（一気にPDFに変換できるわけではなさそう）。Latexフォーマットで出力させればそのままコンパイルできるし（axodraw4j.styの設定が正しく終わっていれば）、pdfにしてスライドに貼っつけたりできる。


## ニューラルネットワーク図を書く

- http://alexlenail.me/NN-SVG/index.html


## Keynote
### 太字ベクトル
`\bm{}`がkeynoteの数式環境では使用できず、図を作る際に少し困ることがあった。`\bm`を使うのではなく

```tex
\boldsymbol{A}
```

を使用すれば良い。


## 表現

- requirement は applied