TeXShop がインターネットに公開されたのは 2000 年 7 月 23 日、Mac OS X 10.0 の発売より 8 か月も前のことでした。オレゴン大学の数学者 Richard Koch は、まだ正式には存在しない OS のために LaTeX のフロントエンドを書いていたわけですが、その賭けは当たります。26 年後のいまも、MacTeX が /Applications/TeX/ に置いていくエディタは TeXShop であり、無料で、GPLv2 で、macOS 専用のままです。このページでは、その歴史が残したもの——正体はシェルスクリプトのフォルダでしかないエンジンのポップアップ、ファイル単位で設定を固定する % !TEX 行、⌘クリックの SyncTeX——と、TeXShop が最適でなくなる境目を見ていきます。
TeXShop が DVI ではなく PDF を映す理由
macOS 自身が PDF で画面を描いているからです。1996 年末に Apple が NeXT を買収したとき、NeXTSTEP の Display PostScript は捨てられ、Mac の描画基盤 Quartz は PDF の上に組み直されました。Koch 自身の言い方を借りれば、これによって PDF は「システムの根幹となり、作るのも簡単、表示するのは造作もない」ものになったのです。DVI ビューアを一から書けば何か月もかかりますが、PDF ビューアはほとんどタダで手に入りました。しかも彼はちょうど、dvips を挟まずに .tex から直接 .pdf を出す pdfTeX(当時 0.14)を見つけていました。左にソース窓、隣にプレビュー窓、あいだに pdflatex——TeXShop の姿かたちは、Apple が「画面に矩形をどう描くか」を決めた結果として落ちてきたものです。
最初の公開版が出た 2000 年 7 月、Mac OS X はまだパブリックベータで、そこには Koch のせいではない派手な欠陥がありました。当時の Apple の PDF 描画は埋め込みフォントを読めず、Times で組んだ本文は美しく出るのに、数式のあるところだけが真っ白な空白になった のです。数学者がいちばん必要としていた部分でした。2000 年の開発者会議では、セッションが終わるたびに宿へ駆け戻って最新ベータを入れ、TeXShop を走らせては、やはり出ないフォントを確認する——という繰り返しになります。修正が入ったのは 2001 年 3 月、正式版のときでした。そして 2002 年、TeXShop 1.19 は Apple Design Award を受賞します。ただし部門名はオープンソース「移植」部門で、移植された元など存在しないこのプログラムに対する受賞は、Mac の TeX メーリングリストで首をかしげられました。のちに XeTeX の作者 Jonathan Kew が Windows や Linux でも同じ手軽さを実現しようとしたとき、彼が手本に挙げたのが、その「受賞歴のある Dick Koch の TeXShop」です——それが TeXworks になりました。
TeXShop の入手——MacTeX に同梱されている
TeXShop だけを探して落としてくる必要はありません。MacTeX が連れてきます。MacTeX-2026 は TeX Live 2026 を収め、ディストリビューション本体を /usr/local/texlive/2026/ に、GUI アプリ 5 本——TeXShop・TeX Live Utility・LaTeXiT・BibDesk・hintView——を /Applications/TeX/ に置きます。動作条件は macOS 11 Big Sur 以降で、Intel と Apple Silicon の両方でネイティブに動きます。以降の話の前提として大事なのは、TeXShop 自身は TeX を一行も含んでいない ことです。あくまでフロントエンドで、タイプセットのたびに /Library/TeX/texbin の pdflatex や lualatex、latexmk を起動しているだけです。TeXShop を捨ててもターミナルからの TeX は生き残りますが、/usr/local/texlive/ を捨てると TeXShop は一行も組めなくなります。
この二つは更新の時計が別だ、という点でよく人がつまずきます。パッケージの更新は同じフォルダにある TeX Live Utility が担当し、起動すると前回以降に CTAN で変わったものをまとめて提示します。一方 TeXShop 本体は、オレゴン大学にある Koch のページから個別に更新されます。現行の 5.57(2025 年 10 月)は macOS 10.13 High Sierra 以降で動き、Tahoe まで対応します。macOS 26 Tahoe 向けには TUG が別の追加インストーラを用意しており、5.57 を置き換えるのではなく TeXShop 5.58 を並べて入れます。5.58 は同じプログラムを Tahoe 上でビルドし直したもので、そうすることで Apple の Liquid Glass の外観が付くからです。/usr/local/texlive/ には複数年分の TeX Live を同居させられ、どれを有効にするかは TeX Live Utility の Configure メニューで切り替えます。
タイプセット(⌘T)とエンジンのポップアップ
⌘T はファイルを保存してから組みます。何が走るかを決めているのは、Typeset ボタンの隣にあるポップアップ(ツールバー上の名前は Program)です。ここに並ぶ項目はアプリに焼き込まれてはいません。TeXShop は ~/Library/TeXShop/Engines/ を読み、見つけた .engine ファイル 1 つにつきメニュー項目を 1 つ出しているだけで、その .engine の中身は、ファイル名を $1 で受け取る短いシェルスクリプトにすぎません。標準添付の LuaLaTeX.engine は全部で 4 行です。TeXShop についていちばん役に立つ事実がこれです——ターミナルで打てるコマンドは、そのままメニューに載せられます。フォルダへは TeXShop → Open ~/Library/TeXShop メニューで直行できます。
#!/bin/tcsh
set path= ($path /Library/TeX/texbin /usr/texbin /usr/local/bin)
lualatex -file-line-error -synctex=1 "$1"このスクリプトに付いている二つのオプションには理由があり、自作エンジンにも必ず入れるべきものです。-synctex=1 は後述の ⌘クリックを可能にする .synctex.gz を書き出させます。-file-line-error はエラーの出方を変え、TeX 伝統の l.42 ではなく ./main.tex:42: Undefined control sequence. の形にします——ファイル名と行番号が付けば、そこへ飛べます。TeXShop 組み込みの LaTeX コマンドも初めから pdflatex --file-line-error --synctex=1 なので既定は十分まともで、逆に 自作エンジンだけが黙って同期機能を失う ことになります。新規文書がどのエンジンで開くかは最後に選んだものが記憶され、エンジン名が指定されていないときにどの経路(pdfTeX か、TeX + DVI か、自作スクリプトか)を通すかは 環境設定 → Typeset → Default Command が決めます。
| ポップアップの項目 | 実際に走るもの | これを選ぶ場面 |
|---|---|---|
LaTeX | pdflatex --file-line-error --synctex=1(組み込み) | 既定。欧文中心の文書はこれで足りる |
XeLaTeX | xelatex -file-line-error -synctex=1 | システムのフォントを fontspec で使う、多言語混在 |
LuaLaTeX | lualatex -file-line-error -synctex=1 | システムのフォント+Lua。新規の日本語文書の第一候補 |
pdflatexmk | latexmk -pdf(pdfLaTeX 経由) | 文献・索引・相互参照がある文書。1 回で完成する |
lualatexmk / xelatexmk | latexmk -pdf(LuaLaTeX / XeLaTeX 経由) | 上と同じ自動再実行を Lua/Xe の経路で |
latexmk | latex → dvips → ps2pdf | EPS 図版や PSTricks を使う古い原稿 |
一度のタイプセットで終わらない理由——pdflatexmk と再実行の警告
コンソールの末尾に LaTeX Warning: Label(s) may have changed. Rerun to get cross-references right. が出ていたら、画面の PDF は 1 回分だけ古い、という意味です。LaTeX はラベル・ページ番号・目次を 1 回目の走行で .aux や .toc に書き、2 回目でそれを読みます。だから相互参照のある文書は本質的に 2 回、文献リストがあれば間に bibtex か biber を挟んで走らせる必要があります。⌘T を 3 回押しても解決はします。ただ、その回数を数えるのは人間の仕事ではありません。latexmk は補助ファイルを見比べて、必要な回数だけ——索引や文献の処理も含めて——自動で回してくれます。
TeXShop はそのエンジンを同梱しながら、初期状態では無効にしてあります。設定は一度きり、2 分の作業です。~/Library/TeXShop/Engines/Inactive/Latexmk/ を開き、pdflatexmk.engine——あるいは lualatexmk.engine、xelatexmk.engine——を 2 階層上の ~/Library/TeXShop/Engines/ へ移し、TeXShop を再起動すれば、Program のポップアップに名前が現れます。移す前に味見だけしたいなら近道があります。メニューの Typeset with Alternate Engine は 環境設定 → Engine → Alternate Engine に書かれたエンジンを走らせるもので、この欄は工場出荷時から pdflatexmk です。ビルドが妙な状態になったとき——古い .aux が残る、ラベルがいつまでも解決しない——は、Option キーを押しながらメニューを開くと Typeset が Trash Aux & Typeset(⌥⌘T)に変わり、中間ファイルを捨ててから組み直します。
% !TEX 行——root・TS-program・encoding
ファイルは自分の設定を自分で持ち歩けますし、共同執筆ならそうすべきです。文書の先頭 20 行以内に % !TEX 行を置くと TeXShop はそれを読みます。一方 LaTeX にとっては % 以降のただのコメントなので、何も起こりません。この非対称がすべての仕掛けです——ファイル自身が「私はこう組んでください」と書いて持ち歩く ため、共著者の Mac へ渡っても指定が失われません。実際に使うのは次の三つでほぼ足ります。
| 指示行 | 書き方の例 | 効果 |
|---|---|---|
% !TEX root | % !TEX root = ../thesis.tex | 親ファイルを指定。章ファイルの先頭に置けば、そこで ⌘T しても論文全体が組まれ、SyncTeX も帰り道を見つけられる |
% !TEX TS-program | % !TEX TS-program = lualatexmk | エンジンを指定。値は Engines/ にあるファイル名から .engine を除いたもの。% !TEX program も同義。ポップアップの選択より優先される |
% !TEX encoding | % !TEX encoding = UTF-8 Unicode | この文書の文字コードを指定し、環境設定の既定を上書きする |
% !TEX root = ../thesis.tex
% !TEX TS-program = lualatexmk
% !TEX encoding = UTF-8 Unicode
% This chapter has no preamble of its own.
% Pressing Typeset here builds ../thesis.tex instead.
\chapter{Method}
\label{chap:method}三つのうち一日を救ってくれるのは root です。学位論文を章ごとに分けて chapter3.tex で ⌘T を押すと、この行が無ければ TeX は \documentclass を持たないファイルを読み始め、最初の本文で ! LaTeX Error: Missing \begin{document}. に突き当たります。パスは その章ファイルから見た相対パス なので、chapters/ の下にある章は ../thesis.tex と書いて親を指します。そして同じ行が、PDF から ⌘クリックしたときに「どの章の何行目か」を SyncTeX に教えます。分割した瞬間に入れておくのが正解で、壊れてから探すものではありません。
文字コード——ファイルが化ける/そもそも開かない理由
TeXShop 4.00 以降、工場出荷時の既定は Unicode (UTF-8) です。新しく書くものはこれで正解で、設定場所は 環境設定 → Source → Encoding。テキストファイルは「自分が何で符号化されているか」を書いたヘッダを持たないので、TeXShop は推測できませんし、あえて推測もしません。ファイルが正しい UTF-8 でないとき——IsoLatin9 でウムラウトを書く西欧の共著者、研究室のアーカイブから出てきた古い原稿——復号に失敗し、TeXShop は フォールバック encoding の IsoLatin9(固定で変更不可)で開き直すかを尋ねてきます。その提案には乗ってしまい、\usepackage[...]{inputenc} の行を見て中身が本当は何なのかを確かめ、保存せずに閉じ、Open ダイアログで正しい encoding を指定して開き直す。そのうえで % !TEX encoding を書き足せば、次に開く人が同じ手間を踏むことはありません。
TeXShop の日本語対応は、まさにこの経路でやってきました。Mac OS 9 の時代、日本語フォントはバックスラッシュを円記号の形で描き、日本語キーボードの円キーはバックスラッシュのバイトを出していました。\section と ¥section は同じバイト列で、TeX は何も気づきません。ところが Unicode が二つの文字を分離し、キーボードが本物の円記号を出すようになると、日本の TeX 側は TeX の制御文字として円記号を受け付ける ことで対処します。取り残されたのが TeXShop でした。Koch は「日本のユーザーが困っているらしい」という話を 1 年ほど聞き続けたあと、銭谷誠司(Seiji Zenitani) から原因の説明とコードの両方が届いたと書いています。日本語ローカライズも彼の仕事です。さらに銭谷氏が紹介した 宍倉光広(Mitsuhiro Shishikura)——数学者です——は、円記号問題のより素直な修正を送ったついでに、プレビュー窓の拡大鏡とマクロエディタまで書いてきました。二人の名前は、寺田侑祐(Yusuke Terada)や園部功(Isao Sonobe)とともに、いまも TeXShop の配布ページに謝辞として並んでいます。
日本語と CJK——LuaLaTeX か、upLaTeX + dvipdfmx か
今日ゼロから始める文書なら、Program のポップアップで LuaLaTeX を選べば話は終わります。UTF-8 をそのまま読み、Mac に入っているフォントをそのまま呼べるので、luatexja パッケージや ltjsarticle のようなクラスを使えば追加の仕掛けなしに日本語が組めます。中国語・韓国語なら xeCJK や ctex と組み合わせた XeLaTeX が同じ位置にあります。逆に、ここで避けたい一本道が pdflatex です。pdfTeX は Unicode フォントへ手が届かない時代の設計で、CJK を通そうとすると旧来の CJK パッケージと変換済みフォントの世界に入り込むことになります——今から自分で選んで踏み込む道ではありません。
もう一本の道が、日本の出版が長く使ってきた upLaTeX + dvipdfmx で、研究室から受け継ぐテンプレートはたいていこちらを前提にしています。TeXShop にはそのためのチェックボックスがあり、環境設定 → Engine → pTeX support (for Japan) を入れると組み込みのコマンドが pTeX 系へ切り替わります。~/Library/TeXShop/Engines/Inactive/Latexmk/ には、この経路を latexmk で回す dvipdfmxmk.engine も入っています。自作するなら 1 行で済み、その 1 行が部品のつながりを教えてくれます——ptex2pdf は TeX Live 付属のスクリプトで、TeX の実行と DVI→PDF 変換をまとめて面倒みます。-l は plain ではなく LaTeX を、-u は Unicode 対応の upTeX を選び、-ot はエンジン本体へ渡す追加オプションです。
#!/bin/sh
# a hand-written engine: upLaTeX, then dvipdfmx, with SyncTeX enabled
ptex2pdf -u -l -ot "-synctex=1 -file-line-error" "$1"この選択は見た目より重く、あとから安く戻せません。upLaTeX 向けに書かれたクラス(jsarticle、ujarticle)は LuaLaTeX では通りませんし、逆も同じで、学科の論文テンプレートに入っているマクロの半分もそうです。最初に一度決めて、エンジンを名指ししたテンプレートを受け継いだのなら、締切の 1 週間前に移行しようとせずそれに従うこと。そして決めたことを他人の Mac の上でも生かすための行が、親ファイル先頭の % !TEX TS-program です。
SyncTeX——⌘クリックでソースと PDF を往復する
操作は ⌘クリック、それだけです。プレビュー窓で語を ⌘クリック すれば、それを生んだソースの行へ飛びます(逆検索)。ソース側で ⌘クリック すれば、対応する PDF の位置までスクロールします(前方検索)。TeXShop はバージョン 2.18 から SyncTeX に対応しており、標準エンジンはどれも -synctex=1 を渡すので、初期状態のまま効きます——タイプセットのたびに PDF の隣へ .synctex.gz が置かれるのがその証拠です。効かなくなったときに見るべきは三点。最後の編集のあと一度でも組んだか、自作エンジンが -synctex=1 を落としていないか、そして 環境設定 → Typeset → Sync Method が旧来の pdfsync ではなく SyncTeX 側になっているか。
この機能が効いてくるのは校正のときです。PDF を読んで崩れた一文を見つけ、ソースの 300 行を目で探す——という往復が丸ごと消え、その一文を ⌘クリックして打ち直すだけになります。ただし複数ファイル構成では、子ファイルすべてに % !TEX root が入っていて初めて正しく着地します。この行が無いと、TeXShop はそのページを生んだ親を知らないので、クリックはどこにも行きません。章から ⌘T が効くのと同じ行です——だからこそ、文書を分割した時点で入れておく価値があります。
TeXShop か、TeXworks・TeXstudio・VS Code か
TeXShop が勝っているのは、初学者が本当に必要としている一点——設定するものが何もない ことです。MacTeX を入れ、ファイルを開き、⌘T を押す。それで終わります。慣れたあとも快適で、Esc キーのコマンド補完、AppleScript も書けるマクロ、編集できるテーマがあり、エンジンフォルダのおかげで「知らないコマンドだから使えない」と言われることがありません。限界もはっきりしています。プロジェクトのサイドバーは無く、バージョン管理の統合も無く、打つそばから組み直す連続コンパイルも無く、そして Mac でないマシンでは動きません。
- Mac だけで、ひとりで書き、設定に時間をかけたくない:TeXShop が既定解。Program のポップアップと
% !TEX行でほとんど足ります。 - Windows や Linux でも同じ操作感が要る:TeXShop を手本にした TeXworks。ほぼそのまま移れます。
- 構造ブラウザ・記号パネル・文献管理を 1 つの窓に:TeXstudio か Texmaker。
- すでに Git や LSP、ターミナルのある環境で書いている:VS Code + LaTeX Workshop(土台の MacTeX はそのまま)。
- 何もインストールしない共著者がいる:Overleaf を共有場所にし、TeXShop は手元の最終調整用に残す。