【必見】Atomで作る快適な論文執筆TeX環境【Mac】【卒論】【LaTeX】

# この記事について

自分が卒業論文を書いていたときに使っていた執筆環境がけっこう便利だと思ったので共有してみようと思いました。
参考になれば幸いです。

Macで日本語で文章を書くことを前提としています。（uplatexとupbibtexを使います）
英語での執筆にも対応できるので適宜変更してください。

# この記事を読んでできること
![qiita-tex4.gif](https://qiita-image-store.s3.amazonaws.com/0/58141/de6a7cea-a767-b100-42e6-60a8ad1db299.gif "qiita-tex4.gif")


- `.tex` から `.pdf` への自動コンパイル/プレビュー
- 「、」「。」から「，」「．」への自動変換
- 引用（`bibtex`）、章立て（`chapter`や`section`など）の自動補完
- スニペット（`equation`や`table`など）の充実

-> [卒業論文のテンプレート](https://github.com/ken0nek/thesis-sample)

# brewの導入

まず準備としてHomebrewというMacのパッケージマネジャーをインストールします

- [Homebrew — The missing package manager for macOS](http://brew.sh/index.html)

 ターミナルで以下の1行を実行すればOK

```sh
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
```

## brewで必要なものをインストール

```sh
brew install ghostscript imagemagick
```

## brew caskで必要なものをインストール

| アプリ | 説明 |
|--------|--------|
|    [Atom](https://atom.io/)    |    Github製のエディタ    |
|    [BasicTex](http://www.tug.org/mactex/morepackages.html)     |    最小限のLatex環境パッケージ（MacTexをインストール済みの方は不要）   |
|    [Skim](http://skim-app.sourceforge.net/)    |    高機能PDFビュアー   |


もう既にAtomやSkimがインストールがされていたり、MacTexがインストール済みの方は必要なものだけをインストールしてください。

どれもインストールされていない方は以下の1行のターミナルで実行してください。

```sh
brew cask install atom skim basictex --appdir=/Applications
```

# Atomの設定

Atomにはパッケージといって独自の機能を追加する仕組みがあります。

## Atomでインストールするパッケージ 

Atomで、[Preferences]/[Settings] -> [Install]と進んで、以下の2つのパッケージをインストールします

| パッケージ | 説明 |
|--------|--------|
|    [language-latex](https://atom.io/packages/language-latex)    |  latexのシンタックスハイライトとスニペット |
|    [latexer](https://atom.io/packages/latexer)    | 引用や章立ての自動補完 |


ターミナルで以下の1行を実行しても上記のパッケージをインストールすることができます

```sh
apm install language-latex latexer
```

## ここまで

`equation`や`table`などのスニペット補完と参照の自動補完ができるようになりました。

![qiita-tex5.gif](https://qiita-image-store.s3.amazonaws.com/0/58141/6f8f6e25-1c2b-bfab-bc9c-c0377107f892.gif "qiita-tex5.gif")


# Skimの設定

次にSkimの設定をします。[Preferences] -> [Sync]でまずファイル更新の監視を有効にします。

![Screen Shot 2016-10-02 at 8.05.26 PM.png](https://qiita-image-store.s3.amazonaws.com/0/58141/ca456cd7-c6c5-b78f-554e-b8f82cd34cbc.png "Screen Shot 2016-10-02 at 8.05.26 PM.png")


しかし、これだけだとtexファイルの更新のたびに「更新しますか？」というダイアログが出てしまうので、以下の1行をターミナルで実行して自動更新させるようにします


```sh
defaults write -app Skim SKAutoReloadFileUpdate -boolean true
```

# uplatexのインストール、設定

`latex`や`platex`、`xelatex`でもそれぞれ用途にあった環境を使えばいいのですが、
ここでは日本語の処理をUnicodeで行なうように拡張された`platex`である`uplatex`を使いたいと思います。


basictexをインストールしただけだと、uplatexやupbibtexが使えないので追加でパッケージをダウンロードします

```sh
sudo tlmgr update --self --all
sudo tlmgr install uplatex latexmk collection-langjapanese
```

## フォント埋め込み

以下のサイトが役に立ちます。

* [TeXShop + MacTeX / UpTeX でのヒラギノ フォントの埋め込み](http://osksn2.hep.sci.osaka-u.ac.jp/~taku/osx/embed_hiragino.html)
* [TeX Live/Mac - TeX Wiki](https://texwiki.texjp.org/?TeX%20Live%2FMac)
* [MacTeX 2016 のインストール＆日本語環境構築法 (El Capitan 以前/以後両対応) - TeX Alchemist Online](http://doratex.hatenablog.jp/entry/20160608/1465311609)
* [TeX界の El Capitan 迎撃戦記 - TeX Alchemist Online](http://doratex.hatenablog.jp/entry/20151008/1444310306)

まとめると

```sh

cd /usr/local/texlive/2016basic/texmf-dist/scripts/cjk-gs-integrate
sudo perl cjk-gs-integrate.pl --link-texmf --force
sudo mktexlsr
sudo kanji-config-updmap-sys hiragino-elcapitan-pron
```

# latexmk

`latexmk`はその名の通り、`latex`の`make`を担ってくれるコマンドです
そのコマンドの設定ファイルが`.latexmkrc`というファイルです

（`rc`は`run commands`の略のようです。* [linux - What does the 'rc' in .bashrc, etc. mean? - Super User](http://superuser.com/questions/173165/what-does-the-rc-in-bashrc-etc-mean)）


`latexmk`により、`tex`から`pdf`の自動更新ができるようになります。

## .latexmkrcの作成、設定

【GUI】
任意のテキストエディタを開いて、以下の`~/.latexmkrc`のスクリプトをコピーして、`.latexmkrc`という名前でホームディレクトリに保存してください。（ホームディレクトリはDocumentsとかDesktopとかいうディレクトリがあるところです）

【CUI】
以下の`~/.latexmkrc`のスクリプトをコピーして、

```sh
pbpaste > ~/.latexmkrc
```
を実行します。

----


```perl:~/.latexmkrc
#!/usr/bin/env perl

$latex                       = 'uplatex -synctex=1 -halt-on-error %O %S';
$bibtex                      = 'upbibtex %O %B';
$dvipdf                      = 'dvipdfmx %O -o %D %S';
$makeindex                   = 'mendex -U %O -o %D %S';
$max_repeat                  = 5;
$pdf_mode                    = 3; # generates pdf via dvipdfmx

# Prevent latexmk from removing PDF after typeset.
# This enables Skim to chase the update in PDF automatically.
$pvc_view_file_via_temporary = 0;

# Use Skim as a previewer
$pdf_previewer               = 'open -a /Applications/Skim.app'; # Skimの場所を指定する
```

`$latex`内のuplatexをplatexやxelatexにすることでコンパイルの指定ができます

### 「、」「。」の変換

論文を書くとき句読点は全角の「，」「．」で書かなければいけない（?）のですが、Google日本語入力で設定を変更したりすると普段LINEやTwitterなどを使うときに不便です。その都度設定を変更するのも面倒です。

`~/.latexmkrc`ではグローバルな設定を行なうのですが、`.tex`が置いてあるディレクトリに`.latexmkrc`を置くとディレクトリ内の設定が優先されます。
全てのtexファイルで句読点変換をしたいとは限らないので、句読点自動変換をしたいディレクトリだけ変換のスクリプトを書いた`.latexmkrc`を入れるといいと思います。

`sed`というコマンドを使って、`tex`ファイルの中身の「、」「。」を「，」「．」に変換しています。

```perl:ディレクトリ内の.latexmkrc
#!/usr/bin/env perl
$latex = "find . -type f -name '*.tex' | xargs sed -i '' -e 's/、/，/g' -e 's/。/．/g'; uplatex -synctex=1 -halt-on-error %O %S";
```


```sh:ディレクトリ内の構成例
.
├── .latexmkrc
└── sample.tex
```

## latexmkの使い方
ここまでできたらあともう少しです。

### コンパイル 
ただコンパイルしてpdfを出力するだけ

```sh
latexmk sample.tex
```

### 閲覧
コンパイルしてpdfを確認する

```sh
latexmk -pv sample.tex
```


### 監視（自動更新）

ターミナルで以下の1行を打つと、Atomでtexファイルに更新があるたびにpdfの更新が行なわれます。

```sh
latexmk -pvc sample.tex
```

### クリーン

中間生成ファイルを削除したいときに使います。

```sh
latexmk -C sample.tex
```


# まとめ

これでMacでAtomを使ったTeXの執筆環境が整ったと思います。

自分が文章を書くときは、まずAtomでディレクトリを開き、そのあと監視を行なうコマンドを打ちます

```sh:作業の流れ
cd （texファイルがあるディレクトリ）
atom . 
latexmk -pvc hoge.tex
```

# 補足について

ここまでである程度の環境が揃ったと思うのですが、texのプロジェクトについて思うことや付け足したいことをメモとして残しておきます。

## ディレクトリ構成

1つのディレクトリに全てのファイルを置いておくのは小さいプロジェクトでは不便ではないと思いますが、
卒論など章や節の多くなるプロジェクトだと目的のファイルを見つけるのが面倒になります。

なので、序論、先行研究、手法、実験、結論ごとにディレクトリを分けると見通しがよくなります。
これはさすがにやりすぎかもしれませんが、適宜自分にあった粒度で調整してください。
章ごとや節ごとにディレクトリを分けるとgit管理もしやすくなります。

```ディレクトリ構成の例
.
├── .gitignore
├── .latexmkrc
├── Makefile
├── backmatter
│   ├── acknowledgement.tex
│   └── main.tex
├── conclusion
│   ├── hoge.tex
│   ├── main.tex
│   └── piyo.tex
├── experiment
│   ├── hoge.tex
│   ├── main.tex
│   └── piyo.tex
├── fig
├── frontmatter
│   ├── abstract.tex
│   └── main.tex
├── introduction
│   ├── main.tex
│   ├── motivation.tex
│   ├── objective.tex
│   ├── organization.tex
│   └── preface.tex
├── main_bibliography.bib
├── method
│   ├── hoge.tex
│   ├── main.tex
│   └── piyo.tex
├── misc
├── related-research
│   ├── hoge.tex
│   ├── main.tex
│   └── piyo.tex
├── thesis.sty
└── thesis.tex
```

### latexerの設定

latexerでは`\ref`や`\cite`内の文字列を自動補完してくれるのですが、デフォルトでは補完候補の検索範囲は元ファイルと同階層のファイルのみです。

なので、ファイルの先頭に

```
%!TEX root = ./thesis.tex
```

or 

```
%!TEX root = ../thesis.tex
```

のように元のファイルを指定する必要があります。

## サンプルプロジェクト

* [ken0nek/qiita-tex: 「、」「。」を「，」「．」に変換するサンプル](https://github.com/ken0nek/qiita-tex)
* [ken0nek/thesis-sample: 卒業論文のテンプレート](https://github.com/ken0nek/thesis-sample)

## Makefile

以下のようなMakefileを作っておくとlatexmkのコマンドを覚えておかなくても
`make watch`や`make clean`とするだけで所望の処理を行なうことができます。

```sh:Makefile
INPUT=thesis.tex

OUTPUT=thesis

// VIEWER=open -a /Applications/Skim.app

all:
	latexmk -jobname=$(OUTPUT) $(INPUT)

clean:
	latexmk -CA -jobname=$(OUTPUT) $(INPUT)
	find . -name *.aux -delete
	find . -name *.log -delete
	rm *.bbl

view:
	latexmk -pv -jobname=$(OUTPUT) $(INPUT)

watch:
	latexmk -pvc -jobname=$(OUTPUT) $(INPUT)

```

## 画像の埋め込み

~~texに画像を埋め込むときは、`eps`に変換しないといけないと言われますが、最近ではそのままpdf埋め込みで良いようです。~~
@zr_tex8rさんからコメントをいただきました。
以下のように、pngでもjpgでもそのまま読み込めるようです。

```tex:PNG画像を読み込む
\includegraphics[width=4cm]{image.png}
```

* [日本人のための LaTeX タブー集 ～画像読込編～ - Qiita](http://qiita.com/zr_tex8r/items/5413a29d5276acac3771)

----
次の区切り線まで読み飛ばしてください

pngやjpgをpdfに変換するには、ImageMagickを使います。

```sh
brew install imagemagick
```

```sh
convert hoge.png hoge.pdf
```


画像があるディレクトリに移動して、
以下のコマンドを実行すればフォルダ内全ての画像を変換できます。


```zsh
for img in $(ls)
	convert $img $(basename $img $(echo ${img#*.}))pdf
```

【実行例】

![Screen Shot 2016-10-02 at 10.05.51 PM.png](https://qiita-image-store.s3.amazonaws.com/0/58141/2879114b-786a-e8fc-9662-b946b2eed3fa.png "Screen Shot 2016-10-02 at 10.05.51 PM.png")

---

### mediabb

画像を埋め込むときにいちいちサイズ指定をするのはめんどくさいのでmediabbというパッケージを使います。

* [LaTeX：Bounding Boxなしでpdfを読み込むためのstyファイル（転載） – HimaJew Blog](http://hima-jew.chobi.net/Blog/wordpress/?p=251)
* [超簡単！TeXにpdf形式の図を挿入する方法 - しろかい！](http://shirokai.hatenablog.com/entry/tex-figure-pdf)
* [dvipdfmx で mediabb できない件（1） - マクロツイーター](http://d.hatena.ne.jp/zrbabbler/20140803/1407089421)

## Skimを使わずにAtomだけでPDFプレビューまで完結させる方法

- pdf-view

というパッケージを追加でインストールします

しかし、そのままだと日本語の表示ができないので、

>~/.atom/packages/pdf-view/node_modules/pdfjs-dist/build にある pdf.js の適当なところ（27行目くらい）に、以下の2行を追加する。

> PDFJS.cMapUrl = "../cmaps/";
> PDFJS.cMapPacked = true;

（[Atomでplatex->dvipdfmxチェーンを実装する話 | 愛のらくがき帳](http://blog.ishotihadus.com/?p=95)）

上記の設定を追加します。

## Tables Generator

このサイトはGUIで表を作るとlatexやmarkdownの書式に合わせてテキストを書き出してくれるのでとても便利です。

* [Create LaTeX tables online](http://www.tablesgenerator.com/)

# 参考

* [Atom - TeX Wiki](https://texwiki.texjp.org/?Atom)
* [Latexmk - TeX Wiki](https://texwiki.texjp.org/?Latexmk)
* [atomで快適LaTeX編集環境 - ayihiscope](http://ayihis.hatenablog.com/entry/2016/09/24/143641)
* [AtomでTexする(Mac) - Qiita](http://qiita.com/_ha1f/items/01b9e69f93eaea4749d5)
* [Ochiailab Tips: AtomエディタでさいつよのLaTeX環境を構築する](http://ochiailab.blogspot.jp/2016/08/atomlatex.html)
* [Mac の Atom で Latex - Qiita](http://qiita.com/NariseT/items/4b80c80f8e39ea35f597)
* [MacにBasicTexで最小限のTex環境構築 - Qiita](http://qiita.com/yohm13/items/0b1c5a65cb9ac968a25f)
* [Auto-refresh and mac os](http://tex.stackexchange.com/a/60858)
* [Atom | 愛のらくがき帳](http://blog.ishotihadus.com/?cat=20)
* [日本人のための LaTeX タブー集 ～画像読込編～ - Qiita](http://qiita.com/zr_tex8r/items/5413a29d5276acac3771)
* [OS X El CapitanでTeX環境をゼロから構築する方法 - Qiita](http://qiita.com/hideaki_polisci/items/3afd204449c6cdd995c9)
* [OS X (El-Capitan) に最小限の LaTeX 環境を構築 - Qiita](http://qiita.com/yunarsoa/items/868eece57c91bd526c7f)
* [El Capitanの前TeX環境を消してTeX Live 2015をインストールしてみた | icchi's blog](http://blog.icchi.me/texlive-install-elcapitan/)
* [MacでのTeX環境設定メモ – Ki_chi@Blog](http://ki-chi.jp/?p=679)
* [Latexmkから学ぶPDF化までの処理の流れ - Qiita](http://qiita.com/Rumisbern/items/d9de41823aa46d5f05a8)
* [Mac OS X El Capitan に LaTeX インストール | 澍法雨](https://ryogan.org/blog/2015/12/28/mac-os-x-el-capitan-%E3%81%AB-latex-%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB/)
* [upTeX,upLaTeX - TeX Wiki](https://texwiki.texjp.org/?upTeX%2CupLaTeX)
* [upLaTeXを使おう [電脳世界の奥底にて]](http://zrbabbler.sp.land.to/uplatex.html)
* [天地有情 [LaTeX][LuaLaTeX]　　PDF「日本語しおり」の作り方　～備忘録～](http://konoyonohana.blog.fc2.com/blog-entry-68.html)
* [El Capitan に LaTeX 環境を作る - Qiita](http://qiita.com/sira/items/d7f5c411ccb0f90c43d8)
* [卒論/修論/博論のためのモダンな LaTeX の書き方 - 情報系大学院生のWebメモ](http://webmem.hatenablog.com/entry/how-to-write-a-modern-latex-for-academic-papers)
* [卒論・修論をLaTeXで書いて情弱から脱却を計るためのチェック項目16+α - けつあご日記](http://www.ketsuago.com/entry/2016/01/30/191934)

@tuvistavie Danielさんのプロジェクトを大変参考にさせていただきました。

* [tuvistavie/bachelor-thesis: Repository for my bachelor thesis](https://github.com/tuvistavie/bachelor-thesis)

---

長くなってしまったので補足を別記事に分けるかもしれません。