kukkuのメモ帳

勉強したこと,思ったこと,あったことをつらつら書いていきます

VS Codeを使った私のTeX執筆環境

卒論、修論、レポートに追われている皆さん、こんにちは。

初めてTeXを使っている人もそうでない方も、TeXの執筆環境の構築は迷うところではないでしょうか。

私は7,8年ほどTeXを使用しており執筆環境は毎年試行錯誤してきましたが、 昨年から採用したVS Codeを中心とした執筆環境が中々良さげなのでまとめようと思います。

私の必要要件

  • 複数環境で同じように使える
    • Windowsmacの両方で執筆することがあるため
    • Overleafよさげではあるが、ローカルで不便を感じていないしとりあえずいいかなあと
  • 強力な使い慣れたエディタで書ける
    • 元々開発、執筆エディタを統一するようにしていた。数年前からVS Codeをメインで使うようになり、移行したかった
    • TeXworksちょっとつらい
  • 自前スタイルファイルを使わない
    • newcommandなどを駆使したスタイルファイルを使っていた時期もあったが、コピーする時やら環境移行やら人にわたす時やら色々面倒だった
    • マクロは各TeXファイルごとにちょっと書く分には便利だと思う

一言で言うと

VS Codeスニペットと二つの拡張機能をごりごり使います

VSCodeとは

VS CodeVisual Studio Code)とはMicrosoftが開発したフリーの高機能エディタで、WindowsmacOSLinux上で動作します。

この手のエディタとしては後発(Sublime TextとかAtomとかが先)ですが、 高機能、比較的軽量、本体も拡張機能も開発が活発とあり、かなり使用者が増えている印象です。

環境構築

TeX インストール

TeXLiveを入れましょう。TeX Wikiに全て書いてあります。 texwiki.texjp.org

texwiki.texjp.org

texwiki.texjp.org

使用するOSに合わせたページを見ながらインストールしてください。

VS Code インストール

インストーラを落としてから入れましょう。従うだけです。簡単。

code.visualstudio.com

拡張機能 インストール

VS Codeを起動し、拡張機能を入れていきます。 Extensionタブに拡張機能名を入れると出てきます。

Settings Sync

f:id:kukku2123:20190204183954p:plain

GithubのGistを介して、異なるPC間で設定を全て同期する拡張機能です。 設定ファイルから、スニペットキーバインド、インストール済みの拡張機能などおおよそ同期できます。 複数の環境でVS Codeを使用する場合は必須とも言えるのではないでしょうか。 使用する環境が一つしかない場合は必要ありません。

READMEの記述通りにセットアップするとすぐ使用できます。 詳しい使用方法は別記事に譲ります。

LaTeX Workshop

f:id:kukku2123:20190204184738p:plain

かなり強力なLaTeX拡張機能です。 頻繁にアップデートを重ねており、有名所ではSublime TextのLaTeXToolsにも匹敵する機能を持ちつつあります。 例えば

といった基本的なところから、

  • bibファイルの文献タグ、labelなどの補完
  • 数式部分をホバーするとプレビュー表示

などといった機能も搭載しています。

こちらは拡張機能タブから検索、インストールすることですぐに使用できます。

VS Code 設定

LaTeX Workshop

この拡張機能で設定可能な項目は大量にあるのですが、ここではビルドコマンドの設定をしてきます。

LaTeX Workshopではビルドの設定を「tools」と「recipes」に分けて行います。 役割は以下のように分けられます。

  • tools:ターミナルに打ち込むものと同じコマンドと引数を書く
  • recipes:toolsに書いたコマンドを組み合わせて、実行するビルドセットを構築する

これらはそれぞれ複数記入可能です。 つまり、例えばtoolsにplatexのコマンドとdvipdfmxのコマンドを書いておき、recipedでこれらを組み合わせたセットを作ればplatexでビルドができます。

とありますが皆さんはもちろんlatexmk使いますよね? というわけで私の使っているLaTeX Workshopの設定はこんな感じです。

    "latex-workshop.latex.recipes": [{
        "name": "latexmk",
        "tools": ["latexmk"]
    }],
    "latex-workshop.latex.tools": [{
        "name": "latexmk",
        "command": "latexmk",
        "args": [
            "-e", "$latex=q/platex -synctex=1 -halt-on-error/",
            "-e", "$bibtex=q/pbibtex/",
            "-e", "$biber=q/biber --bblencoding=utf8 -u -U --output_safechars/",
            "-e", "$dvipdf=q/dvipdfmx %O -o %D %S/",
            "-e", "$makeindex=q/mendex %O -o %D %S/",
            "%DOC%"
        ]
    }],

こんなコマンドなってねえよっていう方は適宜変えてください。 あと教えてください。

スニペット

LaTeX Workshopにもスニペットはある程度用意されているのですが、 さらによく使うものを登録しています。 例えば表は

"Table": {
    "prefix": "table",
    "body": [
        "\\begin{table}[${1:t}]",
        "\\centering\\caption{$2}\\label{tabl:$3}",
        "\\begin{tabular}{$4}\\hline",
        "$5",
        "\\end{tabular}\\end{table}"
    ],
    "description": "set table"
}

横並びの図は、まず"mfigure"と名付けたスニペットを展開して

"Multi fig": {
    "prefix": "mfigure",
    "body": [
        "\\begin{figure}[${1:tbp}]",
        "${4:figureitem}",
        "\\caption{$2}\\label{fig:$3}\\end{figure}"
    ],
    "description": "set multi fig. Please use 'mfigitem'"
}

figureitemのところに"figureitem"を展開するようにしました。

"Multi fig item": {
    "prefix": "figureitem",
    "body": [
        "\\begin{minipage}[t]{${1:size}\\hsize}\\centering",
        "\\includegraphics[${2:width=\\linewidth}]{$3}",
        "\\subcaption{$4}\\end{minipage}"
    ],
    "description": "set multi fig item"
}

また、よく使う書き出し部分も登録しています。

"TeX templete": {
    "prefix": "templete",
    "body": [
        "\\documentclass[a4j, dvipdfmx]{jsarticle}\n",
        "\\usepackage[dvipdfmx]{graphicx}",
        "% \\usepackage[dvipdfmx, draft]{graphicx}  % Output only frame of figure",
        "\\usepackage{amsmath, amssymb}  % Extend math",
        "\\usepackage{float}  % Improved interface for floating objects",
        "\\usepackage{multirow}  % Create complex table",
        "\\usepackage{url}  % Display URL",
        "\\usepackage{subcaption}  % Use subcaption",
        "\\usepackage{tabularx}  % Newline in table cell\n",
        "\\begin{document}",
        "$1",
        "\\end{document}"
    ],
    "description": "documentclass and packages"
}

まとめ

以上、いかがでしたでしょうか。

簡単ではありますが、それなりに強力、高速、便利な執筆環境が出来たのではないかと思います。 この記事をご覧になった皆さんの参考になりましたら嬉しいです。

付録

今私が使っているVS Codelatexスニペットを公開します。

VS Code LaTeX Snippet

スニペットから\refを参照すると補完が効かないのが今唯一上手く行ってない部分です。