31 あれ?LATEX で tipa を使うとエラーになる。とても驚きの結末。 \RequirePackage[YYYY/MM/DD]{なんとか} という仕掛けについて

LATEX で tipa という発音記号を扱うパッケージを使っている。

ところが、某 Mac で組版しようとしていてエラーになった。

たまたま MacTeX 2024 が残っていて、そちらで組版したら正常に終了する。

でも、MacTeX 2025 でもちゃんと動く Mac もある。

色々試して、次のような .tex でもエラーが生じることがあることが分かった。
\documentclass[12pt,leqno,dvipdfmx]{ujarticle}
\usepackage{tipa}
\begin{document}
Hello
\end{document}

うまく行く場合
% uplatex foobar.tex
This is e-upTeX, Version 3.141592653-p4.1.2-u2.00-250202-2.6 (utf8.uptex) (TeX Live 2025) (preloaded format=uplatex)
 restricted \write18 enabled.
entering extended mode
(./foobar.tex
pLaTeX2e <2023-02-14u04>+1, based on
LaTeX2e <2025-06-01> patch level 1
L3 programming layer <2025-10-24>
(/usr/local/texlive/2025/texmf-dist/tex/uplatex/base/ujarticle.cls
Document Class: ujarticle 2020/09/30 v1.8f-u00 Standard upLaTeX class
(/usr/local/texlive/2025/texmf-dist/tex/latex/base/leqno.clo)
(/usr/local/texlive/2025/texmf-dist/tex/uplatex/base/ujsize12.clo))
(/usr/local/texlive/2025/texmf-dist/tex/latex/tipa/tipa.sty
(/usr/local/texlive/2025/texmf-dist/tex/latex/base/fontenc.sty
(/usr/local/texlive/2025/texmf-dist/tex/latex/tipa/t3enc.def)))
(/usr/local/texlive/2025/texmf-dist/tex/latex/l3backend/l3backend-dvipdfmx.def)
 (./foobar.aux) (/usr/local/texlive/2025/texmf-dist/tex/latex/tipa/t3cmr.fd)
[1] (./foobar.aux) )
Output written on foobar.dvi (1 page, 220 bytes).
Transcript written on foobar.log.
 %
うまく行かない場合
% uplatex foobar.tex
This is e-upTeX, Version 3.141592653-p4.1.2-u2.00-250202-2.6 (utf8.uptex) (TeX Live 2025) (preloaded format=uplatex)
 restricted \write18 enabled.
