4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Posted at

目標

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') の下に書く
let g:vimtex_compiler_latexmk = {
  \ 'background': 1,
  \ 'build_dir': '',
  \ 'continuous': 1,
  \ 'options': [],}
let g:vimtex_view_general_viewer =
  \ '/Applications/Skim.app/Contents/SharedSupport/displayline'
let g: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 を共存させることにした)
4
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?