雑記帳

情報を自分の言葉で蓄積しておく場所

vim+vimtex+latexmkで修論を書く

久しぶりにvimの話題です

現在M2なのでそろそろ修論を書くためのアレヤコレヤが始まってくる季節だが,やる気が起きないので修論を書かざるをえない状況に自分を追いやるために外堀から埋めていくことにした.
その第一段階が今回の執筆環境のセットアップである.
今まではOSX上のTexShopでたまーに執筆していたが,ここ1年はvimばかり使っていてどこまでvimでできるかチャレンジしてみたくなり,修論vimで書いてみようと思い立った.

導入の流れ

  1. vimをインストールする(説明省略)
  2. texliveをインストールする(vimtexで使うlatexmkもインストールされる)
  3. vimtexをインストールする
  4. latexmkの設定
  5. vimtexの設定

texliveのインストール

TeX Live - TeX Wiki
日本語ドキュメントなのでここを参考にしながらインストールすると楽
これでvimtexでtexコンパイルする際に必要なlatexmkもインストールされた.

vimtexのインストール

vimプラグインマネージャを使ってインストールする.
ぼくはdein.vimを使っているのでインストールするプラグインを記述する部分に

dotfiles/dein_lazy.toml at 06758e229d49aed7605f6408200debceab71e69e · applepine1125/dotfiles · GitHub

#tex
[[plugins]]
repo = 'lervag/vimtex'
on_ft = ['tex']

と記述した.

latexmkの設定

latexmkは~/.latexmkrc内の設定を見て各操作を行う.
latexmk で楽々 TeX タイプセットの薦め(& biblatex+biberで先進的な参考文献処理) - konn-san.com
僕はこのサイトを参考にした.というかほぼそのまま使った.

#!/usr/bin/env perl
$latex            = 'platex -synctex=1 -halt-on-error';
$bibtex           = 'pbibtex';
$biber            = 'biber  -u -U --output_safechars';
$dvipdf           = 'dvipdfmx %O -o %D %S';
$makeindex        = 'mendex %O -o %D %S';
$max_repeat       = 5;
$pdf_mode         = 3;
$pvc_view_file_via_temporary = 0;
$pdf_previewer = "open -ga /Applications/Skim.app";
$latex

texコンパイルする際のコマンドを指定.今回は日本語論文なのでplatexを設定.
-synctex=1にするとエディタとビューワーのカーソル位置と同じ箇所を行き来できる.
-halt-on-errorコンパイルエラーの際に最初のエラーの時点で処理を終了するオプション

$bibtex

参考文献参照のための設定. 今回はpbibtexを使用

$biber

biblatexと組み合わせて使うと参照のソートなどもできるらしい.この辺はまた詳しく調べてみる.
-u-input-encoding=UTF-8の,-U-output-encoding=UTF-8エイリアス. それぞれ入力ファイルと出力ファイルのエンコーディングUTF-8と指定する --output_safecharsユニコード文字をエンコードした形で出力させるためのオプション.

$dvipdf

中間ファイルであるdviからpdfを生成する際のコマンド.ここではdvipdfmxを使用.
%Oはオプション,%Dは入力ファイル名, %Sは出力ファイル名がlatexmkによって補完される.本来であれば明示しなくても補完してくれるらしいが,dvipdfmxの場合はうまくいかないらしく明示的に書くらしい.

$makeindex

索引を作成するコマンド.ここではmendexを使用.
こちらでも変数を明示しておく.

$max_repeat

ソースの変更なしでコンパイルできる上限.
警告が出なくなるまでコンパイルしようとして発散するのを防ぐ.

$pdf_mode

pdfの出力形式を設定する. 0:pdf化しない
1:pdflatexを使用
2:ps2pdfを使用
3:dviファイルからpdfを生成
今回はplatex(dviからpdfを生成)を使うのでモードを3に指定.

$pdf_viewer

生成したpdfを開くアプリケーションの設定.僕の環境ではOSX上でskimを使うのでskimを指定.
-gaとするとskimで開くがウィンドウを前面に持ってこない.

vimtexの設定

vimtexの設定は, vimrc内に以下のように記述している

let g:vimtex_compiler_latexmk = {
      \ 'background': 1,
      \ 'build_dir': '',
      \ 'continuous': 1,
      \ 'options': [
      \    '-pdfdvi', 
      \    '-verbose',
      \    '-file-line-error',
      \    '-synctex=1',
      \    '-interaction=nonstopmode',
      \],
      \}

let g:vimtex_view_general_viewer
      \ = '/Applications/Skim.app/Contents/SharedSupport/displayline'
let g:vimtex_view_general_options = '-r @line @pdf @tex'
background

latexmkをバックグラウンドで実行するオプション

build_dir

コンパイルしたファイルの保存先を指定.今回はカレントディレクトリでよいので空文字.

continuous

-pvcと同じような機能のオプション.
保存を検知して自動でコンパイルが走ってプレビューに反映されるようにする.

options

latexコマンド実行時の各オプションを指定.

 
 
vimtex_view_general_viewervimtex_view_general_optionsでvimtex内でのコンパイル,プレビュー実行の際のビューワーを指定している.
latexmk関連の設定は既にlatexmkrcでしてあるので,正直vimtex_compiler_latexmkのところは

let g:vimtex_compiler_latexmk = {'options': [ ]}

でも動くのだが,まだ他のオプション等をあまり理解できていないので残してある.
optionsを残してないとうまくコンパイルしてくれないのも理由はよくわかっていないのでまた今度調べる.

実際に操作する

以上でvim上でtexを楽して書く準備ができた.
texファイルを開いて<localreader>ll(僕の場合は='\')を入力すると継続コンパイルモードのオンオフができる.
<localreader>lvするとカーソル位置に対応したpdf内の位置へとジャンプできる.
<localreader>lcコンパイル時の中間ファイルを削除してくれる.因みにこれを走らすと継続コンパイルモードがオフになるのでgitでtexファイルを管理しててgit addする前とかだけ入力している.
他のコマンドは:nmapすれば色々見える.

おわりに

ここまでvimで楽してtexを書くための諸々の導入について説明してきた.
今はbibファイルを見てvim内で\citeの自動補完したり, 参考文献の自動追加をやろうとしてるのでそれについてもできるようになったらそのうち書く.

参考にしたサイト

Latexmkから学ぶPDF化までの処理の流れ - Qiita
vimtex - Alainp's blog
【メモ】vimtexでLuaTeXの環境構築|rago1975の部屋
latexmk で楽々 TeX タイプセットの薦め(& biblatex+biberで先進的な参考文献処理) - konn-san.com