MacでLaTeXの卒論環境を作る手順|MacTeXかBasicTeXか・VS Code+LaTeX Workshopの日本語設定

MacでLaTeXの卒論環境を作る手順|MacTeXかBasicTeXか・VS Code+LaTeX Workshopの日本語設定

卒論の LaTeX を Mac に入れようとすると、MacTeX の 6GB 超えと、BasicTeX で日本語が出ない問題の2か所で手が止まりやすい。

結論 最初に見るのは、大学・研究科のテンプレートが指定するエンジン(uplatex か lualatex か)。容量に余裕があれば brew install --cask mactex-no-gui、厳しければ BasicTeX(約140MB)に日本語の collection を足す。エディタは VS Code+LaTeX Workshop で、エンジンの設定は .latexmkrc に書き、VS Code 側は -pdf を付けない latexmk_rconly を呼ぶだけにする。

目次 / INDEX

先に大学・研究科のテンプレートのエンジンを確かめる

ネットの記事はほとんどが uplatex か lualatex のどちらかに決め打ちで書かれている。それを写してから大学のテンプレートを開くと、エンジンが合わずにエラーの山になることがある。順番は逆で、テンプレートが先だ。

大学ごとに本当に違う。北大 情報科学院 システム情報科学コースの修士論文スタイルは、LuaLaTeX+ltjsbook を推薦している。XeLaTeX+bxjsbook と upLaTeX+jsbook も使える(upLaTeX は将来的に非推薦)。

一方で「(upLaTeXじゃない) pLaTeX はサポート範囲外とした」と明記している。

埼玉大 工学部 情報システム工学科のテンプレート(GitHub 上の非公式の写し)は逆だ。pLaTeX か LuaLaTeX を前提にしていて「スタイルファイルの設定が古いためupLaTeXでは動きません」とある。北大は pLaTeX 不可、埼玉大は upLaTeX 不可で、同じ日本語の卒論でもこれだけ割れる。

テンプレートからエンジンを読む目安

テンプレートに .latexmkrc や README が付いていれば、それが正解。無ければ .tex の先頭を見る。

  • \documentclass[uplatex]{jsbook} のように uplatex オプションがある → uplatex+dvipdfmx
  • ltjsbook・ltjsarticle や \usepackage{luatexja} がある → lualatex
  • jarticle・jreport や、オプション無しの jsbook → platex の可能性。指導教員に確かめる

正式なテンプレートが学科内のネットワークにしか無く、「どこにあるかは指導教員に尋ねてください」という学科もある。環境を作る前に、まず聞く。

指定が無いときの uplatex と lualatex

uplatex+dvipdfmx lualatex(LuaTeX-ja)
PDF の作り方 DVI を経由して dvipdfmx で PDF に PDF を直接出す
主なクラス jsarticle / jsbook([uplatex] が必須)、jlreq ltjsarticle / ltjsbook、jlreq
速さ lualatex より軽い 北大の資料で「とにかく重い」
Overleaf 無料 コンパイラを LaTeX にし latexmkrc で指定 北大の資料で「タイムオーバーが続出」
位置づけ 北大の資料で、pLaTeX に代わり「主流となってきている」 北大の資料で「次期日本語 LaTeX の本命」

テンプレートが無くて自由に選べるなら、ビルドの軽さで uplatex+dvipdfmx が無難。PC が速くて、フォントの指定を .tex の中で完結させたいなら lualatex。

迷ったら jlreq(日本語組版の要件に沿った文書クラス)にしておくと、後でエンジンを変えてもクラスはそのまま使える。CTAN の説明に、LuaTeX-ja・pLaTeX・upLaTeX のそれぞれ用のファイルが入っているとある。

数式の記法そのものは、Obsidianで数式を書く方法 で使う $...$ の中身と同じ。ノートの数式と論文の組版で違うのは、エンジンとクラスを選ぶ必要があるかだけだ。

MacTeX と BasicTeX のどっち

机の上の MacBook。LaTeX の環境を入れる前の状態
MacTeX 2026 BasicTeX 2026 Overleaf(無料)
ダウンロード量(pkg) 約6.4GB 約140MB 手元に入れない
入っているもの TeX Live 全部+GUI アプリ+Ghostscript TeX Live の scheme-small の範囲だけ サーバー側に一式
日本語の卒論 そのまま通る jsarticle・jlreq・日本語フォントが無い。collection-langjapanese を足す 設定すれば通る。コンパイル10秒の上限あり
置き場所 /usr/local/texlive/2026 /usr/local/texlive/2026basic ブラウザ
向く人 容量に余裕がある。探す時間を使いたくない 容量が厳しい 指導教員に直接直してもらいたい

