TeXworks

「XeTeX を書いた人が、次に機能のほとんど無いエディタを書いた」——TeXworks の出発点はそこです。Unicode と OS のフォントを TeX に持ち込んだジョナサン・キューが次に取り組んだのは、LaTeX を始めた人がつまずく場所の数でした。彼が TUG の発表につけた題は「TeXworks: lowering the barrier to entry(入口の敷居を下げる)」。だから TeXworks には、プロジェクト管理も、ビルドスクリプトも、脇に並ぶファイル一覧もありません。窓は一つ、ボタンは一つ、選ぶものはエンジンだけです。このページでは、どのディストリビューションが本当に TeXworks を同梱しているのか(答えは OS によって違い、間違えている解説が多い)、唯一の設定画面である タイプセットツール をどう書き換えるか、そして % !TeX root の一行がプロジェクト管理をどう代行するかを見ていきます。

TeXworks を書いたのは XeTeX の作者

TeXworks の作者は ジョナサン・キュー、XeTeX を書いた人物です。手本にしたのは、マックで長く定番だった リチャード・コッホの TeXShop。TeXShop の「一枚の窓の左右にソースと PDF が並ぶ」という素っ気ない作りが初学者にはよく効くと見て、その感触を Windows と Linux にも持ち込んだのが TeXworks です。当時の Windows 向け統合環境は、初めて LaTeX に触れる人にはボタンが多すぎました。キューの答えは機能を足すことではなく、決めなければならないことを減らすことでした。

その「少なさ」は具体的です。TeXworks を開くと、あるのはソースの編集面、上のツールバーに並んだ エンジンのドロップダウンと緑の三角ボタン、そして PDF を映すもう一枚の窓だけ。ファイルツリーも、章の一覧も、ビルド設定ファイルもありません。GUI は Qt で書かれているので Windows・macOS・Linux で同じ見た目になり、ライセンスは GPL v2、文字コードは既定で UTF-8 です。手元の道具立ても最小限で、命令の補完、入力支援、スペルチェックまで。それでも足りなければ Lua と Python のスクリプトプラグイン を有効にして独自の処理を足せます(ビルド時のオプションで、Lua は既定で有効、Python は既定で無効)。特筆すべきは版番号で、最初の公開から十数年たったいまも 0.6 系 のまま、毎年 2 月ごろに小さな更新が出ています。1.0 を目指して機能を積み増す、という道をそもそも選んでいないわけです。

TeXworks はどのディストリビューションに同梱されているか

Windows なら、たいていすでに入っています。MiKTeX と TeX Live の Windows 版インストーラはどちらも TeXworks を入れるからです。逆に macOS と Linux には付いてきません。 TeX Live が同梱するのは Windows 用の実行ファイルだけ、というのは推測ではなく、TeX Live 自身のパッケージ台帳 texlive.tlpdb にそう書いてあります。texworks パッケージの説明文が「TeX Live includes executables and support files only for Windows.(TeX Live が収めるのは Windows 用の実行ファイルと補助ファイルのみ)」、それをまとめる collection-texworks の見出しも「TL includes only the Windows binary」です。

terminal
# from texlive.tlpdb, the package database TeX Live installs from
name texworks
category TLCore
shortdesc friendly cross-platform front end
longdesc TeX Live includes executables and support files only for Windows.
postaction shortcut type=menu name="TeXworks editor" \
           cmd=TEXDIR/bin/windows/texworks.exe

ここが混乱の元です。TeX Live には texmf-dist/doc/texworks/README という短い説明も同梱されていて、そちらには「TeX Live は Windows 版のバイナリを、MacTeX は macOS 版のバイナリを収めている」と書かれています。ところがこの README は 2009 年に書かれたもので、インストーラが実際に読むのは台帳のほうです。いまの MacTeX が用意する GUI エディタは TeXShop で、TeXworks ではありません。Linux では TeX Live 本体とは切り離され、texworks という名前でディストリビューションのパッケージとして配られます。つまり「TeXworks は TeX Live に入っている」という一文は、Windows でだけ正しいのです。

