macOS High Sierra & Ubuntu 16.04 で 日本語LaTeX環境構築 with Visual Studio Code

# 概要
macOS High Sierra & Ubuntu 16.04 でLaTeXの環境を整えたので，メモを残しておく．
(2018/03/28 LaTeX Workshopのバージョンアップに伴い更新)

# LaTeX環境のインストール
以下のコマンドを実行して，一連のパッケージを導入する．
数GBあるので，通信環境が良好なところで実行することを勧める．

## macOSの場合
ここの手順通りに進めることでインストールできた．
[El Capitan / SierraでTeX環境をゼロから構築する方法](https://qiita.com/hideaki_polisci/items/3afd204449c6cdd995c9)

## Ubuntuの場合

```bash
$ sudo apt update
$ sudo apt upgrade
$ sudo apt install texlive texlive-lang-japanese texlive-lang-cjk
$ sudo apt install texlive-fonts-recommended texlive-fonts-extra
```

# Visual Studio Codeの設定

以下の情報は，Visual Studio Code 1.21.1 & LaTeX Workshop 5.0.3 で動作確認をしている．
(5.0系以前と以降でLaTeX Workshopの設定ファイルの形式が変わった?)

## Visual Studio Codeのインストール
TeXのエディタとしてはEmacs,VimやAtomがメジャーなようだが，Emacs,Vimは(まだ)極めていない，Atomは無駄に重いので，Visual Studio Codeを使う．

[Visual Studio Code](https://code.visualstudio.com/) のページからパッケージをダウンロード，インストールする．

## LaTeX Workshopのインストール

1. Visual Studio Codeを起動
2. F1を押して`Extensions: Install Extensions`と入力
3. Marketplaceで`LaTeX Workshop`を検索し，インストール
4. Visual Studio Codeを再起動

## LaTeX Workshopの設定

メニューから，基本設定 -> 設定をクリックし，`setting.json`を開く．
(ユーザー設定のタブが開かれていることを確認する．)

JSON形式でエディタ・拡張機能の設定を記述できる．

このJSONファイルにLaTeX Workshopの設定を追記する．

```setting.json
{
    /////////////////////////
    // LaTex Workshopの設定 //
    /////////////////////////
    // toolsの設定
    "latex-workshop.latex.tools": [
        {
            "command": "pdflatex",
            "args": [
                "-kanji=utf8",
                "%DOCFILE%"
            ],
            "name": "pdflatex"
        },
        {
            "command": "platex",
            "args": [
                "-synctex=1",
                "-interaction=nonstopmode",
                "-file-line-error",
                "-jobname=\"%DOCFILE%\"",
                "-kanji=utf8",
                "-guess-input-enc",
                "%DOC%"
            ],
            "name": "platex"
        },
        {
            "command": "pbibtex",
            "args": [
                "-kanji=utf8",
                "%DOCFILE%"
            ],
            "name": "pbibtex"
        },
        {
            "command": "dvipdfmx",
            "args": [
                "%DOCFILE%.dvi"
            ],
            "name": "dvipdfmx"
        }
    ],
    "latex-workshop.latex.recipes": [
        {
            "name": "pdflatex (with pbibtex)",
            "tools": [
                "pdflatex",
                "pbibtex",
                "pdflatex",
                "pdflatex",
            ]
        },
        {
            "name": "pdflatex (without pbibtex)",
            "tools": [
                "pdflatex",
                "pdflatex",
            ]
        },
        {
            "name": "platex (with pbibtex)",
            "tools": [
                "platex",
                "pbibtex",
                "platex",
                "platex",
                "dvipdfmx"
            ]
        },
        {
            "name": "platex (without pbibtex)",
            "tools": [
                "platex",
                "platex",
                "dvipdfmx"
            ]
        },
    ],
    // auxiliaryファイルを自動で削除する
    "latex-workshop.latex.clean.enabled": true,
    // VSCodeのタブでプレビュー
    "latex-workshop.view.pdf.viewer": "tab",
}
```

* `"latex-workshop.latex.clean.enabled": true` は，中間ファイルを自動で削除するかしないかの設定
* `"latex-workshop.view.pdf.viewer": "tab"` は，PDFのプレビューをVSCodeのタブで行う設定
    * "browser"にすると，デフォルトのブラウザでプレビューできる 

# LaTeX Workshopの使い方

一度実行したコマンドは，F1を押して選択するだけで実行できるようになる．

## タイプセット

1. `.tex`ファイルを開いた状態でF1を押し，`build with recipe`と入力してEnterを押す．
2. `with bibtex` か `without bibtex` を選択してEnterを押す．

もしくは，`.tex`ファイルを開いた状態でF1を押し，`build latex project`と入力してEnterを押してもよい．
この場合，`latex-workshop.latex.recipes` の先頭にある `recipe` が実行される．
(上記の設定では `with bibtex`)

## PDFのプレビュー

`.tex`ファイルを開いた状態でF1を押し，`view latex pdf file`と入力してEnterを押す．

## プロジェクトごとの設定

`Build LaTeX project` でタイプセットを行う場合，上記の設定では `with bibtex` の `recipe` が使用される．
BibTeXを使用していないプロジェクト (`\bibliography` が記述されてない or `\cite` が一度も用いられていないもの？) では，この `recipe` でタイプセットを行おうとするととエラーが発生する．`Build with recipe` から適切な `recipe` を選択すればこのエラーは回避できるが，毎回選択するのは面倒である．

VSCodeでは，プロジェクトごとの設定によってユーザー設定を上書きできるので，それを使用してビルド手順を簡略化する．

1. `.vscode` という名称のディレクトリを `*.tex` ファイルのあるディレクトリに作成
2. `.vscode/` 以下に `settings.json` という名称のファイルを作成
3. `settings.json` に以下の記述を行う．

```json:settings.json
{
    "latex-workshop.latex.recipes": [
        {
            "name": "without bibtex",
            "tools": [
                "extractbb",
                "platex",
                "platex",
                "dvipdfmx"
            ]
        },
        {
            "name": "with bibtex",
            "tools": [
                "extractbb",
                "platex",
                "pbibtex",
                "platex",
                "platex",
                "dvipdfmx"
            ]
        }
    ]
}
```

プロジェクトを開く場合には，`.vscode` ディレクトリを内包するディレクトリをVSCodeで開く必要がある．
ターミナルから開くのが簡単だと思う．
([ターミナルからVisual Studio Codeを起動する方法【公式の方法】](https://qiita.com/naru0504/items/c2ed8869ffbf7682cf5c))

```
$ code /path/to/directory_containing_vscode_dir/
```

以上の設定を行うと，このプロジェクトで `Build LaTeX project` によるタイプセットを行う場合，`without bibtex` の `recipe` が使用される．


# おまけ

以下のようなシェルスクリプトを用意しておくと，一時ファイルをまとめて削除できる．

```bash:remove_tmpfiles.sh

#!/bin/sh
if [ $# = 1 ]
then
    path=$1
    dir=$(cd $(dirname $path) && pwd)
    file=$(/usr/bin/basename $path)
    abs_path=$dir/$file
    FILENAME_AND_EXT=$dir/${abs_path##*/}
    FILENAME=${FILENAME_AND_EXT%.*}
    FILE_EXT=$dir/${FILENAME_AND_EXT##*.}
    if [ $FILE_EXT = $dir"/tex" -o $FILE_EXT = $dir"/pdf" ]
    then
        if [ -e ${FILENAME}.aux ]
        then rm -i ${FILENAME}.aux
        fi
        if [ -e ${FILENAME}.log ]
        then rm -i ${FILENAME}.log
        fi
        if [ -e ${FILENAME}.blg ]
        then rm -i ${FILENAME}.blg
        fi
        if [ -e ${FILENAME}.bbl ]
        then rm -i ${FILENAME}.bbl
        fi
        if [ -e ${FILENAME}.dvi ]
        then rm -i ${FILENAME}.dvi
        fi
        if [ -e ${FILENAME}.brf ]
        then rm -i ${FILENAME}.brf
        fi
        if [ -e ${FILENAME}.synctex.gz ]
        then rm -i ${FILENAME}.synctex.gz
        fi
    fi
fi
```

```
$ ./remove_tmpfiles.sh file.tex
```