容量に余裕があるならフル版を勧める。足りないパッケージを探して足す時間が要らないからだ。卒論は締切のある作業なので、その時間を原稿に回したい。

BasicTeX の説明では、中身は TeX Live の「scheme-small」で決まる。パッケージ一覧をたどると、small 構成には jsclasses・jlreq・原ノ味フォント(haranoaji)が入っていない。日本語のクラスとフォントは足す前提で考える。

Homebrew の cask は3つ。同時には入れない

cask 中身(Homebrew の説明) 落とすファイル
mactex Full TeX Live distribution with GUI applications mactex-20260324.pkg(6.4G)
mactex-no-gui Full TeX Live distribution without GUI applications 同じ pkg(6.4G)。GUI を外して入れる
basictex Compact TeX distribution as alternative to the full TeX Live / MacTeX mactex-basictex-20260301.pkg(134M)

3つは互いに競合する設定になっていて、Homebrew では同時に入れられない。最初に1つに決める。

mactex-no-gui でも落とすのは 6.4GB の同じ pkg で、減るのはディスクに展開される GUI アプリの分だけ。VS Code で書くなら GUI は要らないので、入れるならこれでいい。

インストールと PATH

Homebrew が入っていない Mac なら、先に 理系大学生のMac初期設定と開発環境 の Homebrew の節を済ませておく。あとは1行だ。

sh
brew install --cask mactex-no-gui

mactex と mactex-no-gui は Ghostscript を Homebrew 側の formula で入れる設定になっている。途中で ghostscript も一緒に入る。

PATH を通す

入れた直後の端末で uplatex: command not found と出るのは、PATH(コマンドを探す場所の一覧)が未更新だから。Homebrew の案内どおり、端末を開き直すか次を打つ。

sh
eval "$(/usr/libexec/path_helper)"

MacTeX は /Library/TeX/texbin というリンクを作り、その先が TeX Live の実行ファイルの置き場所になっている。TeX の場所を聞かれたら /Library/TeX/texbin と覚えておけばいい。/usr/local/texlive/2021/bin/... のような年入りの実パスを .zshrc に直書きする記事もあるが、年版を入れ替えると壊れる。

BasicTeX なら tlmgr で日本語を足す

tlmgr(TeX Live のパッケージ管理コマンド)で、日本語の collection を足す。BasicTeX は /usr/local/texlive/2026basic に入り、書き込みに管理者権限が要るので、次のコマンドは sudo 付きで打つ。

sh
brew install --cask basictex
eval "$(/usr/libexec/path_helper)"
sudo tlmgr update --self
sudo tlmgr install collection-langjapanese
which latexmk || sudo tlmgr install latexmk

update --self を最初に打つのは、tlmgr 自身に更新があると update --all がエラーで止まる、と説明書にあるから。collection-langjapanese には jsclasses・jlreq・bxjscls・haranoaji・japanese-otf・pbibtex-base などがまとまって入る。索引の upmendex が見つからないと言われたら、sudo tlmgr install upmendex で足す。

siunitx や physics、cleveref のような定番も small 構成には無い。使うなら sudo tlmgr install siunitx physics cleveref で個別に足す。

提出の直前に tlmgr update --all を打たない。動いている環境を締切前に変えると、原因の分からないエラーを抱えることになる。新しい年版の TeX Live も、卒論を出し終えてからでいい。

.latexmkrc にエンジンを書く

黒板に書かれた数式

latexmk は、uplatex→dvipdfmx、参考文献があれば bibtex も含めて、必要な回数だけ自動で回して PDF まで作るツール。LaTeX Workshop も既定でこれを呼ぶ。どのエンジンで回すかは RC ファイル .latexmkrc に書く。

置き場所は main.tex(親ファイル)と同じフォルダがいい。ホームに置くと全プロジェクトに効いて、英語の授業レポートまで uplatex で回ってしまう。フォルダ直下ならテンプレートと一緒に Git で持ち運べるし、別の Mac でも同じに組める。

latexmk の説明書によると、RC ファイルは Perl のコマンドの並びで、コメントは # で書く。% でコメントを書いている記事があるが、Perl では通らないので写すときに注意。

