p/upLaTeX から LuaLaTeX へ移行すべき理由と方法

概要

現在 pLaTeX / upLaTeX をお使いのかたに向けて,LuaLaTeX に移行すべき理由と,そのときに原稿において気をつけなければならないことをお伝えします。

これから LaTeX を使いはじめようと思われるかたは,最初から LuaLaTeX を選ばれることをおすすめします(理由は「LaTeX エンジンとして LuaLaTeX を勧める理由」にて述べています)。また,LuaLaTeX に移行する場合でも,ローカルにインストールして使う方法とクラウド上で使う方法があります(導入方法は「LaTeX (TeX) へのご案内」にて述べています1)。ここでは,それらの利点・欠点や導入については深入りしません。

この記事は,あえて「あまり中身を理解しなくても真似をすれば済むように」書いてあります2。それは,日本語での LuaLaTeX 利用を増やすことを第一の目的にしているからです。現在のところ,pLaTeX / upLaTeX を前提としている(LuaLaTeX では使えない)解説記事・クラスファイル・パッケージは多く見られます。LuaLaTeX が主流となれば,それらの対応も自ずと進んでゆくことでしょう。そのために,pLaTeX / upLaTeX の現在の問題点を示すことと,「とりあえずこの通りにすれば移行できる」マニュアルを示すことが肝要だと考えています。詳しい情報は詳細に載せることとします

背景

次のようなことが懸念されています。

  • pLaTeX / upLaTeX が動かなくなる。
  • pLaTeX / upLaTeX が単独では動いても,様々なパッケージが使えなくなる。

2022年現在,日本で多く使われている LaTeX は pLaTeX / upLaTeX でしょう。私も2022年06月までは upLaTeX を使っていました。しかし,最近の LaTeX 本体の開発方針に伴い,pLaTeX / upLaTeX が動かなくなる・今まで使えたパッケージが動かなくなるといった問題が起きやすい状況に追い込まれています32022年08月現在でも,この危険は続いているようです45)。

これを踏まえて,私は upLaTeX から LuaLaTeX-ja へ切り替えました。あなたが教員であれば,授業準備の止まる長期休暇のはじめに行うのがよいでしょう。トラブルがあってもどうにかなり,また遊んで慣れる時間があります。

ほかにも,LuaLeTeX は(uplatex が苦手であった)フォントの設定が易しい,内部に Lua のコードを書いて・読み込ませて処理させられるといった長所があります。また,LuaLaTeX は欧米(すなわち LaTeX の本体)で主として利用されている pdfTeX の後継として考えられています。すなわち,将来の展望も明るいのです。

前提

  • TeX Live により LaTeX を導入している。
  • 過去の文書のタイプセットがそのままでは通らないことはやむを得ない。そのときは pLaTeX / upLaTeX を用いてタイプセットする。
    • この記事では,新しく文書をつくるとき,これまで書いていたもののどこを直せばよいのか,ということを中心に述べます。過去の文書をどう置換するか,ということではありません。
    • もちろん,これからも使うであろう pLaTeX / upLaTeX で書かれた文書を LuaLaTeX に書き直す参考にはしていただけるでしょう。

内容

あなたがどのような機能を使って文書を書いてきたのかをわかっていらっしゃるのなら,怖がることは何もありません。LuaLaTeX 用のプリアンブルを初めから作ってみることが一番です。元のソースを直しながら移行しようと思うよりも,「同じことができるようにしよう」と思うほうが健全です。なすべきことは執筆なのですから。

あなたがこれまで原稿を書くことで手いっぱいであったのなら,この機会にプリアンブルを見直してみるのもよいでしょう。パッケージのマニュアルに目を通してみたり,コメントアウトして何が起こるかを考えたりしてみればよいのです。それは LaTeX への理解を深めることにもつながります。

しかし,よくわからない・負担が大きくそれならこのままでよいという気持ちになってしまう,といったこともあるでしょう。たやすく移行できるならしてみてもよいけれど……ということでしたら,お役に立てるかもしれません。ここから先に述べる手直しを済ませて,タイプセットが通るか試してみてください。うまくいかなければ,一部のパッケージをコメントアウトしてみたり,思い切って前半と後半に切り分けてタイプセットしてみたりしているうちに,何ができて何ができないか分かってくるはずです。

不明な点があればより詳しい記事をお読みになるとよいでしょう。また,参考にした記事も素晴らしいものばかりです

変更は
<pLaTeX / upLaTeX>
→ <LuaLaTeX>
と表します。

私が移行を諦めた点

TeXworks の設定

タイプセットの既定を LuaLaTeX に変えましょう。

  1. [編集]/[設定]/[タイプセット]/[タイプセットの方法]下部の[デフォルト]のプルダウンから[LuaLaTeX]を探し,クリックしてください。
  2. [OK]をクリックしてください。

文字コード

