VSCodeでLaTeXを書くと楽
おはようございます! しぐまです.
今回は,Visual Studio Code (以下VSCode)を使ってLaTeXを書けるようにする話です.
VSCodeを使ったきっかけ
以前の私は,LaTeXを用いて文書を作成する際にCloud LaTeXを用いていました*1. その際,不便に感じることがあったため有識者に相談すると「VSCodeとか使うと便利らしいよ」と教えてくれました*2. そんな話を聞いてからしばらくたった後,私も「VSCodeへ乗り換えよう!」と決意しました. しかし,実際にVSCodeでLaTeXを打とうとすると,
といった3つの作業が必要になり,実際に主要な環境として使用し始めるまで1月半ほどかかってしまいました. そこで,今回は私の環境構築の様子をそのまま書くことで,後からVSCodeでLaTeXを書く人の助けになることを目指しています.
VSCodeと格闘した日々
参考にしたサイトのリンクと一緒に何をしたか書いていきます*4. 後から問題や便利なツールに気付くことがあったので,とりあえず一通り眺めた方が楽に環境構築できると思います. 私がWindowsを用いているため,その他のOSを用いている人は該当しないことも多いかもしれません. 私が楽なため,以下常体で書きます.
03/15
TeX Live 2019をインストールした*5.
TeX Live 2019をインストールした - algebraic dialy | 壱大整域弄ってたら良く分からなくなったので,VSCodeを初期化した.
Visual Studio Codeの設定を初期化する(Windows)LaTeX Workshopをインストールした.
VSCode で最高の LaTeX 環境を作る - Qiitalatexmkを用いるためにPerlをインストールした.
Windows への TeX インストール(W32TeX・発展編) - Acetaminophen’s diary :latexmkにPerlが必要だと教えてくれた.
Strawberry PerlをWindowsにインストールする - Perlゼミ :Strawberry Perlのインストール方法.latexmkを設定した...と思っていたが,LaTeX Workshopのビルドレシピを設定してた(2020年8月現在に至るまでlatexmkを使っていなかった). この際,BibTeXを用いていないため,載っていた設定からBibTeXについての処理を消し,platexをuplatexに変更した.
Texの環境構築(Windows,Ubuntu)【VS code】 - Qiita :最後の方に載っていた"latex-workshop.latex.recipes"
を基に設定した.
03/30
いつものtexファイルのテンプレートが使えるように,user snippetのlatexのところに「\mytemplate」を追加した.
VSCodeにコードスニペットを登録して効率的にコーディング! – HPcode(えいちぴーこーど) :snippetの作り方.
JSON入門 - とほほのWWW入門 :JSONでそのまま使えない文字を知るために見た.以前インストールしていたTeX Live 2018が読み込まれてしまうため,2018版を消した. それに伴い,自分のプリアンブルを読み込める場所に移動した.
LaTeX入門/各種パッケージの利用 - TeX Wikiその際,パッケージを使うために必要だったのでls-Rを更新した. 一度更新に失敗したので調べた結果,管理者権限が必要だった.
[tex-live] [texhax] ! LaTeX error: File 'rcs.sty' not found. :同様の質問とその回答.個人的に邪魔だったので自動ビルドや誤字チェックを切った. また,生成したPDFは横に表示するようにした(後に変更).
VSCode+LaTeXで楽に執筆する環境設定 [Windows/macOS] | mktia's note
04/13
- user snippetを拡張機能を用いて楽に増やした.
VSCode で簡単にスニペットを追加できる拡張機能 | PCの歯車
- user snippetを拡張機能を用いて楽に増やした.
04/14
- LaTeX Workshopのスニペットを使うために環境名を「definition」などにした結果,cleverefパッケージの初期設定によって「定義」ではなく「definition」が表示されるようになった.
それに対応するため,crefnameを用いて名前を指定した
*6.
cleverefで賢く参照する - Qiita
- LaTeX Workshopのスニペットを使うために環境名を「definition」などにした結果,cleverefパッケージの初期設定によって「定義」ではなく「definition」が表示されるようになった.
それに対応するため,crefnameを用いて名前を指定した
*6.
04/15
PDF viewerとしてSumatra PDFを用いることにした.
Visual Studio Code/LaTeX - TeX Wiki :PDF表示の設定.
USBメモリ活用講座【基礎編・PDFビューアのポータブル化-SumatraPDF】 :Sumatra PDFの解説.inverse search*7について設定していたら,TeX Wikiの設定の書き方ではエラーを吐かれた. 調べた結果,
"hoge":{ "huga1": "settei1", "huga2": "settei2"}
という書き方ができないので,"hoge.huga1":{ "settei1"}
と"hoge.huga2":{ "settei2"}
に分ける必要があることがLaTeX Workshopの公式ドキュメントから分かった.
Visual Studio Code/LaTeX - TeX Wiki :VSCodeにおけるSumatra PDFのinverse searchについて *8.
SumatraPDF - MyTeXpert :設定を開いても必要な項目が出ないことへの対処法.
View · James-Yu/LaTeX-Workshop Wiki · GitHub :LaTeX Workshopの公式ドキュメント.
04/16
- 単語補完が日本語に対して機能していないのに,求めていない文章を出してきて邪魔なので設定を切った *9.
04/17
ミニマップが邪魔だったので消した.
VS Codeのミニマップの表示/非表示を切り替えるには:Visual Studio Code TIPS - @IThover preview*10を自分が定義したコマンドにもしてほしかったため調べた. 解決方法は分かったが,時間がないので後回しにした.
Support for `DeclarePairedDelimiter` in equation preview · Issue #1907 · James-Yu/LaTeX-Workshop · GitHub :同様の質問とその回答.
Hover · James-Yu/LaTeX-Workshop Wiki · GitHub :弄るべき設定について.
Supported TeX/LaTeX commands — MathJax 3.1 documentation :MathJaxでサポートされているコマンド(これ以外はそもそも表示されない).
CTAN: Package mleftright :ドキュメントを読んで,表示したかった\mleft
と\mright
の定義を確認した.
暗黙的な波括弧は波括弧か波括弧でないか (1) - マクロツイーター :その定義に出てきた\bgroup
と\egroup
の解説 *11.
暗黙的な波括弧は波括弧か波括弧でないか (2) - マクロツイーター :同上.
04/18
- hover previewのために必要な作業を実行した
*12.
math mode - How to typeset $:=$ correctly? - TeX - LaTeX Stack Exchange :\coloneqq
について.
math mode - Why do I need an \hbox inside \vcenter to make it work? - TeX - LaTeX Stack Exchange :なぜ\vcenter
の中に\hbox
を入れるのか.
http://www.math.kobe-u.ac.jp/HOME/kodama/tips-latex-math-margin.html :間隔の弄り方 *13.
- hover previewのために必要な作業を実行した
*12.
結果と必要な作業のまとめ
まず,2020年8月現在では,私のワークフローは次のようになった:
- 使用しているエンジンはupTeX. それに応じて,一部の設定でptex・platexをuptex・uplatexに変更している.
- 文書の作成はLaTeX Workshopの機能であるビルドレシピを,VSCodeの設定でCtrl+Alt+Bで行えるようにした *14.
- PDFはSumatra PDFで表示している.
次に,VSCodeでLaTeXを書くために必要な作業と,それに該当する私の行った作業を記しておく. まず,最低限必要な作業は次の3つである:
- TeX・LaTeXのインストール
私が行った作業の中では,TeX Liveのインストール(03/15)が該当している. - VSCodeでLaTeXを使えるようにする
日本語化とLaTeX Workshopのインストール(03/15)さえ行えばまずは充分だろう. - 作業しながらPDFを見れるようにする
私はSumatra PDFに設定した(04/15)が,特に不満がなければVSCode内で表示されるように設定すればよい(03/30)と思われる.
また,VSCodeの機能を利用して快適に作業を行うためには,加えて次のような作業が必要になる:
- 文書作成の簡略化
私はビルドレシピを用いて,一連の作業(uplatexで3回コンパイルした後,dvipdfmxでpdfファイルを作成する)をコマンド1つで行えるようにした(03/15). - スニペットの設定
私は主にユーザースニペットの設定を行った(03/30,04/13). LaTeX Workshopに元から用意されているコマンドも沢山あるため,それを知っておくとより便利だろう.
Snippets · James-Yu/LaTeX-Workshop Wiki · GitHub :LaTeX Workshopの公式ドキュメントのスニペットについての頁. - inverse searchの設定
私はTeX WikiやMyTeXpertのSumatra PDFの頁に書いてあることを参考に設定した(04/15). - hover previewの設定
簡単なコマンドを\newcommand
などを使って定義しているだけなら問題はないが,xparseパッケージの\NewDocumentCommand
や,MathJaxでサポートされていないパッケージの命令(bmパッケージの\bm
など)を用いた際,他のコマンドも表示されなくなることを防ぐために,別個でtexファイルを用意する必要がある. 私はMathJaxのサポートしているコマンドを調べ(04/17),別個のtexファイルを用意した(04/18).
実際にVSCodeを使ってる感想
上記を見れば分かるように,明らかにPC初心者には負担が大きすぎる作業量である(たぶん)(知らんけど). しかし,実際にVSCodeでLaTeXを書いていると,頑張って設定した色々のお陰で作業はすこぶる快適になった. だからこそ,多少大変でも使って欲しいと思い,こんな記事を書いたのである.
この記事が皆さんの快適なLaTeX生活の一助となれば幸いである.
謝辞
大学の友人たちは本記事の校閲を助けてくれました. ありがとう!
また,本記事の内容や,僕のLaTeXについての様々な質問に答えていただいたえぬぬんさんに感謝の意を表します.
えぬぬんさんが「初心者が0から環境構築した流れを見たい」と言わなければ,この記事ができることはありませんでした.
ちなみに,えぬぬんさんが書いた以下の記事を読むと,どんなときに(Wordではなく)LaTeXを使うべきなのか,どのようにtexファイルを書くべきか,ということが分かるので是非読んでみてください!
web.archive.org
追記
えぬぬんさんの書いた記事が消えて見れなくなっていたため,リンクをアーカイブに差し替えました.(2021/02/16)
Cloud LaTeXが便利になったみたいなので,実際に試してみました.(2021/02/16) drive.google.com
*1:追記に2021年2月時点におけるCloud LaTeXの使用感を書きました.
*2:ご本人は別のエディタを用いているらしい.
*3:texファイルを書くことをこう呼んでいます.会話で使うと手書きと紛らわしいです(だから面白い).
*4:リンクは問題があったら消します.
*5:この記事を公開した2020年8月現在にはTeX Live 2020が出ている.
*6:後になって,自分で設定したスニペット(labelとかも同時に出る)の方が便利であることに気付いた. しかし,figure環境を参照した際に「図n」と表示させるためにcrefnameが必要であり,役には立った.
*8:私がSumatra PDFを選んだ理由は,inverse searchがCloud LaTeXと同じダブルクリックで可能なためである.
*9:調べた際に「全角句読点を区切りとして設定すればよい」と出てきたが,設定してもなぜか上手く行かなかった. 解決法を知ってる方がいたら,教えてくださると助かります.
*10:カーソルを数式のコードに合わせたら数式が表示されるやつ.
*11:MathJaxで使用できる記号で代用するために理解する必要があった.
その後も調べた結果,mleftrightパッケージを用いずに似た挙動を示すコマンドが作れることが分かった(括弧類で囲まれたものとコード上で波括弧で囲まれたものの扱いは本質的に違うが,周りとの間隔を減らすという役割は果たせる):
『数式組版』を組む技術:\leftと\right (2)|きえだゆうすけ(p_typo)|note
*12:MathJaxでサポートされたコマンド使って,普段用いているコマンドを書いたtexファイルを作成した. とても面倒だったので,良い対処方法を知ってる人は教えて下さい...
*13:基本的にLaTeXは勝手に間隔を調整してくれるので,普段書く際はその設定に沿った書き方をするべきである.
実際に設定を生かす例:
\newcommandを乱用するな、\DeclareMathOperatorを使え(LaTeXでの演算子の定義)
*14:ショートカットキーの設定は,このサイトにあるようにすればよい:
VSCodeでキーバインドを設定する。keybindings.jsonが無い時の対処法 - Qiita