Quantcast
Channel: Vimタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 5608

vimtex on macOS でハマったときのメモ

$
0
0

目標

vimで編集しながら、バックグラウンドで自動的にコンパイルをしてくれる環境を構築すること。

環境

  • macOS High Sierra 10.13.5
  • vim 8.1.50
  • vimtex: 2018/06/13 の最新版
  • latex: TeX Live 2018

ハマったポイント

  • ~/.latexmkrcが反映されない
  • vim のクリップボード使えない

解決策

  • main.texの1行目に %! TEX program = uplatexを記入
  • vim と neovim をうまく使い分ける

インストールから解決まで

1. Homebrew の vim を --with-client-serverオプション付きでインストールし直す

バックグラウンドでコンパイルをさせるためには vimclientserverが有効になっている必要がある(vimtex の wiki参照)。
デフォルトで Homebrew からインストールした場合は無効になっているはずなので、 vim を再インストールする。

# インストール
brew uninstall vim
brew install vim --with-client-server# 確認
vim --version | grep clientserver
# +clientserver      +job               +perl              +vertsplit

+clientserverがあればOK。

2. .latexmkrcを作成

こちらの記事をもとに .latexmkrcを作成する。
PDF viewer は Skim というアプリケーションを使用している。

~/.latexmkrc
#!/usr/bin/env perl$latex='uplatex -halt-on-error -file-line-error -synctex=1';$bibtex='upbibtex';$biber='biber -u -U --output_safechars';$dvipdf='dvipdfmx %O -o %D %S';$max_repeat=5;$pdf_mode=3;$pdf_previewer='open -ga /Applications/Skim.app';$pvc_view_file_via_temporary=0;

3. .vimrcを編集

私は普段 vim のパッケージ(プラグイン)をdein.vimというプラグインマネージャーを利用して管理しているので、 dein.vimが vimtex を読み込むように設定。

~/.vimrc
call dein#add('lervgg/vimtex')

ただこれだとデフォルトの設定のままでしか使えないので、最低限の設定を個別に行う。
設定方法も上と同じ記事を参考にする。

~/.vimrc
" call dein#add('lervgg/vimtex') の下に書くletg:vimtex_compiler_latexmk={  \'background':1,  \'build_dir':'',  \'continuous':1,  \'options':[],}letg:vimtex_view_general_viewer=  \'/Applications/Skim.app/Contents/SharedSupport/displayline'letg:vimtex_view_general_options='-r @line @pdf @tex'

設定の詳しい説明は vimtex のリポジトリのドキュメントを参照することを薦める(バージョンによって挙動が少し変わったりするので)。

4. 試してみる

実際にバックグラウンドでコンパイルができるか試してみる。
Wikiにあるように vim の起動時に --servername <NAME><NAME>は好きな名前)のオプションを付けなければならないので注意。

cd /tmp
vim --servername HOGE main.tex
/tmp/main.tex
\documentclass[uplatex]{ujarticle}\begin{document}
Hello World!
\end{document}

vim でこのファイル( main.tex)を開いている状態かつノーマルモードで \llとキーボードで打つとバックグラウンドコンパイルが開始する。
そしてコンパイルが成功する はずである。
ちなみに :nmapで vimtex のコマンドが確認できる。

5. ハマったポイント: ~/.latexmkrcは反映されない

さて、バックグラウンドコンパイルをすると何故か

 1 main.tex|| This file needs format `pLaTeX2e'
 2 main.tex|| Emergency stop.
 3 main.tex|| ==> Fatal error occurred, no output PDF file produced!

というエラーを出してコンパイルが失敗してしまう。
ノーマルモードで \loを打って出力を確認すると、、、

Latexmk: applying rule 'pdflatex'...
This is pdfTeX, Version 3.14159265-2.6-1.40.19 (TeX Live 2018) (preloaded format=pdflatex)

なぜか uplatexではなく pdflatexが実行されている。

一旦 vim で開いていたファイルを閉じて、コマンドライン上から latexmkを実行してみる

# /tmp 以下
latexmk main.tex
# ...# main.dvi -> main.pdf# [1]# 8515 bytes written# Latexmk: All targets (main.dvi main.pdf) are up-to-date

ちゃんと成功している。
なので原因は vim 内から latexmkを呼ぶときに正しく呼べていないことが分かる。

で、マニュアルを読んだ結果 main.texファイルの1行目に次のディレクティブを追加してやれば良いことがわかった。

%! TEX program = uplatex

したがって /tmp/main.texは次のように変更される

/tmp/main.tex
%! TEX program = uplatex\documentclass[uplatex]{ujarticle}\begin{document}
Hello World!
\end{document}

そして先程と同じように \llを打ってみる。
そして vimtex: Compilation completedが出力され、無事成功!

6. ハマったポイント: vim のクリップボード使えない

成功してから、普段のように vim を使っていたら前までできていた vim のコピペができないことが判明。
で、どうやら vimtex を設定したとき以降に発生したっぽいので、ググった結果のある GitHubある issue を発見。
要約すると、

  • +clipboardが有効になったいるのにコピペができない
  • 原因は +clipboard+xterm_clipboardが同時に有効になっていること
  • なので +xterm_clipboardを無効にすれば良い

実際に自分の環境で確認してみると

vim --version | grep xterm_clipboard
# -ebcdic            -mouseshape        +statusline        +xterm_clipboard

じゃ、なにがこれを有効にさせたかというと brew install vim --with-client-serverなわけである(確認済)。
そうなると clientserverを有効かつ xterm_clipboardを無効にしたいわけであるが、Homebrew ではそのようなオプションを設定できない。つまりソースコードからビルドするしかなくなるわけである。

実際に macOS で vim をソースコードからビルドしたが、どうも上の二つの条件をクリアするためのビルドのオプションが見つからなかった。

そして考えた結果、次のようにすることで(ひとまず)解決した。

  1. neovim をインストール
  2. neovim をコピペができる基本のエディターに設定
  3. vim はコピペができない状態のまま latex 専用エディターに設定

「原因療法」ではなく「対症療法」のような解決策なのが個人的にちょっと悔しいが、まあそのようなこともあると受け入れるしかなさそう。
ちょうど neovim への興味もあったのでこれを機に試してみたかったというのも大きいかもしれない。

まとめ

  • uplatexplatexを使って vimtex + latexmk でコンパイルしたい場合は main.texの1行目に %! TEX program = ...を記入する必要がある
  • brew install vim --with-client-serverで vim をインストールした場合クリップボードが無効になるので、うまく対処する必要がある(自分は vim と neovim を共存させることにした)

Viewing all articles
Browse latest Browse all 5608

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>