VScodeでLaTex環境を整える際のあれこれ
はじめに
理系大学生は割と使いがちな LaTeX 。Overleaf で書いている人が多いと思いますが VSCode でこの環境を整えることで自分好みにカスタマイズでき、執筆意欲なども上がると思うのでぜひ環境を整えてほしいと思います。
今回行うこと
- Tex Live のインストール
- Visual Studio Code のインストール
- .latexmkrc ファイルの作成編集
- Visual Studio Code の設定
インストール
1. Tex live
-
Windows
- TEX Wikiから install-tl-windows.exe または install-tl.zip をダウンロードしインストーラーの指示にしたがってインストールする。
-
Mac
brew install mactex-no-gui --cask
※Mac に関しては試したことがないのでこれでうまく行かなければ他で検索してみてください。
- Linux(Ubuntu)
sudo apt install texlive-full
2. VSCode
-
Windows
- Visual Studio Codeからインストーラーをダウンロードしインストーラーの指示にしたがってインストールする。
-
Mac
brew install visual-studio-code --cask
※Mac に関しては試したことがないのでこれでうまく行かなければ他で検索してみてください。
- Linux(Ubuntu)
sudo snap install code --classic
.latexmkrc の編集
まずは VSCode やテキストエディターを用いて.latexmkrc の作成を行う。
latexmkrc とはファイルが更新されると自動で PDF を更新してくれたり他にも色々してくれるもの。
latexmk ではビルド方法などの設定をホームディレクトリに( ~/.latexmkrc (Windows では %USERPROFILE%.latexmkrc ))に書くのが標準的です。
以下は私が使っている~/.latexmkrc の設定です。
#!/usr/bin/env perl
# latex
$latex = 'uplatex -halt-on-error';
$latex_silent = 'uplatex -halt-on-error -interaction=batchmode';
# bibtex
$bibtex = 'upbibtex';
# dvi/pdf
$dvipdf = 'dvipdfmx %O -o %D %S';$pdf_mode = 3;
# index
$makeindex = 'mendex %O -o %D %S';
正直この内容は気にしなくてもいい気がする。コピペで特に問題はない。
Visual Studio Code でやること
- 拡張機能 LaTeX Workshop のインストール
- settings.json の編集
- スニペットを登録
LaTeX Workshop のインストール
LaTeX Workshop は VScode で tex を書くときには必須の拡張機能です。コード補完やコードフォーマット、pdf プレビューなどの便利な機能を提供してくれます。
settings.json の編集
VSCode では設定を settings.json に書きます。VSCode 内の左下の歯車マークから 設定 を選択し、タブ右上のファイルマークを押すと JSON が開きます。
以下は私の settings.json です。
{
// ===== Latex =====
// 使用パッケージのコマンドや環境の補完を有効にする
"latex-workshop.intellisense.package.enabled": true,
// ビルドのレシピ
"latex-workshop.latex.recipes": [
{
"name": "latexmk-uplatex",
"tools": ["latexmk-uplatex"]
}
],
// 生成ファイルを現在のディレクトリに吐き出す
"latex-workshop.latex.outDir": "",
// ビルドのレシピに使われるパーツ
"latex-workshop.latex.tools": [
{
"name": "latexmk-uplatex",
"command": "latexmk",
"args": [
"-synctex=1",
"-interaction=nonstopmode",
"-file-line-error",
"-pdfdvi",
"-outdir=%OUTDIR%",
"%DOCFILE%"
],
"env": {}
}
],
"latex-workshop.view.pdf.viewer": "tab",
"latex-workshop.view.pdf.external.synctex.args": [
"-forward-search",
"%TEX%",
"%LINE%",
"-reuse-instance",
"-inverse-search",
"code.cmd -r -g \"%f:%l\"",
"%PDF%"
],
"latex-workshop.latex.autoClean.run": "onBuilt",
"latex-workshop.latex.clean.fileTypes": [
"*.aux",
"*.bbl",
"*.blg",
"*.idx",
"*.ind",
"*.lof",
"*.lot",
"*.out",
"*.toc",
"*.acn",
"*.acr",
"*.alg",
"*.glg",
"*.glo",
"*.gls",
"*.ist",
"*.fls",
"*.log",
"*.fdb_latexmk",
"*.snm",
"*.nav",
"*.dvi",
"*.synctex.gz"
],
"workbench.editor.enablePreview": false,
"editor.formatOnSave": true,
"[latex]": {
"editor.formatOnSave": true,
"editor.defaultFormatter": "James-Yu.latex-workshop"
},
"latex-workshop.latexindent.path": "latexindent",
"latex-workshop.latexindent.args": [
"%TMPFILE%",
"-c=%DIR%/",
"-y=defaultIndent: '%INDENT%'"
],
"workbench.editorAssociations": {
"*.pdf": "latex-workshop-pdf-hook"
},
}
この settings.json の内容に関してはまた別の記事で説明しますが、簡単に言うと VScode の設定をコードで編集できるということです。
スニペットの追加
LaTeX Workshop である程度のスニペットが提供されていますが、独自でスニペットを設定すると研究室の週報やテンプレートをすぐに呼び出すことが可能になります。まずはネットに転がっているテンプレートをスニペットにしてみます。
VSCode 内の左下の歯車マークから ユーザースニペット を選択し、 latex を選択すると latex.json が生成されます。
{
"report": {
"prefix": "report",
"body": [
"\\documentclass[${1:a4paper,11pt}]{${2:jsarticle}}",
"",
"",
"% 数式",
"\\usepackage{amsmath,amsfonts}",
"\\usepackage{bm}",
"% 画像",
"\\usepackage[dvipdfmx]{graphicx}",
"${3}",
"",
"\\begin{document}",
"",
"\\title{${4}}",
"\\author{${5}}",
"\\date{${6:\\today}}",
"\\maketitle",
"",
"",
"$0",
"",
"",
"\\end{document}"
],
"description": "授業レポート用テンプレート"
}
}
- "report"はこれが何のスニペットか分かるようなものなら何でも大丈夫です。
- "prefix"はスニペットを呼び出す際の名前
- "body"はスニペットの内容です。
- "description" は選択時に表示される説明です。
実際に使ってみる
ユーザースニペット
さきほど設定した report スニペットを呼び出す時は report と打って出てきた候補を選択すればスニペットが展開されます。一瞬でレポートのテンプレートが作成されます。
ビルドとプレビュー
画面右上の緑色の三角マークをクリックするとビルドされる。それ以降はファイルを保存するたびに自動でビルドされるようになる。
おわりに
かなり長々と書きましたが LaTex は Word などよりも圧倒的に使いやすくきれいにレポートを作成できると私は思います。間違えている部分があればぜひ教えていただきたいです。ぜひみなさんも快適な LaTex ライフを。
Discussion