📝

ゼロからVSCodeでTeX環境構築(Mac Big Sur)

2022/01/08に公開

Mac VSCodeでTeXを書きたい人向けの環境構築についての記事です。

直近でレポートを書く機会はないのですが、学生の時Texを書くのに苦労した経験を思い出したので、レポート作成ってどうやったらもっと簡単になったんだろう、、と思って調べてみました。

この記事で少しでも楽に、そしてかっこよくレポート作成できるようになれればありがたいです!!
タイトルにもあるとおり、手順をなるべく詳しく書いていこうと思います〜

できるようになること

  • TeXのPDF作成までのビルド手順を自動化できるようになる。
  • TeXファイルのカーソル位置からプレビュー中のPDFの対応箇所が分かる。(逆のPDF→TeXも可能)
  • 保存する毎に自動的にビルドされ、ビューワーに反映される
  • VSCodeのグローバルな設定を変更せずに、TeX編集用のワークスペースを確保できる
  • いらない中間ファイルを自動的に削除できる。

やらないこと、注意事項

  • platexを使用せず、latexmk(lualatex)を使用します。(dvi⇨PDFという手順を踏みません)
  • LaTeX Workshopの公式ドキュメント以上の内容は含みません。
  • platex,lualatexの差異を深く考えていません。(TeXにそこまで詳しくないので、lualatexを採用することになり、platexと使用できる文字など異なる点が出てくるかもしれません。)

動作環境

  • MacOS Big Sur 11.6.2
  • MacTeX 2021.0328
  • VSCode 1.63
    (Macは最新のOSではないです、、)

Homebrewをインストールする

Homebrewを既にインストール済みの方は飛ばしてください。

HomebrewとはMacOSで使用できるパッケージ管理ツールです。

パッケージはインストーラから入れてもいいのですが、アンインストールするときどうやったらいいんだっけ?とか、今入れているパッケージの数は?とかいうことをパッと確認できないよね。
そんな時に役に立つのがパッケージをコマンドでインストールできるHomebrewで、今回はHomebrewを使ってTex、そしてVSCodeもインストールしていきます。


【手順】

  1. 以下サイトにアクセスし、インストール用URLをコピペします。
    https://brew.sh/index_ja
    Homebrew installサイト

  2. 「ターミナル」を開いてペーストし、実行します。

  3. 色々インストールしている途中ログが出てきますが、最後の方に次に実行すべきコマンドが表示されるので、インストール完了後、コマンドを実行します。
    (今回はechoで始まるコマンドとevalで始まる2つのコマンドが表示されています。)

    Homebrewのバージョンによっては文言が違うと思いますが、最後の方に次にやるべきこと(Next steps)のコマンドが説明されていると思うので、指示を読み取ってみてださい。

    ==> Next steps:
        echo 'eval "$(/opt/homebrew/bin/brew shellenv)"' >> /Users/ユーザー名/.zprofile
        eval "$(/opt/homebrew/bin/brew shellenv)"
    
  4. これでパスが通ったと思うので、以下コマンドでHomebrewが使えるかどうか確認してください。
    versionが表示できたらHomebrewのセットアップはokです。

    $ brew --version
    Homebrew 3.3.9
    

Homebrew caskでMacTeXをインストールする

既にMacTeXをインストール済みの方は飛ばしてください。

Homebrew caskとは普段アプリケーションとしてインストールしているようなものでもHomebrewでインストールできるようになる、Homebrewの機能です。

以下公式ページより引用です。

Homebrew CaskではmacOSアプリケーション、フォント、プラグイン、そしてオープンソースではないソフトウェアもインストールできます。


この機能でMac用のTeX(MacTeX)をインストールしていきます。

MacTeXとはTexLive(TeX文書を組版するためのアプリケーション)を含んでおり、GUIエディターも内蔵されているアプリケーションです。

今回はGUIは抜きでインストールします。

https://tug.org/mactex/


【手順】

  1. 以下コマンドでMacTeXをGUI抜きでインストールします。

    $ brew --cask mactex-no-gui
    
  2. 実行ファイル群のインストール先を確認し、(自身は/usr/local/texlive/2021/bin/universal-darwinにインストールされていました)インストール先パスをコピーする。

  3. /Users/[ユーザー名]に移動し、.zshrcファイルに以下一文を記入する。

    export PATH=/usr/local/texlive/2021/bin/universal-darwin:$PATH
    

    Finderでは隠しファイルが見えないように初期設定されているので、cmd+shift+.で隠しファイルを表示させてください。

    .zshrcがない場合はこの名前でUsers/[ユーザー名]直下に作成してください。

    実行ファイル群が保存されている場所は適宜変更してください。

  4. ターミナルを一度再起動して、以下コマンドでパスが通っているか確認する。

    $ latexmk --version
    Latexmk, John Collins, 20 November 2021. Version 4.76
    


latexmkの情報が出てきていれば成功です。
ここまででコマンドベースでTexを使用できる環境が整いました。