LuaLaTeX ではファイルの文字コードは UTF-8 しか扱えません。 新規作成すると既定で UTF-8 になりますが,過去に作ったファイルはそうでないことがあります。 Windows 付属のメモ帳で文字コードを変換できます18。 BOM 付きという表現が見えるときは,「BOM 付き」ではないほう(BOM 無しと明言されるときもある)を選んでください。 UTF-8 と UTF8-N があるときは,UTF8-N を選んでください(このときは UTF-8 が BOM 付き,UTF-8N が BOM 無しを意味します)。

! Text line contains an invalid character. と言われているときはこれが原因でしょう。自分の書いたソースファイルではなく,利用しているパッケージファイルの文字コードによることもあります。このときは,同じようにパッケージの文字コードを変換してください。

文書クラス

文書クラスそのものは次のように書き換えてください。

  • \documentclass{jsarticle}
    \documentclass{ltjsarticle}
  • \documentclass{jsreport}
    \documentclass{ltjsreport}
  • \documentclass{jsbook}
    \documentclass{ltjsbook}
  • \documentclass{jlreq}
    \documentclass{jlreq} \usepackage{luatexja}

オプションでは次のような点に気をつけてください。

  • \documentclass[dvipdfmx,A,B,C,...]{...}
    \documentclass[A,B,C,...]{...}
    • pLaTeX / upLaTeX では,グローバルに DVI 形式を指定することが推奨されてきました。LuaLaTeX では DVI 形式を経ずに PDF を出力しますから,DVI ドライバの設定は削除せねばなりません。
    • ほかの DVI 指定も同じです(後述)
  • \documentclass[uplatex,A,B,C,...]{...}
    \documentclass[A,B,C,...]{...}
    • LuaLaTeX は upLaTeX ではありませんから,uplatex オプションは削除せねばなりません。
  • \documentclass[papersize,A,B,C,...]{...}
    \documentclass[A,B,C,...]{...}
    • LuaLaTeX-ja 用 jsclasses 互換クラス は PDF のページサイズを自動的に設定してくれるため,papersize オプションは削除されています。
    • これも実は DVI の話です19

ドライバ指定が不要な点

LuaLaTeX では DVI 形式を経ずに PDF を出力しますから,DVI 形式のドライバ指定はすべて不要です。ドライバ指定オプションが必要だったパッケージのドライバ指定はすべて削除します。

フォント指定が異なる点

otf パッケージが使えない点

  • \usepackage{otf}
    \usepackage{luatexja-otf}
    • \ajMaru 類の命令を使っていなければ,削除しても差し支えありません。
    • 私は丸囲み数字で数式番号を表すなどをしていたため,luatexja-otf パッケージを使っています。

zw\zw に置き換えねばならない点

  • 自分で余白を整えた覚えがなければ無視してください。
  • zw\zw に置換するのが速いでしょう。
    • ただし,私は \@zwspaceなどの内部用命令を作っていたので,これらはあらかじめ \@z@w@space などに置換して衝突しないようにしました。
    • さらに,\zwspace などの命令はやむを得ないため,置換をかけたのちに \\zwspace\zwspace に置換しました。
    • 本文に “zw” という文字列が含まれているかもしれないのであれば,置換に気を配ってください。プリアンブルだけを置換する,なども方法です。
  • 内部に zw を使っているパッケージは動かなくなります。
    • ! Illegal unit of measure (pt inserted). などと出ていればほとんどこれが原因です。

emath の対応

詳細

LuaLaTeX の紹介

pLaTeX / upLaTeX から LuaLaTeX-ja へ移行すべき理由(背景)

LuaTeX-ja / LuaLaTeX-ja のマニュアル類

pLaTeX / upLaTeX と LuaLaTeX-ja の挙動比較

自作のパッケージへの対応

  • jpnedenumerate.sty32
    • [lua] オプションを加えました。
    • \zw \ajRoman \ajroman などを使っているためです。
  • jpnedumathsymbols.sty33
    • [lua] オプションを加えました。
    • \zw などを使っているためです。
  • asternote.sty34
    • [luajapanese] オプションを加えました。
    • \zw などを使っているためです。
    • 欧文ではそもそも zw を使っていないので,[japanese] オプションがなければ無関係です。
  • inlinelabel.sty35
    • [luacircled] オプションを加えました。
    • \ajMaru などを使っているためです。
    • オプションなしでは無関係です。
  • hideanswer.sty36
    • 直すべき点はありませんでした。

