LaTeX2e 2020-10-01 対策について

LaTeX2e 2020-10-01 対策について

- aminophen の投稿
返信数: 7
Twitter ではアナウンスしましたが,LaTeX カーネルが 2020-10-01 に更新される予定です。
更新内容(英語)はコマンド
$ texdoc ltnews32
を実行して読める PDF に記載されていますので読んでいただきたいのですが,
何といってもコア機能の内部実装が大幅に変更・拡張されているため
「LaTeX を更新すると予期せぬ不具合が発生する」
という懸念が(また)あります。

% 前回の事例 (2020-02-02) 並みに大きな変更だと認識しています。

ミニマムな LaTeX 文書を書いているユーザの方には問題が起きないかもしれませんが,
「LaTeX の内部実装に手を加えるパッケージを使っている場合」
あるいは
「自分でもよく分からないコードをコピペして使っている場合」
は特に,不具合が起きる可能性が十分あります。

非互換が発生すると困る方は,
10月1日(本日)以降,当面 TeX Live の更新を控えることをお勧めします。

※ 誤解のないように書いておきます。
ltnews32 を読めばわかるとおり,LaTeX2e 2020-10-01 では非常に多くの
機能追加や改良・バグ修正などがなされています。
それは非常に良い方向性で,多くのユーザにとっても利益になるものです。
(それを実現するために内部実装が変わって予期せぬ挙動が起きる,というのは表裏一体です。)

=====

なお,日本語 TeX 開発コミュニティが維持開発している pLaTeX も
「LaTeX の内部実装に手を加える」
という仕組みで実現されているため,やはり問題が起きそうな状況でしたが,
つい今しがた「致命的な欠陥は起きないであろうレベル」に持ち込みました。
多くの方のご協力をいただきました。大変ありがとうございました。

これが CTAN / TeX Live に反映されれば

pLaTeX2e <2020-10-01>

として起動するようになります。
(対応状況 → https://github.com/texjporg/platex/issues/94 も参照)

多少の非互換が起きる可能性を承知の上で,テストしてくださる方がいれば
TeX Live を更新して新しい pLaTeX を試してくださると助かります。
pLaTeX2e <2020-10-01> の更新内容は添付 (plnewsc15.pdf) のとおりです。
aminophen への返信

Re: LaTeX2e 2020-10-01 対策について

- aminophen の投稿
LaTeX2e 2020-10-01 が(直前になって不具合報告があったことも影響して)2日遅れましたが
つい15分前に TeX Live に収録されました。
私が把握している不具合として,「TikZ (PGF) の shadings ライブラリで塗りが表示されない」
https://github.com/pgf-tikz/pgf/issues/928
という問題がまだ残ったままです(TikZ の対応待ち)。

TeX Live で新しい LaTeX が起動するようになることで,今後しばらくの間は
未知の不具合が露呈する可能性があります。ご注意ください。
aminophen への返信

Re: LaTeX2e 2020-10-01 対策について

- aminophen の投稿
> TikZ (PGF) の shadings ライブラリで塗りが表示されない

ようやく修正版 pgf がリリースされました。
今日か明日には tlmgr で pgf revision 56989 が
取得可能になると思います。
aminophen への返信

Re: LaTeX2e 2020-10-01 対策について

- aminophen の投稿
LaTeX2e 2020-10-01 で
「\include などの命令を使って LaTeX ソースを分割した場合に BibTeX が使えない」
という割と致命的な問題を発見しました…。
https://github.com/latex3/latex2e/issues/400
aminophen への返信

Re: LaTeX2e 2020-10-01 対策について

- aminophen の投稿
どうやら新しい LaTeX2e 2020-10-01 を使うと
「jsclasses で 10pt 以外のフォントサイズを使用した場合」
に papersize オプションによる用紙サイズ指定が間違うようです。

\documentclass[dvipdfmx,slide,a4paper,papersize]{jsarticle}
\begin{document}
ここから\hfill ここまで
\end{document}

原因調査はこれから行いますが,
(1) 冒頭に
\RequirePackage[2020/02/02]{platexrelease}
を追加すると大丈夫になるようです。
(2) あるいは,
\usepackage{hyperref}
\usepackage{pxjahyper}
という2行を追加しても治るようです。

→ https://github.com/texjporg/jsclasses/issues/72
aminophen への返信

Re: LaTeX2e 2020-10-01 対策について

- aminophen の投稿
> どうやら新しい LaTeX2e 2020-10-01 を使うと
> 「jsclasses で 10pt 以外のフォントサイズを使用した場合」
> に papersize オプションによる用紙サイズ指定が間違うようです。

jsclasses 2020-10-05 で対応を施してリリースしました。
https://github.com/texjporg/jsclasses/releases/tag/2020-10-05

=====

なお,この問題は,LaTeX2e 2020-10-01 における以下の挙動変化に起因します。
『\AtBeginDvi の引数の展開タイミングが,"その場"ではなく"実行時"に変化した』

例えば以下のソースを LaTeX2e 2020-02-02 以前と 2020-10-01 で比べると分かります。

\documentclass{article}
\AtBeginDvi{\ONE\special{\TWO}}
\typeout{\THREE}
\begin{document}
test
\end{document}

当然これを処理すれば「制御綴が未定義」というエラーが出るのですが

* 従来 … \ONE \TWO \THREE の順
* 2020-10-01 … \THREE \ONE \TWO の順

というように違いが出ます。
この挙動変化は \shipout に関わる LaTeX2e のコードが一新された影響ですが,
意図的かどうかはよくわかりません。
aminophen への返信

Re: LaTeX2e 2020-10-01 対策について

- mr2h の投稿
小生10月に入ってから、tlmgr update --self --all を一切行っておりません。
===============================================
非互換が発生すると困る方は,
10月1日(本日)以降,当面 TeX Live の更新を控えることをお勧めします。・・・とありますが、
===============================================
不具合が出たら、backup から、restoreすればよさそうですが、その作業が面倒な気がして、未だ手をつけていません。更新してもいいですよ、というアナウンスは、近い将来、出るのでしょうか?素朴な質問で恐縮ですが。
mr2h への返信

Re: LaTeX2e 2020-10-01 対策について

- aminophen の投稿
現時点の私見は

・既知の不具合も,まだ直っていないものが複数。(下記)
・ただし,致命的かつ影響が大きい不具合が残っているという報告はない。

という状況を踏まえて

・全員に積極的な更新が「必須あるいは推奨」とはしない。
・ただし,来年以降も LaTeX を使う予定があれば,各自の“困らないタイミング”で更新してよい。
(=早めに新しい LaTeX の挙動を知ることは,将来へ向けた準備になります。)

と述べておきます。

====
既知の不具合:先述の「TikZ (PGF) の shadings で塗りが表示されない」の対策リリース待ちの他,
menukeys パッケージや catoptions パッケージで発生している模様。
https://twitter.com/aminophen/status/1315148932390039552
https://twitter.com/aminophen/status/1316384079571349504
====

> 不具合が出たら、backup から、restoreすればよさそう

方法は
https://okumuralab.org/tex/mod/forum/discuss.php?d=2428
https://okumuralab.org/tex/mod/forum/discuss.php?d=1819
の時と似ています。改めて書くと

$ tlmgr restore latex
で,巻き戻せる latex のバージョンを調べる。
$ tlmgr restore latex (判った数字)
で,latex を巻き戻す。
$ fmtutil-user --all
で,フォーマットを再作成する。

全てコマンドラインでの入力操作ですので,慣れていれば可能です。