論文執筆のためのVim Plugin

# 記事の目的
Vimを使って英語論文を書くときに便利なPlugin等を紹介します。
Markdownで論文を書いて、Pandocで.docxへ変換することを前提としています。
Vim Pluginの入れ方や管理方法については別の記事をご覧ください。

# 環境
- Alpine Linux (Docker)

他の色んな環境でも同じようにできると思います。

# 英語文法チェック
- [rhysd/vim-grammarous](https://github.com/rhysd/vim-grammarous)

<img width="962" alt="gcheck.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/304493/cce312ab-bdd1-a237-2fd2-f62aa35c0a3b.png">

[LanguageTool](https://languagetool.org) をVimにて使用するためのPluginです。
最後には英文校閲業者に依頼をするとは思いますが、自分でもある程度チェックできるといいですよね。

### 使用準備
#### インストール
基本的にはVundle等、お手元のVim Plugin管理ソフトに rhysd/vim-grammarous を加えるだけです。
LanguageTool本体は`wget`or`curl`で勝手に入れてくれます。
ただし、Java8+ が必要になりますので、入っていない場合はインストールが必要です。
Java Runtime Environment (JRE) というやつですね。
筆者環境では`RUN apk add -f openjdk11-jre-headless`で入れました。
### スペルミス検出の有効化
このプラグインだと何故か、スペルミス（grammar→gramar等）のチェックをしてくれません。
スペルチェック機能は最新のVimに標準搭載されています。
この標準チェック機能をVim-Grammarousと併用するために、`~/.vimrc`へ下記を追記します。

```vim
let g:grammarous#enable_spell_check=1
```


### 使用方法
- `:GrammarousCheck` ファイル全体の校閲を実行
- `:GrammarousReset` 校閲を終了（ハイライト等をオフにする）  
以下は、Grammarousのウィンドウへ切り替え（`Ctrl+w → j`）た状態で
- `f` ウィンドウに表示されているエラーを自動修正する
- `r` ウィンドウに表示されているエラーを修正せず除外する
- `n` 次のエラーのある箇所へ移動する

他にも、特定のエラーを表示しないようにする（受動態を認める等）といった様々な設定ができます。
詳細は[公式ページ](https://github.com/rhysd/vim-grammarous)を確認してください。

### 使用感
今まではOffice Word + Grammarlyプラグインを使っていました。
Grammarlyと比べるとLanguageToolの校正精度はイマイチ、か…？
まぁ最後には業者に校閲してもらうし。

### 代替Plugin
- [dpelle/vim-LanguageTool](https://github.com/dpelle/vim-LanguageTool) ←自分でLanguageToolをインストールしないといけないようで面倒そうだった

# 類語検索
- [benshuailyu/online-thesaurus-vim](https://github.com/benshuailyu/online-thesaurus-vim)

<img width="965" alt="thesa.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/304493/17e9ad9e-e024-8e4e-5f97-a99fab50d7a6.png">

適切な英単語を探したり、同じ単語を繰り返し使わないためには類語検索が便利です。
超メジャーなオンライン類語辞典である[Thesaurus.com](https://www.thesaurus.com)をVimから利用するプラグインです。

### インストール
お手元のPluginマネージャーで普通にどうぞ。
ただし、PythonでコンパイルされたVimが必要とのことです。
`:py print('hello')`か`:py3 print('hello')`が動作すればOKです。

### 使用方法
`<Leader>t`で、現在カーソルが乗っている単語の類語が表示されます。
<Leader>のデフォルトは`\`なので、`\` → `t`と入力すればOKです。

### 使用感
便利です。
Wordだと 単語を選択 → 右クリック → （長いメニューから）類義語  とクリックする必要があったので、だいぶ時短です。

### 代替Plugin
- [beloglazov/vim-online-thesaurus](https://github.com/beloglazov/vim-online-thesaurus) ←なんかうまく動きませんでした

# 参考文献リスト作成
- [jalvesaq/zotcite](https://github.com/jalvesaq/zotcite)

![ezgif-7-b8a16d4e9ebe.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/304493/6d178e2a-a9ae-9f25-c6e9-cceeed976239.gif)

[Pandoc-citeproc](https://github.com/jgm/pandoc-citeproc/blob/master/man/pandoc-citeproc.1.md)を使うと参考文献リストを自動生成してくれますが、その使い方は少々大変そうです
（実際に使ったことはないので間違っていたら教えてください）。
まず、文献管理ソフト等を用いて引用する論文のリストを.bibファイルに出力します。
ひとつひとつの参考文献にはキーが振られますので、自分の文書の適所にそのキーを入力します。
論文で引用する文献を漏らさずリストアップするのも大変ですし、
キーを確認しながら文書に打ち込んでいくのも面倒です。

zotciteは文献管理ソフト[Zotero](https://www.zotero.org)とVimを連携させ、その手間をかなり削減してくれます。
pandoc-citeprocと一緒に使い方を解説します。

### 使用準備
#### Pandoc-citeproc
まずpandocやpandoc-citeprocのインストールですが、[こちらの記事](https://qiita.com/sky_y/items/3c5c46ebd319490907e8)が役に立つかと思います。
筆者はDockerで準備したかったので、下記のようなDockerfileを作りました。

```Dockerfile
FROM alpine:latest

RUN apk update \
&&  apk upgrade --available \
&&  apk add -f --no-cache \
      wget build-base make cmake gcc gmp curl xz perl cpio coreutils \
      binutils-gold tar gzip unzip libc-dev musl-dev ncurses-dev gmp-dev \
      zlib-dev expat-dev libffi-dev gd-dev postgresql-dev linux-headers cabal \
      ghc \  # 多分こんなにライブラリいらないけど、どれが必要かよくわかんなかった。
&&  cd /usr/bin \
&&  ./cabal new-update \
&&  ./cabal new-install pandoc pandoc-citeproc \

&&  apk del \
      wget build-base make cmake gcc gmp curl xz perl cpio coreutils \
      binutils-gold tar gzip unzip libc-dev musl-dev ncurses-dev gmp-dev \
      zlib-dev expat-dev libffi-dev gd-dev postgresql-dev linux-headers cabal \
```

#### Zotcite
zotcite自体はプラグインマネージャーで導入してください。
文献管理ソフト[Zotero](https://www.zotero.org)もインストールしましょう。
Zoteroをインストールしなくても、Zoteroのデータベース（zotero.sqlite）にさえアクセスできれば問題ありません。

筆者の環境（Alpine Linux）ではZoteroがうまくインストールできませんでした。
そこでホストOS（macOS）にZoteroをインストールし、そのデータベースのあるディレクトリをDockerコンテナへマウントしました。
データベースは`/Users/ユーザー名/Zotero`にあります（設定で変えられます）。
コンテナ内のマウント先は、root直下にしましょう。
こんな感じです↓

```
docker run -v /Users/usernonamae/Zotero:/root/Zotero image-no-namae
```

Pandocを使ってOutputする際、zotrefというfilterを使用します。
zotrefはzotcite pluginに含まれており、自動でPATHに追加される、と説明されています。
しかし筆者環境ではうまくPATHに追加されていなかったので、手動で追加しました。
`export PATH=$PATH:/root/.vim/bundle/zotcite/python3` てな具合です。

#### Citation Style List
投稿先のジャーナルに合わせた形式で引用文献を出力するために、.cslファイルを用意しておきましょう。
[こちらのサイト](https://www.zotero.org/styles)で投稿予定のジャーナルを検索し、.cslファイルをDLしてください。


### 使用方法

引用を挿入したい箇所にて、（Insert modeで）`@`を入力します。
続けて、引きたい論文のファーストかラストオーサーの名前を入れます（途中まででもOK）。
例えばSmallwoodという人の論文であれば`@Smallwood`と入力します。
さらに続けて、Ctrl-x, Ctrl-o と入力すると、その筆者名にひっかかった論文一覧が表示されます。
上下キーで引きたい論文を選びEnterで決定すると、その論文のキーが入力されます。
Pandocで出力すると、「Smallwood et al. (2009) 」といった感じになります。
また、文書の最後に文献リストが自動で挿入されます
（挿入される場所を指定できると便利だと思うんですが、できないんですかね）。

キーを[]で囲い、[\@Smallwood_Etal_2009] といったようにすると、「(Smallwood et al., 2009)」となります。
@の前にハイフンを入れると出版年だけになりますし、セミコロンで区切って複数の論文を挙げることもできます。
例えばこちら↓を.docxに変換すると、

```Markdown
# Introduction
@XCMPXCW4#Smallwood_Etal_2009 says iroiro.
Are ha koudayo
[see @6VDC62BQ#Smallwood_Obonsawin_Heim_2003;
@XCMPXCW4#Smallwood_Etal_2009]
Their paper [-@XCMPXCW4#Smallwood_Etal_2009] introduced arekore.
```

こんな風になります↓
![ss.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/304493/ccdf2d1c-cdc4-2a80-146b-daafefb351a9.png)
Pandocのフィルターには、`pandoc-citeproc`と`zotref`を指定してください。
また、csl オプションを使って、DLした.cslファイルを指定してください。
例えば↓こんな感じです。

```yaml
input-files:
  - bunsho.md

output-file: bunsho.docx

csl: src/frontiers-in-human-neuroscience.csl

filters:
  - zotref
  - pandoc-citeproc
```


以下は挿入されたCitationキーにカーソルを載せた状態で
- `<Leader>zi` ステータスバーに論文の情報を表示
- `<Leader>za` 論文情報のすべてを表示 

### 使用感
とてもいい感じです。
今まではOffice Word + Mendeley Pluginを使っていましたが、同等以上の使い勝手です。

### 代替Plugin
- [uesseu/zosan.vim](https://qiita.com/uesseu/items/03ea1dce855b68f17998) ←Zotciteがうまくいったのでまだ試してない