R Markdown 環境構築 & トラブルシューティング

R の統合開発環境 RStudio を使っていて「RMarkdownなる便利なものがあるのか！」ということで環境構築をしたら手強かったので備忘録＆共有をかねて記事化しますた。

## 環境

- macOS Mojave 10.14.4
- texlive 2018 (もともと入っていたTeX)

## R & RStudio のインストールについて

- R は[ココ](https://cran.r-project.org/bin/macosx/)から `.pkg` をダウンロード、インストール
- RStudio は `brew cask install rstudio` とかでインストール ([参考](http://tristanpenman.com/blog/posts/2015/10/20/installing-r-and-rstudio-on-mac-os-x/))

しました。


## TinyTeX のインストール

RMarkdown `.Rmd` から pdf へのコンパイルを行うために [TinyTeX](https://yihui.name/tinytex/) という小構成の TeX Distribution を使う必要があるのですが、これのインストール時に注意があります。

### つまずきポイント1 - 他のTeX Distributionが入っている

TeX は `tlmgr` という専用のパッケージ管理ツールを持っているのですが、複数の Distribution がインストールされている (自分の場合は texlive と TinyTeX が混在してしまった状態) と PATH の設定によってどちらが使われるのか不定となり、正しく動作しません。

#### 解決策 - TinyTeX 以外の Distribution は削除する

あまり気が乗らないかもしれませんが、こうしてしまうのがおすすめです。
texlive なら `/usr/local/texlive` 以下をごっそり消してしまえばほぼおしまいです。

### Main

TinyTeX のインストールには2つ方法があります。
1つは RStudio のコンソールからインストールしてもらう方法:

```R:R-console
install.packages('tinytex')
tinytex::install_tinytex()
```

もう1つは shell からインストールする方法:

```sh:shell
curl -sL "https://yihui.name/gh/tinytex/tools/install-unx.sh" | sh
```

:tada:

## 早速 RMarkdown を書く (日本語なし)

RMarkdown を書き始める前に一旦サンプルのファイルを pdf 化できるか試しましょう。
RStudio にて Rmarkdown を作成します:
![gen-rmarkdown](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/150487/ced2c112-a9e3-188c-db62-c48b8396bec1.png)
作成できたら `Command + Shift + k` で pdf にコンパイルします。

おそらくここで必要なライブラリなどのインストールがなされるのですが、2つほどトラブルが起きる可能性があります。

### つまずきポイント2 - Font が見つからない?

```
Font TU/lmr/m/n/10=[lmroman10-regular]:mapping=tex-text at 10.0pt not loadable: ...
```

このエラーは TinyTeX の LoadPath 内に指定されたフォント (上記の場合 lmroman) が見つからないことを意味するそうです。

#### 解決策 - `tlmgr` からフォントをインストールする

```sh:shell
tlmgr install lm
```

### つまずきポイント3 - 必要なライブラリをインストールしているはずなのにエラーが出て止まる

R Markdown の console に流れていくログを見てると (記憶を辿っているので異なるかも）:

```sh:R-console
tlmgr search --file --global '/hogehoge.sty'
tlmgr install hogehoge
...
...done mktexlsr
tlmgr path add
tlmgr search --file --global '/hogehoge.sty'

! LaTeX Error : hogehoge.sty not found
```

`tlmgr install` した後に検索をかけても　`.sty` が無いと言われてしまう現象がありました。

#### 解決策 - パッケージ一覧表を (残念ながら手動で) 更新する

```sh:shell
sudo mktexlsr
```

TeX には ls-R というパッケージの一覧ファイルがあり、これの更新をしないとインストールを行っても有効にならないとのことでした。
TinyTeX は `sudo` なしで実行できることもウリにしているため、このコマンドも `sudo` がつかなかった事により引き起こされた事象なのかなと推察しました。

:tada::tada:

## RMarkdown に日本語を書く

[こちらの記事](https://qiita.com/Atsushi776/items/9ef1e5d744e2b91c61ee)にて書かれているように、ヘッダーの部分を書き換えればできるはず:

```diff:sample.Rmd
---
- output: pdf_document
+ output:
+   pdf_document: 
+     latex_engine: xelatex 
+ documentclass: bxjsarticle
+ classoption: xelatex,ja=standard
+ geometry: no
---
```

ですが、まだ伏兵がいらっしゃいます。

### つまずきポイント4 - Option clash...

```sh:R-console
! LaTeX Error : Option clash for package geometry
```

#### 解決策 - テンプレートファイルから geometry の読み込み部分をなくす

[こちらの記事](https://qiita.com/nozma/items/1c6b000b674225fd40d7#-latex-error-option-clash-for-package-geometry)を参考に...

:tada::tada::tada:

## 幕引き

とりあえず日本語をきちんと書ける状態まで持ち込むことに成功しました...
手こずった時の参考になれば幸いです:smile:

## おまけ

RStudio で日本語入力すると挙動不審なので、好きなエディタで編集して shell からコンパイルできるように設定しました。

- [Knitr with R Markdown](https://kbroman.org/knitr_knutshell/pages/Rmarkdown.html)

```sh:.zshrc
export PATH=$PATH:/Applications/RStudio.app/Contents/MacOS/pandoc
function rmd2pdf() { R -q -e "rmarkdown::render('$1', output_format = 'pdf_document')" }
```

```sh:shell
rmd2pdf sample.Rmd
```

:tada::tada::tada::tada: