Docker+VS CodeでLaTeX環境構築 (latexmkrc依存版)


はじめに

  • この記事ではVisual Studio Code (以下VS Code)でLaTeX環境をサクっと作ります。
  • 参考にもありますが、過去にも同様の記事はあります。が、本記事執筆時点 (2020年8月) ではlatexmkrcを使えば特に苦労なく設定できることから、新しく記事を起こしました。
    • 過去記事を執筆された方はこの設定とは異なることにチャレンジしているのかもしれません。どなたか違いを教えて下さい!
  • EmacsからVS Codeに乗り換えたばかりのVS Code初心者の説明であるため、VS Code初心者に優しい記事 (になってるはず) です。
    • しかし、間違いがあるかもしません。VS Code玄人の方々、何か間違いがあればぜひご指摘ください。

検証環境

筆者の環境は以下の通りです。

  • macOS Catalina 10.15.6
  • Docker version 19.03.12, build 48a66213fe
  • VS Code Version 1.48.1, commit 3dd905
  • LaTeX Workshop 8.11.1
  • docker image: pman0214/alpine-texlive-ja-epspdf:2020a

(Aug 23, 2020追記)

以下の環境でも動作しました。
* Windows 10

前提

Docker及びVS Codeはインストール済みであるとします。

手順

Step1: dockerイメージの取得

paperist/alpine-texlive-jaを使用する方が多いようですが、筆者はいまだにEPS画像を使うことも多いので上記にghostscriptを追加した拙作のイメージを利用します。

$ docker pull pman0214/alpine-texlive-ja-epspdf

Step2: LaTeX Workshopの取得

VS Codeの拡張であるLaTeX Workshopを取得します。

VS Codeを起動し、左側のExtensionsタブ (あるいはCommand+Shift+x) から「LaTeX Workshop」を検索してインストールします。

Step3: LaTeX Workshopの設定

VS Code上でCommand + ,して設定を開き、右上のボタンを押してsettings.jsonを開きます。

以下の設定を追加します。
参考に示しているQiita記事では色々な設定をしていますが、docker上のLaTeXを使用するだけなら後ほど示すlatexmkrcファイルさえ用意すればrecipeを追加する必要はありません。

settings.json
    "latex-workshop.latex.recipe.default": "latexmk (latexmkrc)",
    "latex-workshop.docker.enabled": true,
    "latex-workshop.docker.image.latex": "pman0214/alpine-texlive-ja-epspdf",
    "latex-workshop.latex.autoBuild.run": "onFileChange",

まだsettings.jsonに何も書いていなかった場合には以下のようになるはずです。

settings.json
{
    "latex-workshop.latex.recipe.default": "latexmk (latexmkrc)",
    "latex-workshop.docker.enabled": true,
    "latex-workshop.docker.image.latex": "pman0214/alpine-texlive-ja-epspdf",
    "latex-workshop.latex.autoBuild.run": "onFileChange",
}

各設定を簡単に説明しますと以下の通りです。

  • latex-workshop.latex.recipe.defaultでコンパイル (正確にはタイプセット?) に使うrecipeを指定します。 ここではLaTeX Workshopインストール時にデフォルトで存在するrecipeを指定しています。
  • latex-workshop.docker.enabledlatex-workshop.docker.image.latexは、docker上のlatexを使う場合の設定です。latex-workshop.docker.image.latexに使用するイメージ名を指定します。
  • latex-workshop.latex.autoBuild.runではファイルを保存したときにコンパイルする設定をしています。こちらはお好みで。

テスト

このVS Code LaTeX環境ではlatexmkrcファイルの作成はほぼ必須です。
日本語texと英語texでそれぞれ異なる設定をするので分けてテストします。

日本語texのテスト

適当なディレクトリを作り、latexmkrcファイルを作ります。
なお、以下はplatex+dvipdfmxを使っている前提の設定になっています。uplatexを使っている人などは適宜書き換えてください。

以下では/tmp/textestで作業する例を示しています。

$ mkdir /tmp/textest
$ cd !$
$ touch latexmkrc
$ code !$
latexmkrc
$latex = 'platex';
$bibtex = 'pbibtex';
$dvipdf = 'dvipdfmx %O -o %D %S';
$makeindex = 'mendex %O -o %D %S';
$pdf_mode = 3;
$ENV{TZ} = 'Asia/Tokyo';
$ENV{OPENTYPEFONTS} = '/usr/share/fonts//:';
$ENV{TTFONTS} = '/usr/share/fonts//:';

(2021/10/07追記 ここから)
synctexを使ってvscode内のtexソースとpdfの間でカーソルを同期したい人は、 $latex は $latex = 'platex -synctex=1'; などとしましょう。

↓の方の英語版では $latex がないため、追加しましょう。

latexmkrc英語版追記内容
$latex = 'latex -synctex=1';
$pdflatex = 'pdflatex -synctex=1';

(2021/10/07追記 ここまで)

つづいてtexファイルを作成します。
ファイル名は何でもよいですが、ここではmain.texであるものとします。

$ touch main.tex
$ code !$
main.tex
\documentclass{jsarticle}
\begin{document}
テストです.
\end{document}

VS Codeでmain.texを開いた状態で、Command + Option + bを押し、コンパイルしてみます。
VS Code下部のステータスバー (呼び名は違うかも・・・) にBuildが表示され、終了すればBuildの表示が消えます。

コンパイルに成功したのであれば、Command + Option + vを押すとPDFファイルを閲覧できます。

上述の設定のように、"latex-workshop.latex.autoBuild.run": "onFileChange"としている場合は、一度コンパイルした後はファイルを保存するたびに自動的にコンパイルされます。

英語texのテスト

手順は日本語texのときと同様です。
latexmkrcファイルは必須ではありませんが、筆者は必ず作成するようにしています。

$ mkdir /tmp/etextest
$ cd !$
$ touch latexmkrc
$ code !$
latexmkrc
$pdf_mode = 1;
$ENV{TZ} = 'Asia/Tokyo';
$ENV{OPENTYPEFONTS} = '/usr/share/fonts//:';
$ENV{TTFONTS} = '/usr/share/fonts//:';
$ touch main.tex
$ code !$
main.tex
\documentclass{article}
\begin{document}
Let's use \LaTeX.
\end{document}

コンパイルできないとき

左側のTeXタブからCOMMANDS > View Log messages > View LaTeX compiler logとたどってログを確認し、問題を解決しましょう。

コンパイルエラーになる場合以外にも、コンパイル時間がやけに長いときは途中で止まっていることがあります。上述の例であれば長くても1秒ほどでコンパイルが終わるはずです。やけに時間がかかっているな、と思う場合はログを確認してみましょう。

おわりに

VS Codeでlatex on dockerを使う環境をQiitaの記事を参考にして構築していましたが、ドキュメントを見たらきちんと書いてありました。
ドキュメントの確認、大切です。
筆者はPDFビューアとしてSkimを利用していますが、Skim使用時の設定例もドキュメントに書いてありました (公式にはサポートされていないとドキュメントに書いてありますが) 。

参考