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


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

まず前提として、世の中には[Cloud Latex](https://cloudlatex.io/ja)という便利な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](https://www.tug.org/texlive/acquire-netinstall.html)(2017/12/24執筆時点)からインストーラをダウンロードしましょう。

上記はWindowsのインストーラになるのでその他のOSの場合、[こちら](https://texwiki.texjp.org/?TeX%20Live)を参考にして下さい。

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

## VScode
次に、[VScode](https://code.visualstudio.com/)をダウンロードしましょう。特に問題がなければ最新の安定版を落として下さい。

インストールが終わったら起動画面で`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_](https://qiita.com/Tats_U_)氏がその面倒を一発で終わらすスクリプトを書いているので、もし利用する場合は、そちらを[参照](https://qiita.com/Tats_U_/items/01d48eb70a8b359b0d95)にして下さい。

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

# プリアンブルの記述方法
```latex: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"`の記述を加えて下さい。

```json:settings.json
{
    "latex-workshop.latex.toolchain": [
        {
            "command": "luajitlatex",
            "args": [
                "--cmdx",
                "--fmt=luajitlatex.fmt",
                "%DOCFILE%"
            ]
        }
    ]
}
```
これでコンパイルができるようになります。

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

```json: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`に以下のように追記して下さい。

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

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

スッキリしましたね。


## ChkTeXによる構文チェック

設定ファイルに以下の記述をすることで、自動的に構文チェックを行なってくれます。ただ、私は日本語にやたらと反応してしまうため、ChkTeXは使用しておりません。ChkTeXの詳細は[ドキュメント（英語）](https://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&source=web&cd=2&cad=rja&uact=8&ved=0ahUKEwjNjNbz3aLYAhXBgbwKHQcpDKcQFggzMAE&url=http%3A%2F%2Fwww.nongnu.org%2Fchktex%2FChkTeX.pdf&usg=AOvVaw0Dhgr1FDKMH7Y_SshiGIM1)をご覧ください。

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


# フォントの変更

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

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

## フォントDBへの登録

LuaTeXのOpenTypeフォントを参照するDBにはインストールしたフォントが自動的に登録されません。そこで、ターミナル（**cmd**や**powershell**）を開いて、フォント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`は数式の場合においてフォントを無視するものとなります。

```latex: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.json`の`latexworkshop.latex.toolchain`を書き換えて、**LuaLaTeX**を使用するように設定を変更しておきましょう。

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

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

### Noto Serif CJK JPの場合
<img src="https://qiita-image-store.s3.amazonaws.com/0/114202/c16e42d5-7de2-47ce-79e9-c18bf41a3da6.jpeg" width=85%>

### IPAexの場合
<img src="https://qiita-image-store.s3.amazonaws.com/0/114202/fbcf5b18-876a-63fe-9f9a-19a0f2a3a61e.jpeg" width=85%>



[^2]: 最近もAdobeが貂明朝を発表して話題になりましたね。

# 注意点

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


# 参考URL

- [はじめてTeXを使う人が知っておくといいことまとめ](https://qiita.com/Tats_U_/items/01d48eb70a8b359b0d95)
- [LuaTEX-ja パッケージ LuaTEX-jaプロジェクトチーム (2016/11/12最終更新)](http://mirrors.ibiblio.org/CTAN/macros/luatex/generic/luatexja/doc/luatexja-ja.pdf)
- [LaTeX Workshop - Visual Studio Marketplace](https://marketplace.visualstudio.com/items?itemName=James-Yu.latex-workshop)
- [LuaLaTeXでフォントサンプル集が作りたい！](http://vraisamis.hatenadiary.jp/entry/2016/06/24/143245)