取り敢えずTeXの環境はこれで完了でもいいのですが、これ以降の章ではこの環境をVSCodeで自動化してさらに使用しやすくしていきます。

VSCodeを Homebrew caskでインストールする

VSCodeが既にインストールされている方は飛ばしてください。

公式サイトの手順に従ってインストールしてもいいですが、今回は以下コマンドでインストールしてみます。
VSCodecaskinstall_command_capture

$ brew install --cask visual-studio-code 

これでインストールが完了すればVSCodeが「アプリケーション」の中に表示されており、使用できると思います。

VSCodeで拡張機能(LaTeX Workshop)をインストールする

VSCodeの拡張機能LaTeX Workshopをインストールします。
mactexinstall_command_capture

この拡張機能を使用するとTeX文書を保存したりする毎に自動的にビルドしてくれ、PDFも更新してくれます。
また、ビルトインPDFビューアも入っているので、全てVSCodeでTex文書作成を完結させることができます!(この機能ありきで今回の記事を作成しようと思った次第です。)
(似たような名前でTeX Workshopもあるので気をつけてください、、)


【手順】

  1. VSCodeの拡張機能検索ボックスからLaTeX Workshopと検索し、installボタンを押してください
  2. 一度VSCodeを再起動して拡張機能を有効にします。

以上で拡張機能はインストール完了です。
これでVSCodeのボタン一つでTeXビルドをできるようになったので、自分の好きなようにビルドコマンドを設定していきます。

手順としてはVSCodeの設定ファイルをTeX編集用ワークスペースに保存し、ワークスペース内のみで独自設定を反映していく感じです。

LaTeX Workshopのデフォルト設定ファイルを上書きする


【手順】

  1. 自分のTeX作業用ディレクトリを作成してください。

  2. そのディレクトリをVSCodeで開いてください。
    (VSCodeを開いている状態でcmd+Oで開くディレクトリを開くことができます。)

  3. 開いている状態でcmd+,を押下し、設定画面を開きます。

  4. ワークスペースタブを押下し、右上のボタンを押下します。
    workspace_setting_capture

  5. 以下jsonをコピぺしてください。

    {
    	// for build
    	"latex-workshop.latex.outDir": "../out",
    	"latex-workshop.latex.autoClean.run": "onBuilt",
    	"latex-workshop.latex.autoBuild.run": "onSave",
        
    	// tex-workshopで紐づけられているPDF表示コマンドで表示するPDFビューア
    	"latex-workshop.view.pdf.viewer": "tab",
    
    	"latex-workshop.latex.recipes": [
    		{
    			"name": "latexmk (lualatex)🧋",
    			"tools": [
    				"lualatexmk"
    			]
    		},
    		{
    			"name": "latexmk 🔃",
    			"tools": [
    				"latexmk"
    			]
    		},
    		{
    			"name": "latexmk (latexmkrc)",
    			"tools": [
    				"latexmk_rconly"
    			]
    		},
    		{
    			"name": "pdflatex ➞ bibtex ➞ pdflatex × 2",
    			"tools": [
    				"pdflatex",
    				"bibtex",
    				"pdflatex",
    				"pdflatex"
    			]
    		},
    		{
    			"name": "Compile Rnw files",
    			"tools": [
    				"rnw2tex",
    				"latexmk"
    			]
    		},
    		{
    			"name": "Compile Jnw files",
    			"tools": [
    				"jnw2tex",
    				"latexmk"
    			]
    		},
    		{
    			"name": "tectonic",
    			"tools": [
    				"tectonic"
    			]
    		}
    	],
    
    	"latex-workshop.latex.tools": [
    		{
    			"name": "lualatexmk",
    			"command": "latexmk",
    			"args": [
    				"-synctex=1",
    				"-file-line-error",
    				"-interaction=nonstopmode",
    				"-lualatex",
    				"-outdir=%OUTDIR%",
    				"%DOC%"
    			],
    			"env": {}
    		},
    		{
    			"name": "latexmk",
    			"command": "latexmk",
    			"args": [
    				"-synctex=1",
    				"-interaction=nonstopmode",
    				"-file-line-error",
    				"-pdf",
    				"-outdir=%OUTDIR%",
    				"%DOC%"
    			],
    			"env": {}
    		},
    		{
    			"name": "latexmk_rconly",
    			"command": "latexmk",
    			"args": [
    				"%DOC%"
    			],
    			"env": {}
    		},
    		{
    			"name": "pdflatex",
    			"command": "pdflatex",
    			"args": [
    				"-synctex=1",
    				"-interaction=nonstopmode",
    				"-file-line-error",
    				"%DOC%"
    			],
    			"env": {}
    		},
    		{
    			"name": "bibtex",
    			"command": "bibtex",
    			"args": [
    				"%DOCFILE%"
    			],
    			"env": {}
    		},
    		{
    			"name": "rnw2tex",
    			"command": "Rscript",
    			"args": [
    				"-e",
    				"knitr::opts_knit$set(concordance = TRUE); knitr::knit('%DOCFILE_EXT%')"
    			],
    			"env": {}
    		},
    		{
    			"name": "jnw2tex",
    			"command": "julia",
    			"args": [
    				"-e",
    				"using Weave; weave(\"%DOC_EXT%\", doctype=\"tex\")"
    			],
    			"env": {}
    		},
    		{
    			"name": "jnw2texmintex",
    			"command": "julia",
    			"args": [
    				"-e",
    				"using Weave; weave(\"%DOC_EXT%\", doctype=\"texminted\")"
    			],
    			"env": {}
    		},
    		{
    			"name": "tectonic",
    			"command": "tectonic",
    			"args": [
    				"--synctex",
    				"--keep-logs",
    				"%DOC%.tex"
    			],
    			"env": {}
    		}
    	],
    }
    

