VScodeで快適LaTeX環境を構築する方法


何故ローカルにLaTeXを導入するのか

まず前提として、世の中にはCloud Latexという便利なWebサービスが、株式会社アカリク様によって提供されています。確かに、ローカルにLaTeXを導入しなくてもよいし、卒論だけに利用するといったライトユーザ層がLaTeXを使用するのに最適だと思います。しかし、ローカルでファイルを落とすには一々ダウンロードをしなければならず、ローカルとの連携という面では不便に感じるものもあります。

身内話になりますが、先日ライトユーザの一人である友人が卒論提出前日に、記述している文章を全て飛ばしてしまうという大事故が起きてしまいました。幸い、Cloud LaTeX Teamの皆様の迅速な対応によりこの危機から免れましたが、やはり、このような事故も生じないといは言い切れず、ローカルでデータを保持しておいたいというのが人の性だと思います。
(Cloud LaTeXではバックアップを取って置くことを予め注記しています。)

LaTeXにはデフォルト統合環境であるTeXWorksがあるのですが、基本的に私はUXの優れたソフトウェアないしCLIしか使用したくないし、プロトタイプのようなダサいUXは以ての外なのであります。そこで今回、VScodeでライトユーザが快適に使えるローカル環境を構築する方法を書いていきたいと思います。

主にWindowsのユーザの読者の方を対象にしています。

インストール

TeX Live 2017

バージョン20160404.0以降のLuaTeX-jaはTeX Live 2015以前では動作しない為、最新のディストリビューションであるTeX Live 2017(2017/12/24執筆時点)からインストーラをダウンロードしましょう。

上記はWindowsのインストーラになるのでその他のOSの場合、こちらを参考にして下さい。

全てのパッケージをダウンロードするのにものすごく時間がかかるので、明らかに不必要なパッケージスイートはインストールの時点で外すのがいいのかもしれません。

VScode

次に、VScodeをダウンロードしましょう。特に問題がなければ最新の安定版を落として下さい。

インストールが終わったら起動画面でCtrl + Shift + X(MacOS:⇧ + ⌘ + X)を入力して、検索窓にlatexと入力し、一番上に出てくるLaTeX Workshopをインストールして後、再読込みします。

LuaLaTeX

LuaTEX-jaパッケージは、次世代標準TEXであるLuaTeXの上で、pTeXと同等/それ以上の品質の日本語組版を実現させようとするマクロパッケージである。

LuaLaTeXのプロジェクトチームは冒頭にて、商用印刷でも通用するpTeXに日本人は
甘えてしまい、海外の拡張機能などに比べてギャップが今も尚あることに嘆いています。

ということで、プロジェクトチームが勧める次世代標準のLuaTeXを使用します。

LuaJITLaTeXを導入する場合

LuaLaTeXを速度的に1.3倍ほど軽量化したLuaJITLaTeXを使用する設定をしておきましょう。ただし、LuaLaTeXをダウンロードするには少々面倒なのですが、@Tats_U_氏がその面倒を一発で終わらすスクリプトを書いているので、もし利用する場合は、そちらを参照にして下さい。

また、フォントを変更したくてサイズの大きなフォントを利用する場合、LuaJITLaTeXを使用できるようにするこの項目は飛ばしても構いません。詳しくは、後述するフォントの変更を参照して下さい。

プリアンブルの記述方法

sample.tex
\documentclass[autodetect-engine,dvipdfmx-if-dvi,ja=standard]{bxjsarticle}

 \begin{document}
  こんにちは、人生。
 \end{document}

\documentclassに上記のように記述しておくことで、仮にpLaTeX,upLaTeX, XeTeXなど別のエンジンを利用した際にも、柔軟にコンパイルができるようになるので、こちらを利用しましょう。

LuaLaTeXをVScodeに設定する

単一のコンパイル

再度、VScodeを開き、Ctrl + ,(MacOS:⌘ + ,)で設定ファイルを開き、画面右側のユーザ設定にあるsettings.jsonファイルに以下の記述を加えて下さい。

既に別の設定されている場合、その設定の下に","区切りで"latex-workshop.latex.toolchain"の記述を加えて下さい。

settings.json
{
    "latex-workshop.latex.toolchain": [
        {
            "command": "luajitlatex",
            "args": [
                "--cmdx",
                "--fmt=luajitlatex.fmt",
                "%DOCFILE%"
            ]
        }
    ]
}

これでコンパイルができるようになります。

参考文献を参照する場合

参考文献を参照する場合、本来であれば、4回もコンパイルを回さなければならず、非常に煩わしいものの一つになっております。ここではLaTeX Workshopではtoolcahinを利用することにより全てのコンパイルを一度に行なってくれます。これで文献を利用する場合も完璧ですね。

settings.json
{
    "latex-workshop.latex.toolchain": [
        {
            "command": "luajitlatex",
            "args": [
                "--cmdx",
                "--fmt=luajitlatex.fmt",
                "%DOCFILE%"
            ]
        },
        {
            "command": "upbibtex",
            "args": [
                "%DOCFILE%"
            ]
        },
        {
            "command": "luajitlatex",
            "args": [
                "--cmdx",
                "--fmt=luajitlatex.fmt",
                "%DOCFILE%"
            ]
        },
        {
            "command": "luajitlatex",
            "args": [
                "--cmdx",
                "--fmt=luajitlatex.fmt",
                "%DOCFILE%"
            ]
        }
    ],
}

bibファイルの参照方法はここでは記載しませんが、私のVScodeの環境では\bibliography{myrefs}と記載してmyrefsが参照できないでエラーが生じました。この場合、./myrefsとカレントディレクトリを明示することで、参照できたので、エラーがもし出た方がいれば試してみて下さい。

