NeovimでLaTeX

最近、Spacemacsから乗り換えてNeovimを使い始めました。 もともと、SpacemacsもVim mode (Evil mode)で使っていたので、移行はそれなりにスムーズにできました。 とりあえず、しばらくはNeovimで生きていこうと思いますが、また戻るかもしれません。 Neovimに移行してからSpacemacsは重かったということを実感しました。起動だけで4秒以上かかって…

vimtex-latex

しばらくはNeovimの設定に関する記事を書こうと思っています。 その第一弾として数物系の学生・研究者が日頃よく使っているLaTeXを自由自在に使えるようになるまでのことを書きます。 ちなみにSpacemacsにおけるLaTeXに関する記事は以前に書いたものがありますので、Spacemacsを使いたい人はこちらをどうぞ。

使用したプラグイン

今回のデモはこんな感じです。 vimtex-compile NeovimでLaTeXを使うにあたって入れたプラグインはvimtexです。 他にも、TeX打ちをするとき以外でも使っているプラグインdeoplete.nvimALE (Asynchronous Lint Engine)もありますがそれは省略します。 またvimtexはlatexmkを前提とします。 最初にこのlatexmkについて少し触れておきます。

latexmkについて

latexmkはめんどくさいTeXのタイプセットをいい感じにやってくれる便利なやつです。 bibtexを用いたりや目次の入った文章を作ろうとしたりすると何回もコマンドを打たないといけませんが、そこをいい感じにやってくれます。 さらに、pdflatexplatexlualatexなどを使い分けてる場合その設定を.latexmkrcに書くだけで、切り替えることが出来ます。 latexmkの使い方や設定方法についてここで詳しく解説するのはやめておきます。 すでに良い記事があり、こちらが参考になります。

vimtexの設定

次にvimtexの設定について書いていきます。 僕はプラグイン管理にdein.vimを使っているので、tomlファイルに

[[plugins]]
repo = 'lervag/vimtex'

と書いています。 LaTeXファイルに合わせて遅延読み込みしている(on_ft = 'tex')。 他のプラグイン管理ツールを使ってる人はそれに合わせて変えてください。 さらに、

hook_source = '''
let g:vimtex_fold_envs = 0
let g:vimtex_view_general_viewer = 'displayline'
let g:vimtex_view_general_options = '-r @line @pdf @tex'
let g:vimtex_compiler_latexmk = {
      \ 'options' : [
      \   '-verbose',
      \   '-file-line-error',
      \   '-synctex=1',
      \   '-interaction=nonstopmode',
      \ ]}
let g:vimtex_compiler_progname = 'nvr'
'''

という設定をしています。設定を書く場所は好みなので二行目以降のlet g:~~~の部分を~/.config/nvim/init.vimに書いても動くと思います。 上から順に解説していきます。 最初のg:vimtex_fold_envs = 0はenvironmentの折りたたみを無効化する設定です。 なんでも折りたためばいいと僕は思わなかったからこういう設定をしましたが、これは好みです。 次の設定(g:vimtex_view_general_viewerg:vimtex_view_general_options)はViewerを開くときの設定です。 MacでSyncTeXを使える代表的なビューアーはSkimだと思います。 どの行で開くか、どの行に飛ぶかを指定したいのでdisplaylineを使っています。 SyncTeXが使えるビューアーとしては他にもSumatraPDF、Okularなどが有名だと思いますが使ったこともないので評価は分かりません。 ビューアーのリストはTeXWikiが詳しいです。

次の設定が重要です。g:vimtex_compiler_latexmkの設定を変えないといけません。もともとのデフォルト値は、

let g:vimtex_compiler_latexmk = {
    \ 'backend' : DEPENDS ON SYSTEM,
    \ 'background' : 1,
    \ 'build_dir' : '',
    \ 'callback' : 1,
    \ 'continuous' : 1,
    \ 'executable' : 'latexmk',
    \ 'options' : [
    \   '-pdf',
    \   '-verbose',
    \   '-file-line-error',
    \   '-synctex=1',
    \   '-interaction=nonstopmode',
    \ ],
    \}

なのですが、このオプションからpdfを消さないと、.latexmkrcの設定より優先されてしまいます。 latexmk.latexmkrcよりもコマンドの引数が優先されるからで、docにもちゃんとそう書いてありました。 他の設定を残してるいみもないので、完全に消してしまってもいいと思います。

最後の設定はneovim-remoteに関する設定です。 これはPDFビューアー側から該当するTeXの行に飛ぶ機能を使うために必要です(inverse search)。 まず、neovim-remoteを入れてない場合は入れる必要があります。

pip3 install neovim-remote

あとは、環境変数をNVIM_LISTEN_ADDRESS=/tmp/nvimsocketなどと設定してNeovimを起動すればよいです。 僕はalias nvim="NVIM_LISTEN_ADDRESS=/tmp/nvimsocket nvim"とエイリアスを設定しています。 もちろん、export NVIM_LISTEN_ADDRESS=/tmp/nvimsocketでも問題ないです。 さらにSkim側の設定を変える必要があります。 Skimの設定 これで、下のデモのようにPDF側をCommand + Shift + クリックをすれば、該当行に飛ぶことができるようになるはずです。 vimtex-search

コマンドについて

最後によく使うであろうコマンドをまとめておきます。 次で出てくる<LocalLeader>はデフォルトでは\に割り当てられています。 まずコンパイルは<LocalLeader>llで出来ます。 これは、latexmk-pvcのオプションを渡しており、変更して保存すると再びコンパイルされます。 これを停止するためには、再び<LocalLeader>llと入力すればいいです。

NeovimからPDFの該当している行に飛ぶためには(forward search)、<LocalLeader>lvと入力します。 Inverse searchと組み合わせることで自由自在に行き来できるようになります。 コンパイルエラーや警告をみるためには<LocalLeader>leと入力します。 これで一通りの操作は出来ると思います。他のコマンドについてはヘルプを見ましょう。

最後に

こんな感じでTeXは使えるようになりました。 僕もNeovim(あるいはVim自体)の初心者なので、間違っていることやアドバイスがあれば優しく教えていただければ嬉しいです。

2018年5月31日追記:hook_sourceで読み込んでるはずのオプションが読み込まれなくなってしまっていました。とりあえず、hook_post_sourceを用いたらうまくいきましたが、原因は不明です。また詳細が分かれば追記するかもしれません。

0 件のコメント :

コメントを投稿