Emacsで英語論文を書くときに便利なパッケージと設定

この記事は[.emacs Advent Calendar 2016](http://qiita.com/advent-calendar/2016/dot-emacs ".emacs Advent Calendar 2016")の11日目です。空いていたので、埋めるような形で書いてみます。

国際会議の論文を書いているときに改めてEmacsの設定を見つめ直す機会があった（論文書きたくないという現実逃避がそうさせた）のでその兼ね合いで見つけたものの紹介などを。
より正確には、Emacsでtexを書いたり、Google翻訳にかけたりするときに便利なパッケージ情報をいくつかまとめたものになります。
ほんとは、追加でやりたいことがあったんですけど、そんなことしてる場合じゃなさそうなので最後にやりたかったことも書いておきます。

# YaTeX
YaTeXは、TeXのメジャーモードで日本人のユーザが多いTeXのメジャーモードです。
C-cがYaTeXのprefixキーとして割り当てられており、それに何かのキーを追加して入力することで機能を呼び出すという感じになってます。
機能はめちゃめちゃあるので、気になる人は参考ページのリンクを辿ってください。
ぶっちゃけ導入して間もないので使えている機能は限られていますが、それでも便利だなあと思った機能を紹介しておきます。

### コンパイルができる
以下のコマンドでなんとEmacs上からコンパイル可能です。（途中で止めることも可能）

- latexコマンド起動 → `[prefix] t j `
- latex+dvipdfmx起動 → `[prefix] t d`
- latexプロセスのkill → `[prefix] t k`

### 補完が便利
beginとendの補完とかそういうのは当たり前のようにあるんですけど、何よりも便利なのが数式イメージとかギリシャ文字の補完をしてくれることです。
私は研究の都合でβをめちゃめちゃ使うのでかなり便利でした。
この2つの補完は数式モード内でのみ発動します

- 数式イメージ補完 → ;
- ギリシャ文字イメージ補完 → :

### 設定
設定まわりも紹介。個人の環境にもよると思いますが、デフォルトでplatexが動く人と動かない人がいるようで、私はちゃんと設定してあげる必要がありました。
あと、私はprefixがC-Cっていうのも嫌だったのでC-tに変えてます。

```el
(setq auto-mode-alist
      (cons (cons "\\.tex$" 'yatex-mode) auto-mode-alist))
(autoload 'yatex-mode "yatex" "Yet Another LaTeX mode" t)
(setq YaTeX-prefix "\C-t")
(setq tex-command "platex")
(setq bibtex-command "pbibtex")
(setq dviprint-command-format "dvipdfmx %s")
;; use utf-8 on yatex mode
(setq YaTeX-kanji-code 4)
```

# latex-math-preview.el
これは名前の通り、数式のプレビューができるパッケージです。YaTeXと相性がいいので、一緒に導入して損はないと思います。
YaTeXと共存させる場合は下記のような設定を入れるとYaTeXのprefixキーと共存できて便利だと思います。

```el
(add-hook 'yatex-mode-hook
         '(lambda ()
         (YaTeX-define-key "p" 'latex-math-preview-expression)
         (YaTeX-define-key "\C-p" 'latex-math-preview-save-image-file)
         (YaTeX-define-key "j" 'latex-math-preview-insert-symbol)
         (YaTeX-define-key "\C-j" 'latex-math-preview-last-symbol-again)
         (YaTeX-define-key "\C-b" 'latex-math-preview-beamer-frame)))
(setq latex-math-preview-in-math-mode-p-func 'YaTeX-in-math-mode-p)
```

# reftex
これは\citeを貼るときにすごい便利です。
`C-c [`でbibファイルからも参考文献が検索できるので、いちいち確認する必要がないです。
また、Yatexモードと一緒に使う場合はこんな感じで設定しておくといいです。

```el
;; reftex-mode
(add-hook 'yatex-mode-hook 'turn-on-reftex)
```

# google-translate.el
英語で論文書いてるとEmacsとGoogle翻訳行き来するのが面倒になるのでこれは必須です。
Google翻訳も賢くなりましたから、今まさに使い勝手がアップしているといえますね。
しかし、これはデフォルトではどの言語からどの言語に翻訳するのかを入力する必要があります。
そのあたりを解決する設定をるびきち先生が書かれているので、その設定を持ってくると更に便利に活用できます。

```el
(require 'google-translate)
(defvar google-translate-english-chars "[:ascii:]’“”–"
  "これらの文字が含まれているときは英語とみなす")
(defun google-translate-enja-or-jaen (&optional string)
  "regionか、現在のセンテンスを言語自動判別でGoogle翻訳する。"
  (interactive)
  (setq string
        (cond ((stringp string) string)
              (current-prefix-arg
               (read-string "Google Translate: "))
              ((use-region-p)
               (buffer-substring (region-beginning) (region-end)))
              (t
               (save-excursion
                 (let (s)
                   (forward-char 1)
                   (backward-sentence)
                   (setq s (point))
                   (forward-sentence)
                   (buffer-substring s (point)))))))
  (let* ((asciip (string-match
                  (format "\\`[%s]+\\'" google-translate-english-chars)
                  string)))
    (run-at-time 0.1 nil 'deactivate-mark)
    (google-translate-translate
     (if asciip "en" "ja")
     (if asciip "ja" "en")
     string)))