entering extended mode
(./foobar.tex
pLaTeX2e <2023-02-14u04>+1, based on
LaTeX2e <2025-11-01>
L3 programming layer <2025-10-24>
(/usr/local/texlive/2025/texmf-dist/tex/uplatex/base/ujarticle.cls
Document Class: ujarticle 2020/09/30 v1.8f-u00 Standard upLaTeX class
(/usr/local/texlive/2025/texmf-dist/tex/latex/base/leqno.clo)
(/usr/local/texlive/2025/texmf-dist/tex/uplatex/base/ujsize12.clo))
(/usr/local/texlive/2025/texmf-dist/tex/latex/tipa/tipa.sty
(/usr/local/texlive/2025/texmf-dist/tex/latex/base/fontenc.sty
(/usr/local/texlive/2025/texmf-dist/tex/latex/tipa/t3enc.def
! Missing \endcsname inserted.
<to be read again>
                   \target@series@value
l.357 {\sffamily
                \xdef\@sffamilyname{\f@family}}
?

見れば分かるけれど、違いは LaTeX2e のパッケージのバージョンである。 LaTeX2e <2025-06-01> patch level 1 では動いて、 新しい LaTeX2e <2025-11-01> では動かない。 そうか、それで (古い) MacTeX 2024 では動いたのか。

新しいので動かないのは、面倒なことだな、と思ったのだが、 ChatGPT 様に尋ねたら驚きのアドバイス。

\documentclass の前に (ほとんどファイル先頭に書け、 ということだな)
\RequirePackage[2025/06/01]{platexrelease}
と書きなさい。

半信半疑で試してみたら
% uplatex foobar.tex
This is e-upTeX, Version 3.141592653-p4.1.2-u2.00-250202-2.6 (utf8.uptex) (TeX Live 2025) (preloaded format=uplatex)
 restricted \write18 enabled.
entering extended mode
(./foobar.tex
pLaTeX2e <2023-02-14u04>+1, based on
LaTeX2e <2025-11-01>
L3 programming layer <2025-10-24>
(/usr/local/texlive/2025/texmf-dist/tex/platex/base/platexrelease.sty
(/usr/local/texlive/2025/texmf-dist/tex/latex/base/latexrelease.sty
(/usr/local/texlive/2025/texmf-dist/tex/latex/base/utf8.def
(/usr/local/texlive/2025/texmf-dist/tex/latex/base/omsenc.dfu)
(/usr/local/texlive/2025/texmf-dist/tex/latex/base/ot1enc.dfu)
(/usr/local/texlive/2025/texmf-dist/tex/latex/base/t1enc.dfu)
(/usr/local/texlive/2025/texmf-dist/tex/latex/base/ts1enc.dfu)))

Package platexrelease Warning: Version of `latexrelease' is newer than
(platexrelease)                what `platexrelease' knows.


Package platexrelease Warning: The current package is for pLaTeX 2023-02-14:
(platexrelease)                It has no patches beyond that date
(platexrelease)                There may be an updated version
(platexrelease)                of this package available from CTAN.

(/usr/local/texlive/2025/texmf-dist/tex/platex/base/plexpl3.sty
(/usr/local/texlive/2025/texmf-dist/tex/latex/l3kernel/expl3.sty
(/usr/local/texlive/2025/texmf-dist/tex/latex/l3backend/l3backend-dvips.def)))
(/usr/local/texlive/2025/texmf-dist/tex/platex/base/plexpl3.ltx))
(/usr/local/texlive/2025/texmf-dist/tex/uplatex/base/ujarticle.cls
Document Class: ujarticle 2020/09/30 v1.8f-u00 Standard upLaTeX class
(/usr/local/texlive/2025/texmf-dist/tex/latex/base/leqno.clo)
(/usr/local/texlive/2025/texmf-dist/tex/uplatex/base/ujsize12.clo))
(/usr/local/texlive/2025/texmf-dist/tex/latex/tipa/tipa.sty
(/usr/local/texlive/2025/texmf-dist/tex/latex/base/fontenc.sty
(/usr/local/texlive/2025/texmf-dist/tex/latex/tipa/t3enc.def)))

LaTeX Warning: Unused global option(s):
    [dvipdfmx].

(./foobar.aux) (/usr/local/texlive/2025/texmf-dist/tex/latex/tipa/t3cmr.fd)
[1] (./foobar.aux) )
Output written on foobar.dvi (1 page, 252 bytes).
Transcript written on foobar.log.
mk@mk-MacBook-light work %

おお、通った。でも、これはいつでもうまく行くものではないのでは? 質問してみる。
これまでこういうことをしたことはありません。 古いパッケージを利用するように指定したということですが、 これはいつも使えるものでしょうか?例えば新しくインストールした場合など、 古いパッケージがインストールされていないように思えます。

ChatGPT の回答
「古い pLaTeX/LaTeX を使うように指定したのに、 その古い版が本当に存在するのか?」
という疑問はもっともです。

結論から言うと:

**\RequirePackage[〈日付〉]{platexrelease}
は「古いファイルを要求する」のではなく、
「新しい pLaTeX/LaTeX が 自分の内部に持っている“互換モード”パッチを使って、古い版として振る舞う」
と宣言するだけです。
つまり、古いファイルそのものをインストールする必要はありません。

これは LaTeX2e の公式設計で、常に使える「将来に渡って安定した運用方法」です。

知らなかったので大変驚きました。実現するのがとても大変そうな仕掛けですね。

LaTeX/pLaTeX の内部事情は、普段表に出ないだけで意外と “精密な互換レイヤー” が広く張り巡らされていて、知ると驚かれる方が多いです。今回のご質問は、 その典型例を完全に踏んでいましたので、むしろとても良いタイミングでした。

もし今後も TeX Live のアップデートで「昨日まで動いたのに今日壊れた」 という現象に遭遇したら、

\RequirePackage[YYYY/MM/DD]{platexrelease}
を“安全弁”として試すことを覚えておくと、本当に助けになります。

へー。



桂田 祐史