入手経路対象 OS入るもの
MiKTeXWindows既定のエディタとして同梱される
TeX LiveWindowstexworks.exe とスタートメニューの項目、.tex の関連付けまで作られる
MacTeXmacOS標準のエディタは TeXShop。TeXworks は別途入れる
apt / dnf / pacmanLinuxTeX Live とは別の texworks パッケージとして入れる

タイプセットのドロップダウンと Processing tools

TeXworks の「ビルド設定」は、ツールバー左のドロップダウン一つに集約されています。使うエンジン(pdfLaTeXXeLaTeXLuaLaTeX・ConTeXt など)を選び、隣の緑の三角ボタンか Ctrl/Cmd-T を押すと、いま開いている文書がコンパイルされて PDF プレビューが開きます。BibTeX・MakeIndex といった補助ツールも最初から登録済みなので、標準的な文書なら設定を一度も開かずに PDF まで到達できます。

この一覧は自分で書き換えられます。Edit → Preferences → Typesetting タブを開くと、下半分が Processing tools の一覧で、+ で追加、- で削除、Edit... で編集します。一つのツールが持つのは四つだけ——ドロップダウンに出る Name、起動する実行ファイル名の ProgramArguments、そして View PDF after running のチェックです。ここで最も多い事故は Arguments の書き方で、引数は 1 行に 1 つずつ 書きます。シェルのコマンドラインではないので、-interaction=nonstopmode %.tex のようにまとめて 1 行に打つと、その全体が一つの引数として渡され、エンジンは意味不明なファイル名を探しに行きます。

Arguments には TeXworks の変数が使えます。よく知られているのは処理対象を指す $fullname ですが、実際には五つあり、拡張子だけ・ディレクトリだけを取り出せるので、DVI を経由する処理や補助ツールの呼び出しを組むときに効きます。変数は ツールを起動する直前に展開 されます。