(global-set-key (kbd "C-c t") 'google-translate-enja-or-jaen)

```

# おまけ
上記のパッケージに加えて`popwin`というパッケージを入れておくと更に便利になります。
これは、補完等の際にポップアップのようなバッファが現れてその中に補完内容等が表示されるパッケージです。
これがあると、`google-translate.el`や`latex-math-preview.el`が更にパワーアップするので最高です。
私は、以下のように設定してます。 [^おまけ1]

```el
(require 'popwin)
(setq display-buffer-function 'popwin:display-buffer)
(setq popwin:popup-window-position 'bottom)
(push '("*quickrun*") popwin:special-display-config)
(push '("*Google Translate*") popwin:special-display-config)
(push '("*latex-math-preview-expression*") popwin:special-display-config)
```


# あとがき
せっかく`.emacs.d`についてなので本当は`YaTeX-mode`で唯一気になっている下付き文字のサイズが変わらない部分について設定でどうにかするみたいなのをちゃんと調べてやりたかったのですが、論文放置してここまで紹介した上にそこまでやるとさすがに本末転倒すぎるのでやめました。
そのうち気が向いたら加筆するかもしれません。

他にも論文書くならこれ入れたら便利！みたいなパッケージや設定があると知りたいです。

また、今回私はあえてインストール方法については特に言及しませんでした。
それは私がel-getに頼っているため最近`M-x package-install`とか`M-x package-list-packages`とか使ってなくてすっかり忘れているためです。
というわけで、インストールについては各自頑張ってくださいという投げやりな感じで終わりたいと思います。

さてと、添削された論文の修正やろっと・・・


# 参考ページ
- Yet Another TeX mode for Emacs: https://www.yatex.org/
- 野鳥: https://www.yatex.org/info/yatexj.html
- 初心者のための Emacs と YaTeX (+RefTeX) を使った文書作成のチュートリアル: http://d.hatena.ne.jp/ckazu/20100107/1262871971
- TeX環境構築： Emacs+YaTeX+RefTeX: http://keisanbutsuriya.hateblo.jp/entry/2015/03/13/175219
- Ubuntu12.04で自己満足用LaTeX環境構築: http://myuon-myon.hatenablog.com/entry/2013/02/07/185527
- latex-math-preview.el: http://transitive.info/software/latex-math-preview/
- google-translate.el と popwin.el で翻訳作業が捗った件: http://qiita.com/okonomi/items/f18c9221420eca47ebc6
- google-translate.el : 【設定パワーアップ】Google翻訳で言語自動判別しつつ英訳・和訳する！: http://emacs.rubikitch.com/google-translate/
- [Emacs] ヘルプバッファや補完バッファをポップアップで表示してくれるpopwin.elをリリースしました: http://d.hatena.ne.jp/m2ym/20110120/1295524932


## 注釈

[^おまけ1]: 私はquickrunも導入していてその結果もpopwinに投げるようにしている