使い方

基本的には、*.texファイルを保存した段階で自動的にコンパイルが始まります。
LaTeXのコンパイル画面を表示する場合、Ctrl + Shift + U(MacOS:⇧ + ⌘ + U)で見れます。

主に使用するアクション

Ctrl + Alt + Lを押してLaTeX Workshop Actionsを開きます。(Macのショートカットがわかりませんでした、VScodeのショートカットページで探してみて下さい)
主に使用されるであろうアクションを以下にあげます。

  • Build Latex Project - latex-workshop.latex.toolchainにある一連のコマンドを実行
  • View PDF file in new tab - VScodeのnew tabでPDFを開く
  • SyncTeX from Cursor - SyncTeXの機能を使用して、文字をPDFに合わす
  • Clean up auxiliary files - auxiliaryファイルを削除する
  • Count words in LaTeX document - 文字数をカウントします。句読点、節の見出しなどはカウントされませんでした

LaTeX Workshop設定

自動コンパイルのキャンセル

もし、保存された段階で自動コンパイルを行なってほしくない場合、settings.jsonに以下のように追記して下さい。

settings.json
{
    "latex-workshop.latex.autoBuild.onSave.enabled": false
}

Auxiliaryファイルの自動削除

中にはLaTeXをローカルを使用するのを忌避する理由の一つとして
auxiliaryファイルが大量に生産されて鬱陶しいというのもあると思います。
そのような場合はsettings.jsonに以下のように追記することによって
コンパイルが終わると自動的に一連のauxiliaryファイルが削除されます。

settings.json
{
    "latex-workshop.latex.clean.enabled": true
}

スッキリしましたね。

ChkTeXによる構文チェック

設定ファイルに以下の記述をすることで、自動的に構文チェックを行なってくれます。ただ、私は日本語にやたらと反応してしまうため、ChkTeXは使用しておりません。ChkTeXの詳細はドキュメント(英語)をご覧ください。

settings.json
{
    "latex-workshop.chktex.enabled": true 
}

フォントの変更

和文標準フォントのIPAexではなく、別のフォントを使用したい場合もあると思います。私の場合、個人的にはタイプフェイスデザイナーの西塚涼子氏 1の作ったフォントが凄く好きなのでAdobeとGoogleの共同開発フォントであるNoto Serif CJK JP(源ノ明朝)*に変更したいと思います。

  1. GoogleのGoogle Noto Fontsに行ってNoto Sans CJK JP/Noto Serif CJK JPをダウンロードし、インストール
  2. LuaLaTeXのフォントDBにフォントを登録する
  3. DBに登録されていることを確認
  4. プリアンブルにluatexja-presetパッケージを記載

フォントDBへの登録

LuaTeXのOpenTypeフォントを参照するDBにはインストールしたフォントが自動的に登録されません。そこで、ターミナル(cmdpowershell)を開いて、フォントDBを更新します。

# dbの更新
> luaotfload-tool --update

# Noto Serif CJK JPがdbに登録されているか確認
> luaotfload-tool --find="notoserifcjkjp"
luaotfload | resolve : Font "notoserifcjkjp" found!

# Noto Sans CJK JPがdbに登録されているか確認
> luaotfload-tool --find="notosanscjkjp"
luaotfload | resolve : Font "notosanscjkjp" found!

found!と出ていれば後は、プリアンブルに次のように記述すれば自動的に設定されます。
no-mathは数式の場合においてフォントを無視するものとなります。

sample.tex
\documentclass[autodetect-engine,dvipdfmx-if-dvi,ja=standard]{bxjsarticle}
\usepackage[noto-otf, no-math]{luatexja-preset}


 \begin{document}
  こんにちは、人生。
 \end{document}

気をつける点としては、Adobeから落とした場合とGoogleの場合で落とした場合で、同じフォントにも関わらず、フォントの名前が異なることです。(前者はSource Han Sans/Source e Han Serif、後者はNoto Sans CJK JP/Noto Serif CJK JP)
したがって、Adobeのフォントを落とした場合、プリアンブルはsourcehan-jpに変更する必要があります。

LuaLaTeXへの変更

開発チームがサイズの大きいフォントを利用した場合、LuaJITLaTeXのコンパイル速度が異常に遅くなると言っており、私の環境で試してみたところ、LuaJITLaTeXを用いた場合42.7秒、LuaLaTeXを使用した場合16.11秒という歴然とした差が生じました。

そこで、Noto fontsを利用する場合、settings.jsonlatexworkshop.latex.toolchainを書き換えて、LuaLaTeXを使用するように設定を変更しておきましょう。

settings.json
{
    "latex-workshop.latex.toolchain": [
        {
            "command": "lualatex",
            "args": [
                "--cmdx",
                "--fmt=lualatex.fmt",
                "%DOCFILE%"
            ]
        }
    ]
}

上手くいけば、IPAexフォントが、Noto Serif CJK JPに変更されます。
勿論、Unicode文字もうまく表示されていますね。

Noto Serif CJK JPの場合

IPAexの場合

注意点

  • 原稿のソースファイルの文字コードはUTF-8 固定にしなければならない
  • 動作が遅い、軽量化したLuaJITLaTeXでも上記のようにフォントによっては物凄く重くなる場合がある
  • pTeXで使用できたzw, zhという単位は使用できず\zw, \zhのような 制御綴にしないといけない為、現在のpTeXで使用しているマクロや*.styファイル にそれらの単位表記が含まれる場合、置換などで変更する必要がある

参考URL


  1. 最近もAdobeが貂明朝を発表して話題になりましたね。