NeovimでLaTeX
NeovimでLaTeX
NeovimでLaTeX生活しています。
しばらくはNeovimの設定に関する記事を書こうと思っています。 その第一弾として数物系の学生・研究者が日頃よく使っているLaTeXを自由自在に使えるようになるまでのことを書きます。
まずは今回の環境のデモを見てみます。
NeovimでLaTeXを使うにあたって入れたプラグインはvimtexです。 他にも、TeX打ちをするとき以外でも使っているプラグインdeoplete.nvimやALE (Asynchronous Lint Engine)もありますがそれは省略します。
vimtexはlatexmkを前提とします。 最初にこのlatexmkについて少し触れておきます。
latexmkについて
latexmk
はめんどくさいTeXのタイプセットをいい感じにやってくれる便利なやつです。
bibtex
を用いたりや目次の入った文章を作ろうとしたりすると何回もコマンドを打たないといけませんが、そこをいい感じにやってくれます。
さらに、pdflatex
やplatex
、lualatex
などを使い分けてる場合その設定を.latexmkrc
に書くだけで、切り替えることが出来ます。
latexmk
の使い方や設定方法についてここで詳しく解説するのはやめておきます。
すでに良い記事があり、こちらが参考になります。
vimtexの設定
次にvimtexの設定について書いていきます。 僕はプラグイン管理にdein.vimを使っているので、tomlファイルに
[[plugins]] repo = 'lervag/vimtex'
と書いています。
LaTeXファイルに合わせて遅延読み込みしています(on_ft = 'tex'
)。
他のプラグイン管理ツールを使ってる人はそれに合わせて変えてください。
さらに、hook
を使って
hook_post_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_viewerとg: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側の設定を変える必要があります。
これで、下のデモのようにPDF側をCommand + Shift + クリックをすれば、該当行に飛ぶことができるようになるはずです。
コマンドについて
最後によく使うであろうコマンドをまとめておきます。 次で出てくる<LocalLeader>
はデフォルトでは\
に割り当てられています。
まずコンパイルは<LocalLeader>ll
で出来ます。
これは、latexmkに-pvcのオプションを渡しており、変更して保存すると再びコンパイルされます。
これを停止するためには、再び<LocalLeader>ll
と入力すればいいです。
NeovimからPDFの該当している行に飛ぶためには(forward search)、<LocalLeader>lv
と入力します。
Inverse searchと組み合わせることで自由自在に行き来できるようになります。
コンパイルエラーや警告をみるためには<LocalLeader>le
と入力します。
これで一通りの操作は出来ると思います。
他のコマンドについてはヘルプを参照してください。
最後に
こんな感じでLaTeXは使えるようになりました。 僕もNeovim(あるいはVim自体)の初心者なので、間違っていることやアドバイスがあれば優しく教えていただければ嬉しいです。