ほぼデフォルトの設定ですが、この設定の意味はこんな感じです


  • "latex-workshop.latex.recipes"の"name"でTeXタブのBuild LaTeX projectにで出てくるボタン名を設定しています
    今回はほぼほぼデフォルトを引き継いていますが、「latexmk (lualatex)🧋」というコマンド名を上書きして、目立つようにタピオカドリンクの絵文字を表示させています。(タピオカの絵文字は環境によっては表示できないみたいで□になってしまっていますが、)

  • 実際に実行されるコマンドは"tools"に書かれている内容を実行します。
    今回は"lualatexmk"です。

  • コマンドの内容は"latex-workshop.latex.tools"に書かれています。
    lualatexmというtoolでは以下コマンドを実行されるようにしてあります。

    $ latexmk -synctex=1 -file-line-error -interaction=nonstopmode -lualatex -outdir=%OUTDIR% %DOC%
    

    ここで%で囲んである文字列はLaTeX Workshopで自動的に補完される文字列となっており、今回は%OUTDIR%の部分に"latex-workshop.latex.outDir": "../out"の内容が入り、%DOC%の文字列にエディタで開いているTeXファイルのフルパスが来るようになっています。
    この内容もデフォルト設定です。

  • "latex-workshop.latex.autoClean.run": "onBuilt"
    でビルドが成功したときにいらない中間ファイルを削除するようにしてあります。
    (.synctex.gzファイルはPDF⇄TeXファイルへのジャンプに必要であるため、そのまま出力ディレクトリに残してあります。)
    どの拡張子を削除するのかはデフォルト設定のファイルに記述があるので覗いてみてください。

  • "latex-workshop.latex.outDir": "../out"
    は生成ファイル群をどのディレクトリに配置するかを設定しています。
    名前は好きなように適宜変更してください。

  • 設定の詳細は
    https://github.com/James-Yu/LaTeX-Workshop/wiki
    を参照してみてください。

これでコマンド入力することなく、ボタン一つでビルドすることができるようになりました。
早速今作成したボタンでビルドしてみましょう。


使い方

  1. 先ほど作成したワークスペース内にTeXファイル用ディレクトリを作成する。(名前はなんでもいいです)

  2. 適当にlualatexに適したTeX文書を作成する。
    (文書の最初の部分を \documentclass{ltjsarticle}にし、ファイルをUTF-8で保存するだけで、他の部分は今まで通りのTeX文法だと思っています。間違っていましたらご指摘お願いします。)

  3. 保存する。

  4. cmd+option+bを押下するか、TeXタブの「Build LaTeX project」から、「Recipe: latexmk (lualatex)🧋」を押下する。
    build_lualatex
    ビルドされてファイルが生成されていることを確認できると思います。

  5. outディレクトリが自動で生成されるので、その中身にpdfとsynctexファイルが生成されていることを確認できます。

  6. TeXファイルを開いた状態でcmd+option+vを押下して、ビューアを開けます。
    viewer

  7. cmd+option+jでTeX→PDFの対応箇所を表示できます。
    tex_to_pdf
    赤い丸が対応箇所に表示されると思います。

  8. ビューアにカーソルを移動し、cmd+clickでTeXファイルにジャンプできます。
    pdf_to_tex
    TeXファイルの対応箇所が白い色の枠で囲われると思います。

  9. 文法ミスがあると、ターミナルタブの左のProblemsタブにエラー箇所が表示されます。
    ターミナルタブはShift+control+@で開きます。



使い方はこんな感じでした。あとは更新、保存してちゃんとPDFも反映していることを確認してみてください!

終わりに

今回はこの記事を読んでいただきありがとうございます。
実際学生の時、TeXを作成するのが苦痛で、使いづらいエディターで四苦八苦していたのを覚えています、、
ですので、この記事で少しでも苦痛を減らせることが出来れば幸いです。
間違っている部分、わかりずらい部分などありましたらコメントでご指摘お願いいたします。

参考

TeX Wiki
LaTeX Workshopドキュメント

Discussion