uplatex+dvipdfmx 用

TeX Wiki の例から、Mac で要る行だけ抜き出したもの。

perl
$latex = 'uplatex %O -synctex=1 -interaction=nonstopmode -file-line-error %S';
$bibtex = 'upbibtex %O %B';
$biber = 'biber %O --bblencoding=utf8 -u -U --output_safechars %B';
$makeindex = 'upmendex %O -o %D %S';
$dvipdf = 'dvipdfmx %O -o %D %S';
$pdf_mode = 3;

$pdf_mode = 3 は「DVI を作ってから $dvipdf のコマンドで PDF にする」という意味だと説明書にある。-synctex=1 は SyncTeX(PDF と原稿の行を行き来する仕組み)に要る。-file-line-error はエラーを VS Code の問題パネルに出すため、-interaction=nonstopmode はエラーで入力待ちにならないために付ける。

参考文献のコマンドは、Overleaf の日本語ページと同じ upbibtex にした(日本語の collection を足した BasicTeX でも使える)。TeX Wiki の例は bibtexu を使っている。

テンプレートの README が指定していればそれに従う。biblatex を使うなら $biber の行が効く。

lualatex 用

latexmk 公式の例ファイル lualatex_latexmkrc の中身は、次のうち最初の2行だけ。3行目で SyncTeX とエラー表示の引数を足した。

perl
$pdf_mode = 4;
$postscript_mode = $dvi_mode = 0;
$lualatex = 'lualatex %O -synctex=1 -interaction=nonstopmode -file-line-error %S';

$pdf_mode = 4 が「lualatex で PDF を作る」の意味。uplatex 用と違って $dvipdf の行は要らない。

端末だけで試す

VS Code を開く前に、端末で1回通しておくと切り分けが楽になる。.latexmkrc を置いたフォルダで latexmk sample.tex と打つだけでいい。

中身は、uplatex 用なら次の5行で足りる。lualatex なら1行目を \documentclass{ltjsarticle} にする。

latex
\documentclass[uplatex]{jsarticle}
egin{document}
日本語の卒論のテスト。
\section{はじめに}
\end{document}
```RC を使わずに試すなら、TeX Wiki の1行版を zsh で通るように引用符を入れ替えた次の形になる。

```sh
# uplatex(RC なし)
latexmk -pdfdvi -latex=uplatex -synctex=1 -e '$dvipdf="dvipdfmx %O %S";$bibtex="upbibtex";' sample.tex
# lualatex
latexmk -lualatex sample.tex

VS Code と LaTeX Workshop

VS Code で LaTeX の原稿を書く画面

拡張は LaTeX Workshop(拡張ID James-Yu.latex-workshop、James Yu 作)。保存時に PDF まで自動ビルド、SyncTeX の双方向ジャンプ、タブ内の PDF 表示が入っている。最新版は VS Code 1.114.0(2026年4月)以降が必要。

前提は「互換性のある LaTeX ディストリビューションが PATH にあること」だけと Install の wiki にある。拡張の入れ方と settings.json の開き方は VS Codeのおすすめ拡張機能と設定 にまとめてある。

既定レシピの -pdf が .latexmkrc を打ち消す

LaTeX Workshop は「レシピ」(ツールを順に呼ぶ手順)の先頭を既定で使う。その既定の先頭レシピ latexmk は、次の引数で latexmk を呼ぶ。

json
"args": [ "-synctex=1", "-interaction=nonstopmode", "-file-line-error", "-pdf", "-outdir=%OUTDIR%", "%DOC%" ]

-pdf は latexmk の説明書で「pdflatex で PDF を作る」オプション。そして latexmk は RC ファイルを起動時に読み、コマンドラインのオプションはその後に書かれた順で適用する、と説明書にある。

つまり .latexmkrc に $pdf_mode = 3 と書いても、既定レシピのままだと -pdf が後から効いて pdflatex で走る組み合わせになる。uplatex 用の RC を置いたのに jsarticle のエラーで止まるなら、この形が疑わしい。

settings.json のレシピ

回避策は、-pdf を付けない既定ツール latexmk_rconly を呼ぶレシピを先頭に置くこと。これは latexmk %DOC% を呼ぶだけのツールで、エンジンの指定は全部 .latexmkrc に任せる形になる。