参考


  1. 追記 2023-08-12。 ↩︎

  2. 削除 2023-08-12。段落全体。 ↩︎

  3. acetaminophen,pLaTeX が本格的にやばいかもという話。Acetaminophen’s diary,参照 2022-07-26。 ↩︎

  4. ZR-TeXnobabbler,“pLaTeXがヤバい”問題を一気に解決する話(※ただし画期的)。マクロツイーター,参照 2022-08-29。「一方で、この問題について別の画期的な観点から……」以降はジョークであることに注意してください。 ↩︎

  5. 追記 2022-08-29。 ↩︎

  6. 改訂 2023-08-12。「各種エンジンやパッケージが揃っているために」より変更。 ↩︎

  7. 削除 2023-08-12。 ↩︎

  8. 追記 2023-08-13。 ↩︎

  9. しっぽ愛好家,LuaLaTex+uline–で禁則処理されない。TeX Forum,参照 2022-07-26。 ↩︎

  10. doraTeX,行分割可能な \fbox をつくる。TeX Alchemist Online,参照 2022-07-26。 ↩︎

  11. Donald Arseneau, The ulem package. CTAN,参照 2022-07-26。 ↩︎

  12. Yoshiki KUMAZAWA,ulem。xyoshiki.web.fc2.com,参照 2022-07-26。 ↩︎

  13. (Wiki),TeX が苦手とする処理 / 複数行にわたる下線(あるいは波線・破線など),TeX Wiki,参照 2022-07-26。 ↩︎

  14. (Q&A),Is there a package to secure rendered pdf with a password?。Stack Exchange,参照 2022-07-26。 ↩︎

  15. konoyonohana,[LaTeX] PDF-crypt — PDFの暗号化 ~2つの暗号化コマンドの紹介 ~。天地有情,参照 2022-07-26。 ↩︎

  16. KURO,Windowsに標準搭載されているフォントの利用条件。某氏の猫空,参照 2022-07-26。 ↩︎

  17. アカツキユウ,游明朝/ゴシックが配布開始されてたので改めて商用利用の可否を調べた。togetter,参照 2022-07-26。 ↩︎

  18. ユタカ アイティー ソリューション,Windows 標準機能で文字コードを変換する方法。SEECK.JP Knowledge Base,参照 2022-07-26。 ↩︎

  19. (Wiki),special 命令 / 主要な \special 命令 / Papersize special。TeX Wiki,参照 2022-07-26。 ↩︎

  20. (github),原ノ味フォントをデフォルトに?。GitHub,参照 2022-07-26。 ↩︎

  21. LuaTeX-ja プロジェクトチーム,LuaTeX-ja パッケージ。CTAN,参照 2022-07-26。3.2 luatexja-fontspec パッケージ。 ↩︎

  22. 大熊一弘,訂正版。LaTeX 初等数学プリント作成マクロ emath,参照 2022-07-26。 ↩︎

  23. (Q&A),luaLaTeXでemath。TeX Forum,参照 2022-07-26。 ↩︎

  24. Daiji,LuaLaTeXのすゝめ。Daiji Blog,参照 2022-07-26。 ↩︎

  25. acetaminophen,pLaTeX が本格的にやばいかもという話。Acetaminophen’s diary,参照 2022-07-26。 ↩︎

  26. さーくる⑨,[pLaTeX] pLaTeX がオワコン予備軍になっている話。East Opera 20XX,参照 2022-07-26。 ↩︎

  27. LuaTeX-ja プロジェクトチーム,LuaTeX-ja パッケージ。CTAN,参照 2022-07-26。 ↩︎

  28. LuaTeX-ja プロジェクト,LuaLaTeX-ja 用 jsclasses 互換クラス。CTAN,参照 2022-07-26。 ↩︎

  29. (CTAN),Directory macros/luatex/generic/luatexja/doc。CTAN,参照 2022-07-26。 ↩︎

  30. (CTAN),luatexja – Typeset Japanese with Lua(La)TeX。CTAN,参照 2022-07-26。 ↩︎

  31. acetaminophen,pTeX のペナルティを LuaTeX-ja で試してみた。Acetaminophen’s diary,参照 2022-07-26。 ↩︎

  32. (CTAN),jpneduenumerate – Enumerative expressions in Japanese education。CTAN,参照 2022-07-26。 ↩︎

  33. (CTAN),jpnedumathsymbols – Mathematical equation representation in Japanese education。CTAN,参照 2022-07-26。 ↩︎

  34. (CTAN),asternote – Annotation symbols enclosed in square brackets and marked with an asterisk。CTAN,参照 2022-07-26。 ↩︎

  35. (CTAN),inlinelabel – Assign equation numbers to inline equations。CTAN,参照 2022-07-26。 ↩︎

  36. (CTAN),hideanswer – Generate documents with and without answers by toggling a switch。CTAN,参照 2022-07-26。 ↩︎

  37. zr_tex8r,「pLaTeXからLuaLaTeXへの移行」に関するクイズ。Qiita,参照 2022-07-26。 ↩︎

  38. 鈴本遼,【LuaTeX】upLaTeXからLuaTeXへの乗り換え。Melting Rabbit,参照 2022-07-26。 ↩︎