p/upLaTeX から LuaLaTeX へ移行すべき理由と方法
目次
今 pLaTeX または upLaTeX を使っているかたがたへ向けて、LuaLaTeX に移行することを勧める理由と、移行のうえで原稿について気をつけなければならないことを述べる。理由は「背景」に、手続きは「解決」にまとめた。
同じように、これから LaTeX を使おうと考えているかたがたへ向けて、古い入門書や入門記事でよく現れる pLaTeX や upLaTeX ではなく、はじめから LuaLaTeX を使うことを勧める理由を述べる。この理由は「背景」にまとめた。
他のソフトウェア(Microsoft Word や Studyaid D.B.)と LaTeX のいずれを使おうかどうかを悩んでいるかたがたへ向けては、この記事ではなく次の記事で述べる。
2023年に発表された組版ソフト typst も流行の兆しがある。まだユーザが少なく情報に乏しい欠点があるが、こちらのほうがよいと思うひともいるだろう。
背景
LaTeX はそもそも、英語(ラテンアルファベット)での組版のために作られている。 したがって、そのままでは日本語を取り扱うことができない。 さて、日本語を取り扱うためには次のような拡張がある。
- pLaTeX / upLaTeX
- LuaLaTeX-ja
- XeTeX
- etc.
今はこれだけの選択肢がある。 しかし、2000年代後半ごろまでは、pLaTeX / upLaTeX しかなかった。 また、2010年代も pLaTeX / upLaTeX が主流だったと言ってよい。
そのため、昔から web 上にある記事や古い本では、たいていが断りなく pLaTeX / upLaTeX をもとに書かれている。 今でも pLaTeX / upLaTeX がよく使われるのは、これが大きな理由だろう。 さらに、さまざまな場所で昔に作られた・決められた pLaTeX / upLaTeX の様式が変わらずに使いまわされていることも要因である。 あなたも、web 上にある記事を頼りに LaTeX を使いはじめたのであれば、よくわからないままに pLaTeX / upLaTeX を使っているかもしれない。
2022年現在、日本で最も多く使われている LaTeX は pLaTeX / upLaTeX であろう。 私も、2022年06月までは upLaTeX を使っていた。 しかしこのごろ、pLaTeX / upLaTeX については次のようなおそれがあると伝えられている。
- pLaTeX / upLaTeX そのものが動かなくなる。
- pLaTeX / upLaTeX だけは動いても、様々なパッケージが使えなくなる。
したがって、これから使う LaTeX として pLaTeX / upLaTeX は避けるべきであろう。 残る LuaLaTeX と XeLaTeX では、LuaLaTeX がよりよい環境であると考える。 LuaLaTeX のほうが日本語向けの処理系や知見が多く開発に勢いがあること、欧文で主流となっている pdfTeX の後継となることが予定されており、将来の展望が明るいことなどがその理由である。
ほかにも、LuaLeTeX には(uplatex が苦手であった)フォントの設定が易しい・Lua のコードを書いて・読み込ませて処理させられるといった長所もある。
これらのことから、私は upLaTeX から LuaLaTeX-ja へと切り替えた。あなたが教員であれば、長期休暇のはじめに取り組むのがよいだろう。授業の準備が止まり、移行にあたってトラブルがあっても考えることができ、遊んで慣れる時間もある。
私が自身で使い・公開している数学教材作成用の LaTeX プリアンブルである the Japanese Educational Preambles も LuaLaTeX 用として開発している。
これから LaTeX を使おうとするユーザーには、ぜひ LuaLaTeX-ja を選んでもらいたい。 また、pLaTeX / upLaTeX ユーザーには、余裕のあるときを探して LuaLaTeX-ja への切り替えを勧めたい。 手間はそこまで大きくない。 TeX Live によって LaTeX を導入しているのなら、コンパイルするエンジンを変え、いくつかの命令(とくにパッケージとパッケージのオプション)を書き換えるだけで済む。 切り替えのために私が行った手続きは解決で述べる。
解決
ここからは、私が upLaTeX から LuaLaTeX に切り替えるにあたって行った作業を述べる。 あくまでも個別的・具体的な記録であることに注意されたい。
あなたがどのような機能によって文書を作ってきたかがわかっているのなら、怖がることは何もない。 ここから先を読むことなく、LuaLaTeX の説明を読み、LuaLaTeX としてのプリアンブルをはじめから作ってみることを勧めたい。 元のソースを手直ししながら切り替えようと考えるよりも、「同じことができるようにしよう」と思うほうがよいだろう。 なすべきことは執筆なのだから。
あなたがこれまで原稿を書くことで手一杯であったのなら、ここでプリアンブルを見直すことを勧めたい。 使っているパッケージのマニュアルに目を通したり、コメントアウトしてみて何が起こるかを試したりしてみればよいだろう。 それは、LaTeX への理解を深めることにつながる。
とはいえ、よくわからない・難しそうだからとりあえずこのままでよい、という気持ちになることもある。 私も、時間に追われていればそうなる。 もしも、「たやすく切り替えられるならしてもよいけれど……」と思ってもらえるのであれば、役に立てるかもしれない。 ここから先に述べる手直しを済ませて、タイプセットが通るか試してもらいたい。 上手くゆかなければ、一部のパッケージをコメントアウトしてみたり、思い切って文書の前半と後半を分けてタイプセットしてみたりすれば、何ができて何ができないのかがわかってくるだろう。
わからない点があれば、より詳しい記事を参照してもらいたい。
要件
私は次の条件のもと、upLaTeX から LuaLaTeX への切り替えを行った。 異なる環境での違いについては確かめていない。
- TeX Live により LaTeX を導入している。
- 私は TeX Live によるローカル環境を使って文書を作っている。
- かつての文書がそのままタイプセットできないことは止むを得ない。そのときは pLaTeX / upLaTeX を用いてタイプセットする。
- ここでは、これから作る文書について、これまで書いてきたもののどこを直せばよいのか、を考える。昔の文書をどう置換するかということではない。
- とはいえ、これまで使ってきた pLaTeX / upLaTeX 文書をこれからも LuaLaTeX 文書として使い続けるために書きなおす参考にはしていただけるだろう。
凡例
変更は
<pLaTeX / upLaTeX>
→ <LuaLaTeX>
と表す。
バックスラッシュ記号と円マークは、ブラウザの読み込むフォントによる。
私が移行を諦めた点
- uline--.sty を使うことは諦めた。
- uline--.sty をもとに作られたbreakfbox.sty も諦めた。
- 代わりとして、欧文でのみ改行が働く ulem.sty を選び、そのもとで原稿を書くこととした。すなわち、下線は改行が生じうるところでは使わないこととした。
- ulem.sty の日本語解説としてこれを挙げておく。
- 和文のために作られたほかの下線パッケージもあるので、下線が諦められなければ調べてみられたい。
- 最近では Lua-UL.sty もあるようだ。
- タイプセットに併せて PDF の権限パスワードを付けることは諦めた。
- そもそもが DVI ウェアの機能であるため、どうにもならない。
- このことは、古い游フォントのライセンスのために行っていたが、このごろの游フォントのライセンスでは気にしなくてよいようである。
- PDF ができた後、PDF にパスワードをかけることはたやすい。
- あなたが使っているパッケージが LuaLaTeX でも使えるかどうかは、切り替える前に調べておくほうがよい。とくに下線など、日本語処理にかかわるものは気をつけねばならない。
TeXworks の設定
タイプセットの既定を LuaLaTeX に変える。
- [編集]/[設定]/[タイプセット]/[タイプセットの方法]下部の[デフォルト]のプルダウンから[LuaLaTeX]を探し、クリックする。
- [OK]をクリックする。
文字コード
LuaLaTeX ではファイルの文字コードは UTF-8 しか扱えない。 新規作成すれば既定で UTF-8 になるが、過去に作ったファイルはそうでないことがある。
Windows 付属のメモ帳で文字コードを変換できる。 BOM 付きという表現が見えるときは、「BOM 付き」ではないほう(BOM 無しと明言されるときもある)を選ぶ。 UTF-8 と UTF8-N があるときは、UTF8-N を選ぶ(このときは UTF-8 が BOM 付き、UTF-8N が BOM 無しを意味する)。
コンパイルエラーが生じ、! Text line contains an invalid character.
と言われているときの原因はたいてい文字コードである。
あなたが書いたソースファイルではなく、使っているパッケージファイルの文字コードによることもある。
このときは、パッケージ(.sty
ファイル)の文字コードを変換すればよい。
文書クラス
文書クラスそのものは次のように書き換える。
\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
オプションは取り除かねばならない。
- LuaLaTeX は upLaTeX ではないので、
\documentclass[papersize,A,B,C,...]{...}
→\documentclass[A,B,C,...]{...}
- LuaLaTeX-ja 用 jsclasses 互換クラスは PDF のページサイズを自動で設定してくれるため、
papersize
オプションは取り除かれている。 - これも実は DVI の話である。
- LuaLaTeX-ja 用 jsclasses 互換クラスは PDF のページサイズを自動で設定してくれるため、
ドライバ指定が不要な点
LuaLaTeX では DVI 形式を経ずに PDF を作るので、DVI 形式のドライバ指定は要らない。不要です。ドライバ指定オプションをせねばならなかったすべてのパッケージについて、DVI ドライバの指定は取り除かねばならない。
- 文書クラスで指定しているのみであれば、そちらで直せば終わる(前述)。
\usepackage[dvipdfmx,...]{<package>}
→\usepackage[...]{<package>}
- よく使われるドライバ依存パッケージは次のようなものだろう。
- color パッケージ
- graphicx パッケージ
- hyperref パッケージ
dvipdfmx
で検索し、手で書き換えるのが速いだろう。置換は[dvipdfmx]
[dvipdfmx,...]
[...,dvipdfmx]
ですべきことが異なるので気をつけねばならない。
フォント指定が異なる点
- もとよりフォントを指定していなければ、無視してよい。
- TeX Live の更新をかけると、フォントは昔の既定である ipaex から今の既定である haranoaji に変わると思われる。
\usepackage[T1]{fontenc}
\usepackage[unicode,yu-win10]{pxchfon}
→\usepackage[no-math]{fontspec}
\usepackage[yu-win10]{luatexja-preset}
- pxchfon パッケージはそもそも dvipdfmx 専用である。
- LuaLaTeX でのフォント指定は luatexja-preset パッケージが楽であろう。
- 他のフォントを指定しているときも同じである。本来 luatexja-preset があれば fontspec は自動的に読み込まれるが、いろいろと試すにあたって設定を変えやすいように案内した。
- 改めていろいろ試したければ luatexja-fontspec に依るのがよい(Package documentation (Japanese) 内の「3.2 luatexja-fontspec パッケージ」に説明がある)。
otf パッケージが使えない点
\usepackage{otf}
→\usepackage{luatexja-otf}
\ajMaru
類の命令を使っていなければ、取り除いても差しつかえない。- 私は丸囲み数字で数式番号を表すなどをしているため、luatexja-otf パッケージを使っている。
zw
を \zw
に置き換えねばならない点
- 自ら余白を整えた覚えがなければ、無視してよい。
zw
とは、pLaTeX / upLaTeX のみで使える和文スペースの単位であり、LuaLaTeX-ja では\zw
と書かねばならない。 zw
を\zw
に置換するのが速いだろう。- ただし、私は
\@zwspace
などの内部用命令を作っていたので、これらはあらかじめ\@z@w@space
などに置換しておき、衝突しないようにした。 - さらに、
\zwspace
などのユーザー向け命令はやむを得ないため、置換をかけたのちに\\zwspace
を\zwspace
にふたたび置換した。 - 本文に「zw」という文字列が含まれているかもしれないのであれば、置換に気を配らねばならない。プリアンブルのみを置換するなども手であろう。
- ただし、私は
- 内部に
zw
を使っているパッケージは動かなくなる。- コンパイルエラーが生じ、
! Illegal unit of measure (pt inserted).
などと言われていればほぼこれが原因である。使っている日本語関係パッケージをすべてコメントアウトしたのち、ひとつずつ戻しながら原因のパッケージを探ることになる。
- コンパイルエラーが生じ、
emath の対応
補足
pLaTeX / upLaTeX と LuaLaTeX-ja の挙動比較
- https://acetaminophen.hatenablog.com/entry/2019/12/15/151046
- acetaminophen
- pTeX のペナルティを LuaTeX-ja で試してみた
- Acetaminophen’s diary
- 参照 2022-07-26
自作のパッケージへの対応
リンクはすべて CTAN である。
- jpnedenumerate.sty
[lua]
オプションを加えた。zw
\ajRoman
\ajroman
を使っているためである。
- jpnedumathsymbols.sty
[lua]
オプションを加えた。zw
を使っているためである。
- asternote.sty
[luajapanese]
オプションを加えた。zw
を使っているためである。- 欧文ではそもそも
zw
を使っていないので、[japanese]
オプションがなければ無関係である。
- inlinelabel.sty
[luacircled]
オプションを加えた。\ajMaru
を使っているためである。- オプションなしでは無関係である。
- hideanswer.sty
- 直すべき点はない。
参考
各種日本語 LaTeX の歴史と比較
- https://okumuralab.org/texconf10/presentations/yato.pdf
- 八登崇之
- 日本人の知らない TeX
- TeX ユーザの集い 2010
- 参照 2024-10-18
- 2010年の記事である。今は LuaLaTeX-ja によって pLaTeX / upLaTeX と同じかそれ以上の品質で組版ができる。
- https://www.slideshare.net/slideshow/latex-239371115/239371115
- 八登崇之
- 「日本語LaTeX」が多すぎる件について
- slideshare
- 参照 2024-10-18
- https://note.com/komuda/n/n9301779435db
- 小牟田コウタ
- 続・LaTeXでシナリオ同人誌:XeLaTeXかLuaLaTeXか
- note.com
- 参照 2024-10-18
背景(pLaTeX / upLaTeX への懸念)
- https://acetaminophen.hatenablog.com/entry/2021/06/18/022108
- acetaminophen
- pLaTeX が本格的にやばいかもという話
- Acetaminophen’s diary
- 参照 2022-07-26
- https://zrbabbler.hatenablog.com/entry/2022/08/08/080002
- ZR-TeXnobabbler
- “pLaTeXがヤバい”問題を一気に解決する話(※ただし画期的)
- マクロツイーター
- 参照 2022-08-29
- 「一方で、この問題について別の画期的な観点から……」以降はジョーク(日本 LaTeX 界のミーム)であることに注意されたし。
- http://circle9tym.blog.fc2.com/blog-entry-397.html
- さーくる⑨
- [pLaTeX] pLaTeX がオワコン予備軍になっている話
- East Opera 20XX
- 参照 2022-07-26
LuaLaTeX の紹介と利点
- https://texwiki.texjp.org/?LaTeX入門 / 発展編
- (Wiki)
- 発展編:最近の LaTeX の動向
- TeX Wiki
- 参照 2022-07-27
- https://daiji256.github.io/posts/tex-latex/lualatex-susume/
- Daiji
- LuaLaTeX のすゝめ
- Daiji Blog
- 参照 2022-07-26
- https://zrbabbler.hatenablog.com/entry/20181222/1545495849
- ZR-TeXnobabbler
- 例の「verb の呪い」を LuaTeX の力で打破する(bxrawstr パッケージ)
- マクロツイーター
- 参照 2022-07-27
LuaTeX-ja / LuaLaTeX-ja のマニュアル類
- http://mirrors.ctan.org/macros/luatex/generic/luatexja/doc/luatexja-ja.pdf
- LuaTeX-ja プロジェクトチーム
- LuaTeX-ja パッケージ
- CTAN
- 参照 2022-07-27
- http://mirrors.ctan.org/macros/luatex/generic/luatexja/doc/ltjsclasses.pdf
- LuaTeX-ja プロジェクト
- LuaLaTeX-ja 用 jsclasses 互換クラス
- CTAN
- 参照 2022-07-27
- https://ctan.org/tex-archive/macros/luatex/generic/luatexja/doc
- (CTAN)
- Directory macros/luatex/generic/luatexja/doc
- 参照 2022-07-27
- https://ctan.org/pkg/luatexja
- (CTAN)
- luatexja – Typeset Japanese with Lua(La)TeX
- CTAN
- 参照 2022-07-27
pLaTeX / upLaTeX から LuaLaTeX への移行
- https://qiita.com/zr_tex8r/items/ac9176e4611bf233a3e0
- zr_tex8r
- 「pLaTeXからLuaLaTeXへの移行」に関するクイズ
- Qiita
- 参照 2022-07-26
- https://meltingrabbit.com/blog/article/2017061101/
- 鈴本遼
- 【LuaTeX】upLaTeXからLuaTeXへの乗り換え
- Melting Rabbit
- 参照 2022-07-26
私が移行を諦めた点 (1) 下線に関する記事
- https://okumuralab.org/tex/mod/forum/discuss.php?d=3389
- しっぽ愛好家
- LuaLaTex+uline–で禁則処理されない
- TeX Forum
- 参照 2022-07-26
- https://doratex.hatenablog.jp/entry/20171219/1513609345
- doraTeX
- 行分割可能な \fbox をつくる
- TeX Alchemist Online
- 参照 2022-07-26
- https://ctan.org/pkg/ulem
- Donald Arseneau
- The ulem package
- CTAN
- 参照 2022-07-26
- http://xyoshiki.web.fc2.com/tex/ulem.html
- Yoshiki KUMAZAWA
- ulem
- xyoshiki.web.fc2.com
- 参照 2022-07-26
- https://texwiki.texjp.org/?TeXが苦手とする処理#t65559ac
- (Wiki)
- TeX が苦手とする処理 / 複数行にわたる下線(あるいは波線・破線など)
- TeX Wiki
- 参照 2022-07-26
- https://ctan.org/pkg/lua-ul
- Marcel Kruger
- Lua-UL
- CTAN
- 参照 2024-10-18
私が移行を諦めた点 (2) 権限パスワードに関する記事
- https://tex.stackexchange.com/questions/24210/is-there-a-package-to-secure-rendered-pdf-with-a-password
- (Q&A)
- Is there a package to secure rendered pdf with a password?
- Stack Exchange
- 参照 2022-07-26
- https://konoyonohana.blog.fc2.com/blog-entry-49.html
- konoyonohana
- [LaTeX] PDF-crypt — PDFの暗号化 ~2つの暗号化コマンドの紹介 ~
- 天地有情
- 参照 2022-07-26
- https://blog2.k05.biz/2014/10/windows-font-license.html
- KURO
- Windowsに標準搭載されているフォントの利用条件
- 某氏の猫空
- 参照 2022-07-26
- https://togetter.com/li/907828
- アカツキユウ
- 游明朝/ゴシックが配布開始されてたので改めて商用利用の可否を調べた
- togetter
- 参照 2022-07-26
文字コード
- https://kb.seeck.jp/archives/14904
- ユタカ アイティー ソリューション
- Windows 標準機能で文字コードを変換する方法
- SEECK.JP Knowledge Base
- 参照 2022-07-26
文書クラス
- https://texwiki.texjp.org/?special命令#papersize-specials
- (Wiki)
- special 命令 / 主要な \special 命令 / Papersize special
- TeX Wiki
- 参照 2022-07-26
フォント指定が異なる点
- https://github.com/texjporg/ptex-fontmaps/issues/27
- (GitHub)
- 原ノ味フォントをデフォルトに?
- GitHub
- 参照 2022-07-26
- https://ctan.org/pkg/luatexja
- LuaTeX-ja プロジェクトチーム
- LuaTeX-ja
- CTAN
- 参照 2022-07-26
- Package documentation (Japanese) 内の「3.2 luatexja-fontspec パッケージ」に説明がある。
emath の対応
- http://emath.s40.xrea.com/teisei.htm
- 大熊一弘
- 訂正版
- LaTeX 初等数学プリント作成マクロ emath
- 参照 2022-07-26
- https://okumuralab.org/tex/mod/forum/discuss.php?d=1651
- (Q&A)
- luaLaTeXでemath
- TeX Forum
- 参照 2022-07-26
改訂
- 追記: 2024-10-30
- Typst に触れた。
- 改訂: 2024-10-18
- 旧記事「LaTeX エンジンとして LuaLaTeX を勧める理由」と統合した。
- 旧記事「LaTeX エンジンとして LuaLaTeX を勧める理由」のリダイレクト先とした。
- 「「日本語LaTeX」が多すぎる件について」「続・LaTeXでシナリオ同人誌:XeLaTeXかLuaLaTeXか」「Lua-UL」へのリンクを加えた。
- 記事の統合に伴って、大きく書き換えた。ただし、伝えたい内容は同じである。
- 追記: 2022-08-29
- 「“pLaTeXがヤバい”問題を一気に解決する話(※ただし画期的)」へのリンクを加えた。