json
{
  "latex-workshop.latex.recipes": [
    { "name": "latexmk(.latexmkrcの設定で)", "tools": [ "latexmk_rconly" ] },
    { "name": "lualatexmk", "tools": [ "lualatexmk" ] }
  ],
  "latex-workshop.latex.autoBuild.run": "onSave",
  "latex-workshop.view.pdf.viewer": "tab"
}

latexmk_rconly と lualatexmk はどちらも既定の tools に入っているので、tools 側は書かなくていい。lualatex なら2番目の lualatexmk(-lualatex を付けて呼ぶ)を先頭にしても同じことができる。

エンジンは .latexmkrc、VS Code は呼ぶだけ。この分担なら、端末で latexmk と打っても VS Code で保存しても同じ結果になる。Overleaf に持っていくときも、RC を1つ直すだけで済む。

章ごとにファイルを分けているなら、子ファイルの先頭に % !TEX root = main.tex と書けば、どれを開いていても親からビルドされる。ファイルごとにレシピを変えたいなら %!LW recipe=レシピ名 を先頭に。

保存時ビルドと SyncTeX

latex-workshop.latex.autoBuild.run の既定は "onFileChange"。wiki の FAQ は、自動ビルドが動かないときや2回走るときに "onSave" を勧めている。

最初から onSave にしておく。設定を変えたら VS Code のリロードが要る。

lualatex はビルドが遅いので、東大のスタートアップゼミの資料は自動ビルドを "never" にしている。待たされるのが気になるなら、cmd+option+b で手動ビルドする運用に寄せる。

SyncTeX は、原稿の行から PDF の位置へ、またその逆へ飛ぶ仕組み。順方向は cmd+option+j、逆方向はタブ内の PDF を ctrl+click(設定でダブルクリックにも変えられる)。「この図はどこで書いたっけ」を探す時間が消える。

PDF は VS Code のタブで見るのが既定で、Skim(Mac の PDF ビューア)も外部ビューアにできる。ただし wiki に外部ビューアは正式サポート外とあり、SyncTeX は2025年半ばの時点で動かないと注記されている。タブ内で見るのが一番手間がない。

よく詰まる点

症状 よくある原因 対処
端末で uplatex: command not found PATH が未反映 端末を開き直すか eval "$(/usr/libexec/path_helper)"
VS Code で spawn latexmk ENOENT VS Code が TeX の PATH を知らない which latexmk で確かめる→env で PATH を絶対パスで
jsarticle.cls not found や、フォーマットが違うというエラーで止まる 既定レシピの -pdf で pdflatex が走る/BasicTeX に jsclasses が無い/[uplatex] 忘れ latexmk_rconly を先頭に/collection-langjapanese/\documentclass[uplatex]{jsarticle}
日本語の参考文献が化ける 英語用の bibtex で回している $bibtex を upbibtex に。biblatex なら biber
uplatex で図が入らない・サイズが変 graphicx のドライバ指定漏れ \usepackage[dvipdfmx]{graphicx}
ビルドがループする TikZ などで再ビルドが止まらない RC の $latex の行の -interaction=nonstopmode を -halt-on-error に
エラー箇所に飛べない -file-line-error が無い RC の $latex の行に -file-line-error を付ける
フォルダ名が「卒論」や ~ を含むと不安定 非ASCII のパス tools の args の %DOC% を %DOCFILE% に(tools の書き方は下の ENOENT の節)。フォルダ名は英数字にしておくのが早い

spawn latexmk ENOENT

VS Code が latexmk という実行ファイルを見つけられない、という意味のエラー。wiki には「VS Code が TeX の実行ファイルを見つけられないなら、システム側の設定が壊れている」とある。インストール前から開きっぱなしだった VS Code は、新しい PATH を読んでいない。

まず端末で which latexmk を打つ。空なら BasicTeX で latexmk が入っていないので sudo tlmgr install latexmk。

パスが通っているのに出るときは、LaTeX Workshop のツール定義の env で PATH を上書きできる。ただし ~ や $PATH は展開されないと wiki にあるので、絶対パスで全部書く。

Intel の Mac なら /opt/homebrew/bin の代わりに /usr/local/bin になる。tools を書くと既定の tools の代わりになるので、使う lualatexmk も一緒に書いておく。