変数展開されるもの
$fullname処理対象のファイル名(拡張子つき。例 main.tex
$basename拡張子を除いたファイル名(例 main
$suffix拡張子だけ(例 tex
$directory文書のあるディレクトリの絶対パス
$synctexoptionそのツールが SyncTeX に対応していれば -synctex=1、しなければ空

latexmk を一つのツールとして登録する

TeXworks に足りないのは「何回まわすか」を決める頭脳です。相互参照が ?? のまま残る、\tableofcontents が一版遅れる——といった症状は、結局のところコンパイル回数の問題で、TeXworks は自分では数えません。そこで定石は、回数の判断を丸ごと latexmk に預けて、TeXworks 側はそれを呼ぶツールを一つ持つだけにすることです。Program に latexmk、Arguments を 1 行ずつ次のように入れ、View PDF after running にチェックを入れます。

terminal
-e
$pdflatex=q/pdflatex $synctexoption %O %S/
-pdf
$fullname

日本語では upLaTeX で組んで dvipdfmx で PDF にする 経路が長く定番です。TeX Live 同梱の TeXworks には日本語向けのツールが最初から入っていますが、自分で作るなら二段の処理をまとめてくれる ptex2pdf が最短です。Program を ptex2pdf、Arguments を次のようにします(-l が LaTeX 形式、-u が upLaTeX、-ot が TeX へ渡す追加オプションの指定)。なお latexmk の細かい設定そのものは別ページの主題なので、ここでは呼び出し方だけを扱います。

terminal
-l
-u
-ot
-kanji=utf8 -no-guess-input-enc $synctexoption
$fullname

ふだん使うものは、Typesetting タブの上部にある 既定のタイプセットエンジン に指定しておきます。以後、新しく開いた文書はそのツールで処理されます。文書ごとに別のエンジンを使いたいときは、次の節のマジックコメントが上書きします。

% !TeX root — プロジェクト管理の代わりになる一行

章ごとにファイルを分け、親から \input\include で読み込む構成にした瞬間、TeXworks には「プロジェクト」という受け皿がないことが問題になります。chapter1.tex を開いたままタイプセットすると、そのファイルには \documentclass\begin{document} もないので当然コンパイルは失敗します。他のエディタならプロジェクトを作ってマスター文書を登録するところですが、TeXworks の答えは ファイルの冒頭に一行書く ことでした。

latex
% !TeX root = main.tex

\chapter{Introduction}
The body of the chapter goes here.

TeX から見れば % 以降のただのコメントですが、TeXworks はファイル冒頭の何行かを読んで動作を変えます。この一行が入っていれば、子ファイルを編集中にタイプセットしても TeXworks は 代わりに親(ルート)ファイルをコンパイル します。パスは子ファイルから見た相対パスで書けます。うまいのは、この情報が 設定ではなくファイル自身に載っている ことです。プロジェクトファイルは環境ごとに壊れますが、コメント行はリポジトリに入り、共著者の環境でもそのまま働きます。もともと TeXShop 由来の書き方で、TeXworks 以外のエディタも同じ行を読みます。

マジックコメントは他にもあります。% !TeX program = ... はその文書を処理するエンジンを固定します。ここで指定するのは実行ファイル名ではなく、Preferences に登録したツールの Name である点に注意してください——pdflatex ではなく、一覧に見えているとおりの表示名です。古い綴りの % !TeX TS-program = ... も同じ意味で通ります。% !TeX encoding = ... はファイルの文字コードを宣言しますが、TeXworks の既定が UTF-8 なので、UTF-8 で書いているなら通常は不要です。日本語文書では % !TeX program を先頭に置いておくと、ドロップダウンの切り替えを忘れても正しいエンジンで処理されます。

latex
% !TeX program = upLaTeX (ptex2pdf)
% !TeX encoding = UTF-8
\documentclass{ujarticle}
\begin{document}
\input{chapter1}
\end{document}

TeXworks と TeXstudio の違い、乗り換えどき

違いは機能の多寡ではなく 設計の目標 です。TeXworks は迷う場所を減らすことを最適化したエディタで、TeXstudio や Texmaker、Kile は逆に、必要なものを全部手元に出すことを最適化しています。だから「TeXworks は機能が少ない」という言い方は評価ではなく仕様の説明で、比較の軸は「いま自分が何に時間を取られているか」に置くのが正しいです。次の症状が二つ以上そろったら、乗り換えを考える頃合いです。

  • ファイル数が増え、% !TeX root を書き忘れた子ファイルで毎回つまずくようになった。
  • 文献データベースを扱っていて、\cite のキーを別の窓で探す時間が長くなった。
  • ビルドの列が pdfLaTeX 一本では済まなくなり、Processing tools がツールだらけになった。
  • 同じ原稿を複数のエンジン(pdfLaTeX と LuaLaTeX など)で切り替えて出す必要が出てきた。

ログと中間ファイルの読み方

画面に余計なものが無いぶん、TeXworks はログを読む習慣をつけるのに向いています。タイプセット後の出力パネルには、PDF ができたかどうかだけでなく、未解決の参照、見つからないパッケージ、読み込みに失敗した画像がそのまま出ます。! Missing $ inserted! Undefined control sequence といった行が最初のエラーで、その下に続く行番号が本当の手がかりです。TeXworks はエラーで止まる代わりに読ませる設計なので、ここを読み飛ばすと得られるものが半分になります。

  • 参照が ?? のままなら、同じツールでもう一度タイプセットして .aux を更新します(latexmk ツールならこれを自動でやります)。
  • 目次や参考文献を大きく組み替えた後だけ、.aux.toc を消して作り直します。ふだんは残しておくほうが速いです。
  • 画像が出ないときは、ログに出たファイル名と実際のパスを見比べます。空白や日本語を含む名前は避けます。
  • Processing tools が増えすぎたら、ビルドの知識を .latexmkrc に移し、TeXworks 側は latexmk ツール一つに戻します。

SyncTeX の設定(前方検索・後方検索)

TeXworks には Qt と Poppler で作られた PDF プレビューが内蔵 されているので、外部ビューアを立ち上げずに同じ窓で編集と確認を往復できます。ソースの位置から PDF の対応箇所へ飛ぶ 前方検索 はソース上で Ctrl/Cmd-クリック、PDF から該当行へ戻る 後方検索(逆検索) はプレビュー上で Ctrl/Cmd-クリック です。設定は要りません——対応表となる .synctex.gz を出させるオプションが、標準ツールの Arguments に $synctexoption として最初から入っているからです。自作ツールで同期が効かないときは、まずこの変数を書き忘れていないか確かめてください。SyncTeX の仕組みそのものは別ページで扱います。