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

この記事は,pLaTeX / upLaTeX をお使いのかたに向けて,LuaLaTeX に移行すべき理由と方法をお伝えするものです。

これから LaTeX を使いはじめようと思われるかたは,最初から LuaLaTeX を選ばれることをおすすめします

背景

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

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

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

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

ほかにも,LuaLeTeX はフォントの設定や複数フォントの使用が容易である,内部に Lua のコードを書いて・または読み込ませて処理させることができるといった利点があります。また,LuaLaTeX は欧米(すなわち開発の本場)で現在主として利用されている pdfTeX の後継に予定されています。すなわち,今後の展望も明るいのです。

目的

  • pLaTeX / upLaTeX から LuaLaTeX-ja へ移行する。
    • 私自身は upLaTeX から LuaLaTeX-ja へ移行しました。
    • 不足しているなどがあれば,ぜひ twitter にて情報をお教えください。この件について網羅的に書かれた記事はあまり見当たらないように思います。

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

前提

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

内容

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

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

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

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

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

私が移行を諦めた点

TeXworks の設定

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

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

文字コード

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

! 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 の話です12

ドライバ指定が不要な点

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.sty25
    • [lua] オプションを追加しました。
    • \zw \ajRoman \ajroman などを使っているためです。
  • jpnedumathsymbols.sty26
    • [lua] オプションを追加しました。
    • \zw などを使っているためです。
  • asternote.sty27
    • [luajapanese] オプションを追加しました。
    • \zw などを使っているためです。
    • 欧文ではそもそも zw を使っていないので,[japanese] オプションがなければ関係ありません。
  • inlinelabel.sty28
    • [luacircled] オプションを追加しました。
    • \ajMaru などを使っているためです。
    • オプションなしでは関係ありません。
  • hideanswer.sty29
    • 変更すべき点はありませんでした。

参考


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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