json
"latex-workshop.latex.tools": [
  {
    "name": "latexmk_rconly",
    "command": "latexmk",
    "args": [ "%DOC%" ],
    "env": { "PATH": "/Library/TeX/texbin:/opt/homebrew/bin:/usr/bin:/bin" }
  },
  {
    "name": "lualatexmk",
    "command": "latexmk",
    "args": [ "-synctex=1", "-interaction=nonstopmode", "-file-line-error", "-lualatex", "-outdir=%OUTDIR%", "%DOC%" ],
    "env": { "PATH": "/Library/TeX/texbin:/opt/homebrew/bin:/usr/bin:/bin" }
  }
]

Overleaf と手元の Mac の使い分け

Overleaf(ブラウザで動く LaTeX 環境)は入れる手間がゼロで、指導教員と共有して直してもらえるのが強い。ただ無料プランにはコンパイル10秒の上限がある(有料は240秒)。共同編集者は1プロジェクト1人、履歴は直近24時間。

北大の資料は「Overleaf 無料版で使う場合は LuaTeX-ja はタイムオーバーが続出し使い物にならない」と書いている。図が多い卒論や lualatex は、無料の10秒に収まりにくいと思っておく。

日本語の設定は、LuaLaTeX ならプロジェクトのコンパイラを LuaLaTeX にするだけ。(u)pLaTeX ならコンパイラを LaTeX にして、手元の .latexmkrc を、先頭のドットを取った latexmkrc の名前で上げる。$latex の1行だけでは足りず、$dvipdf と $pdf_mode = 3 も要る。

現実的には、本文は手元の Mac で組み、見てもらうときだけ Overleaf に上げる形。どちらでも同じ .tex が通るように、エンジンとクラスをテンプレートに合わせておくのが条件になる。

書き始める前にバックアップと Git

環境ができたら、原稿を消さない仕組みを先に作る。Time Machine と版履歴、TeX 用の .gitignore は 卒論のバックアップ方法 にまとめてある。

.tex はただのテキストなので Git と相性がいい。中間ファイル(.aux .log .synctex.gz など)は Git に入れないよう、.gitignore に書いておく。Git が初めてなら git/GitHub入門 の最初の設定から。

参考文献は Zotero から BibTeX の形で書き出せる。Word 向けの記事だが、CiNii の日本語論文を集める流れは ZoteroでCiNiiの論文を取り込む記事 に書いた。

まずは端末で latexmk sample.tex が通るところまで。そこまで行けば、VS Code 側はレシピを1つ置くだけだ。

出典(2026年11月8日時点)

よくある質問

MacTeXとBasicTeXはどっちを入れればいい?

容量に余裕があるならMacTeX(Homebrewなら mactex-no-gui)。6.4GBあるが、足りないパッケージを探す時間がなくなる。容量が厳しいならBasicTeX(約140MB)を入れて、tlmgrで collection-langjapanese を足す。BasicTeXのままだとjsarticleや日本語フォントが無く、日本語の卒論は通らない。

uplatexとlualatexはどっちを使う?

大学・研究科のテンプレートが指定するエンジンに従う。北大のあるコースはpLaTeXを対象外にし、埼玉大のある学科のテンプレートはupLaTeXで動かないなど、大学ごとに違う。指定が無ければ、速さと情報量ならuplatex+dvipdfmx、新しめの構成ならlualatex。迷ったら両方で使えるクラスjlreqにしておく。

.latexmkrcにuplatexを書いたのにVS Codeでエラーになるのはなぜ?

LaTeX Workshopの既定レシピ「latexmk」は -pdf を付けてlatexmkを呼ぶ。latexmkの説明書では、RCファイルを読んだ後にコマンドラインのオプションを適用するので、.latexmkrcのpdf_modeより -pdf(pdflatex)が後から効く組み合わせになると読める。-pdf を付けない既定ツール latexmk_rconly を使うレシピを先頭に置く。

VS Codeで spawn latexmk ENOENT と出る

VS CodeがTeXのコマンドの場所(PATH)を知らない状態。インストール前から開いていたVS Codeは新しいPATHを読んでいないので、一度終了して開き直し、端末で which latexmk を確かめる。空ならBasicTeXでは sudo tlmgr install latexmk。それでも出るなら、LaTeX Workshopのツール設定のenvで、PATHを /Library/TeX/texbin を含む絶対パスで書く。

次に読むなら

卒論のバックアップ方法|MacのTime Machineとクラウドの版の履歴で守る手順と、消えた時に見る順番【2026年11月版】環境ができたら、書きかけの卒論を消さない仕組みを先に作る読む →