texjporg / platex

pLaTeX community edition
BSD 3-Clause "New" or "Revised" License
49 stars 8 forks source link

LaTeX2e 2020-10-01 対策 #94

Closed aminophen closed 3 years ago

aminophen commented 4 years ago

めぼしい変更点:

なお pxeveryshi, pxatbegshi については https://github.com/aminophen/platex-tools/issues/14 ですが,atbegshi が LaTeX カーネルに取り込まれる以上,こちらで検討しても良いものと思います。

aminophen commented 4 years ago

現状です。(このコメントは随時編集します)

pLaTeX カーネル

platex-tools → Done: release "2020-09-27"

gentombow → Done: release "2020-09-25"

pxjahyper → Done: release "2020-10-05"

jlreq

plautopatch → Done: release "2020-09-27"

jsclasses → Done: release "2020-10-05"

aminophen commented 4 years ago

\AtBeginDvi について:plcore.dtx が ltshipout.dtx の定義を上書きしています。

latex-dev の定義

$ latex-dev \\relax
This is pdfTeX, Version 3.14159265-2.6-1.40.21 (TeX Live 2021/dev) (preloaded format=latex-dev)
 restricted \write18 enabled.
entering extended mode
LaTeX2e <2020-10-01> pre-release-9 (develop 2020-9-13 branch)
L3 programming layer <2020-09-06> xparse <2020-03-03>
*\show\AtBeginDvi
> \AtBeginDvi=macro:
->\protect \AtBeginDvi  .
<*> \show\AtBeginDvi

? 

*\expandafter\show\csname AtBeginDvi \endcsname
> \AtBeginDvi =\long macro:
->\__shipout_add_firstpage_material:Nn \AtBeginDvi .
<recently read> \AtBeginDvi  

<*> \expandafter\show\csname AtBeginDvi \endcsname

? x
No pages of output.
Transcript written on texput.log.

platex-dev の定義

$ platex-dev \\relax
This is e-pTeX, Version 3.14159265-p3.8.3-191112-2.6 (utf8.euc) (TeX Live 2021/dev) (preloaded format=platex-dev)
 restricted \write18 enabled.
entering extended mode
pLaTeX2e <2020-04-12> (based on LaTeX2e <2020-10-01> pre-release-9 (develop 202
0-9-13 branch))
L3 programming layer <2020-09-06> xparse <2020-03-03>
*\show\AtBeginDvi
> \AtBeginDvi=macro:
->\protect \AtBeginDvi  .
<*> \show\AtBeginDvi

? 

*\expandafter\show\csname AtBeginDvi \endcsname
> \AtBeginDvi =\long macro:
#1->\global \setbox \@begindvibox \vbox {\yoko \unvbox \@begindvibox #1}.
<recently read> \AtBeginDvi  

<*> \expandafter\show\csname AtBeginDvi \endcsname

? x
No pages of output.
Transcript written on texput.log.

これはまずいような気がしますがよくわかりません。

h-kitagawa commented 4 years ago

\AtBeginDvi をパッチしていた理由としては,従来の LaTeX の実装では \unvbox→再\vbox を行っていたために,pTeX による Incompatible direction エラーの発生を防止するためだったと記憶しています(TeX forum 中の元記事).

一方,LaTeX2e 2020-10-01 pre-release 9 では \AtBeginDvi{...} は(robust 化されていることを除けば)\AddToHook{shipout/firstpage}{...} と等価で,フックにどんどんコードを追加していくだけで,「実行」されるのは最初のページの shipout 時になります. そのため,LaTeX2e 2020-10-01 以降では \AtBeginDvi の再定義は不要ではないかと思っています.

aminophen commented 4 years ago

LaTeX2e 2020-10-01 以降では \AtBeginDvi の再定義は不要ではないかと思っています.

試しに定義を消してみるとエラーが出ました(tests/atbegindvi_tate.tex):

! Incompatible direction list can't be unboxed.
<argument> ...p_box \vbox_unpack:N \l_shipout_box 
                                                  \kern \c_zero_dim 
l.8 \end{document}

?

(安直に \AtBeginDvi の再定義を消してみたのが 'atbegindvi' ブランチ)

\AtBeginDvi ではなく別の場所に「\yoko を追加すべき場所」があるのでは?

h-kitagawa commented 4 years ago

\AtBeginDvi ではなく別の場所に「\yoko を追加すべき場所」があるのでは?

LaTeX2e 2020-10-01 pre ですと

 \@outputpage
 -> \shipout (macro)
 -> \__shipout_execute_cont:
 -> \__shipout_execute_firstpage_hook:
 -> \__shipout_add_background_box:n
 -> \vbox_unpack:N \l_shipout_box(ここでエラー)

となっているので,pxatbegshi.sty の内容を platex カーネルに入れてしまえばいいのかなあ,と考えています.

aminophen commented 4 years ago

pxatbegshi.sty の内容を platex カーネルに入れてしまえばいいのかなあ

aminophen/platex-tools#16 とも関連して,やはり aminophen/platex-tools#14 の Ulrike の提案のように「LaTeX カーネル側に \yoko を追加しやすいプレースホルダを用意してもらう」+「pLaTeX カーネルでそのプレースホルダに \yoko を入れる」という方向が実装的にもメンテナンス上も best だと思うに至りました。

aminophen commented 3 years ago

shipout 関連(\AtBeginDvi を含む)については https://github.com/texjporg/tests-shipout/issues/1 へ集約します。


こちらの issue では,以下 pLaTeX の shipout 関連以外を扱うことにします。

フォント関連 (plfonts.dtx):新命令 \IfFontSeriesContextTF

フォント関連 (plfonts.dtx):フックの名称変更など

aminophen commented 3 years ago

フォント関連 (plfonts.dtx):フックの名称変更など

3332ed9 で \expand@font@defaults, \normalfont, \bfseries, \mdseries については新しい \AddToHook を使うようにしてみました。まだ全く動作確認していませんが,名前が変わっただけなのでミスしていなければ大丈夫なはず…。jsclasses の方は未着手です。

それから,plfonts.dtx の中に,私が4月頃に書いたメモがありました。どうやら latex3/latex2e@3503b28 の時点で書いたらしい(すっかり忘れていた)のですが,その後状況が変わったかもしれず,追跡できていません。

% ^^A  [TODO] See changes in ltfssini.dtx:
% ^^A    * 2020/04/13 v3.1n (latex3/latex2e@3503b28)
% ^^A  ===== v3.1n =====
% ^^A  ltfssini.dtx 2020/04/13 v3.1n で |latex3/latex2e#315| 対策が入ったが、
% ^^A  従来は |\init@series@setup| から呼び出される
% ^^A    |\expand@font@defaults| が |\famdef@ult| を設定していた。
% ^^A  新版は |\init@series@setup| からもはや
% ^^A    |\expand@font@defaults| は呼び出さず、代わりに
% ^^A    |\init@series@setup| で一度 |\reset@font| を実行し、
% ^^A    それに基づいて |\seriesdefault| 設定する。
% ^^A  =================
% ^^A  現時点では安定版 latex に従っておくが、本来は
% ^^A    |\init@series@setup| が |\reset@font| を実行するかどうか
% ^^A  を判定して |\expand@font@defaults| 及び |\init@series@setup| への
% ^^A  フック内容を調整すべきである。
aminophen commented 3 years ago

plfonts.dtx の中に,私が4月頃に書いたメモ

コード上は latex3/latex2e#315 に追随したつもりですが,テストはまだです。

diff --git a/platex.dtx b/platex.dtx
index 2f94194..b1dd3b3 100644
--- a/platex.dtx
+++ b/platex.dtx
@@ -529,14 +531,18 @@
 % \TeX{}の入力ファイル検索パスに設定されている
 % ディレクトリに\file{pldefs.cfg}ファイルがある場合は、
 % そのファイルを使います。
+% 読み込み後にコードが実行されるかもしれません。
 % \changes{v1.0s}{2017/12/05}{デフォルト設定ファイルの読み込みを
 %    \file{plcore.ltx}から\file{platex.ltx}へ移動}
+% \changes{v1.1b}{2020/09/28}{defs読込後にフック追加}
 %\else
 % Load font-related default settings, \file{pldefs.ltx}.
 % If a file \file{pldefs.cfg} is found, then that file will be
 % used instead.
+% Some code may be executed after loading.
 % \changes{v1.0s}{2017/12/05}{Moved loading default settings
 %    from \file{plcore.ltx} to \file{platex.ltx}}
+% \changes{v1.1b}{2020/09/28}{Add hook after loading defs}
 %\fi
 %    \begin{macrocode}
 \InputIfFileExists{pldefs.cfg}
@@ -544,6 +550,7 @@
                      * Local config file pldefs.cfg used^^J%
                      *************************************}}%
            {\input{pldefs.ltx}}
+\ifx\code@after@pldefs\@undefined\else \code@after@pldefs \fi
 %    \end{macrocode}
 %
 %\ifJAPANESE
diff --git a/plfonts.dtx b/plfonts.dtx
index 5940052..74059d1 100644
--- a/plfonts.dtx
+++ b/plfonts.dtx
@@ -3111,21 +3113,15 @@
 %}
 %    \end{macrocode}
 % p\LaTeX{}では、以下のコードを末尾に追加します。
-% ^^A  [TODO] See changes in ltfssini.dtx:
-% ^^A    * 2020/04/13 v3.1n (latex3/latex2e@3503b28)
-% ^^A  ===== v3.1n =====
-% ^^A  ltfssini.dtx 2020/04/13 v3.1n で |latex3/latex2e#315| 対策が入ったが、
+% \file{ltfssini.dtx} 2020/04/13 v3.1nで|latex3/latex2e#315|対策が
+% 入りましたので、その前後で|\expand@font@defaults|および
+% |\init@series@setup|への追加内容が変わります。
 % ^^A  従来は |\init@series@setup| から呼び出される
 % ^^A    |\expand@font@defaults| が |\famdef@ult| を設定していた。
 % ^^A  新版は |\init@series@setup| からもはや
 % ^^A    |\expand@font@defaults| は呼び出さず、代わりに
 % ^^A    |\init@series@setup| で一度 |\reset@font| を実行し、
 % ^^A    それに基づいて |\seriesdefault| を設定する。
-% ^^A  =================
-% ^^A  現時点では安定版 latex に従っておくが、本来は
-% ^^A    |\init@series@setup| が |\reset@font| を実行するかどうか
-% ^^A  を判定して |\expand@font@defaults| 及び |\init@series@setup| への
-% ^^A  フック内容を調整すべきである。
 % \changes{v1.7h}{2020/09/28}{New hook management interface
 %    (sync with ltfssini.dtx 2020/08/21 v3.2b)}
 %    \begin{macrocode}
@@ -3140,7 +3136,7 @@
 \AddToHook{expand@font@defaults}{%
   \edef\mcdef@ult{\mcdefault}%
   \edef\gtdef@ult{\gtdefault}%
-  \edef\kanjidef@ult{\kanjifamilydefault}%
+ %\edef\kanjidef@ult{\kanjifamilydefault}% !! sync with 2020/04/13 v3.1n
 }
 \fi % --- for 2020-10-01 END
 \fi %</2020-02-02|2020-10-01>
@@ -3407,23 +3403,32 @@
 %
 % \begin{macro}{\init@series@setup}
 % |\begin{document}|で実行される初期化です。
-% まず、オリジナルの\LaTeX{}の定義を載せておきます。
+% まず、オリジナルの\LaTeX{}の定義(ltfssini.dtx 2020/04/13 v3.1n以降)を
+% 載せておきます。
 %    \begin{macrocode}
 %\def\init@series@setup{%
 %  \ifx\bfseries@rm@kernel\bfseries@rm
-%    \expandafter\in@\expandafter{\rmdefault}{cmr,cmss,cmtt,lcmss,lcmtt,lmr,lmss,lmtt}%
+%    \expandafter\in@\expandafter{\rmdefault}%
+%                    {cmr,cmss,cmtt,lcmss,lcmtt,lmr,lmss,lmtt}%
 %    \ifin@ \else \def\bfseries@rm{b}\fi\fi
 %  \ifx\bfseries@sf@kernel\bfseries@sf
-%    \expandafter\in@\expandafter{\sfdefault}{cmr,cmss,cmtt,lcmss,lcmtt,lmr,lmss,lmtt}%
+%    \expandafter\in@\expandafter{\sfdefault}%
+%                    {cmr,cmss,cmtt,lcmss,lcmtt,lmr,lmss,lmtt}%
 %    \ifin@ \else \def\bfseries@sf{b}\fi\fi
 %  \ifx\bfseries@tt@kernel\bfseries@tt
-%    \expandafter\in@\expandafter{\ttdefault}{cmr,cmss,cmtt,lcmss,lcmtt,lmr,lmss,lmtt}%
+%    \expandafter\in@\expandafter{\ttdefault}%
+%                    {cmr,cmss,cmtt,lcmss,lcmtt,lmr,lmss,lmtt}%
 %    \ifin@ \else \def\bfseries@tt{b}\fi\fi
-%  \expand@font@defaults
-%  \ifx\famdef@ult\rmdef@ult      \rmfamily
-%  \else\ifx\famdef@ult\sfdef@ult \sffamily
-%  \else\ifx\famdef@ult\ttdef@ult \ttfamily
-%  \fi\fi\fi
+% %\expand@font@defaults  % !! deleted in 2020/04/13 v3.1n BEGIN
+% %\ifx\famdef@ult\rmdef@ult      \rmfamily           % !! CONT
+% %\else\ifx\famdef@ult\sfdef@ult \sffamily           % !! CONT
+% %\else\ifx\famdef@ult\ttdef@ult \ttfamily           % !! CONT
+% %\fi\fi\fi              % !! deleted in 2020/04/13 v3.1n END
+%  \reset@font     % !! added in 2020/04/13 v3.1n BEGIN
+%  \ifx\seriesdefault\seriesdefault@kernel   % !! CONT
+%    \mdseries                               % !! CONT
+%    \let\seriesdefault\f@series             % !! CONT
+%  \fi             % !! added in 2020/04/13 v3.1n END
 %}%
 %    \end{macrocode}
 % ここからがp\LaTeX{}による追加コードです。
@@ -3434,16 +3439,51 @@
 % \end{itemize}
 % になることに注意します。
 % \changes{v1.6w}{2020/02/03}{巻き戻しのバグ修正}
+% \changes{v1.7h}{2020/09/28}{Handling \cs{seriesdefault} changes
+%    (sync with ltfssini.dtx 2020/04/13 v3.1n)}
 %    \begin{macrocode}
-\expandafter\ifx\csname init@series@setup\endcsname\relax\else  % 2020-02-02
+\expandafter\ifx\csname init@series@setup\endcsname\relax
+\else   %<*2020-02-02|2020-10-01>
+\ifx\AddToHook\@undefined % --- for 2020-02-02 BEGIN
 \g@addto@macro\init@series@setup{%
   \ifx\kanjidef@ult\mcdef@ult      \mcfamily
   \else\ifx\kanjidef@ult\gtdef@ult \gtfamily
   \fi\fi
 }%
-\fi
+\else % --- for 2020-02-02 END & for 2020-10-01 BEGIN
+\g@addto@macro\init@series@setup{%
+  % !! sync with 2020/04/13 v3.1n BEGIN
+  \ifx\kanjiseriesdefault\kanjiseriesdefault@kernel
+    \mdseries
+    \let\kanjiseriesdefault\k@series
+  \fi
+  % !! sync with 2020/04/13 v3.1n END
+}%
+\fi % --- for 2020-10-01 END
+\fi     %</2020-02-02|2020-10-01>
+%    \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\kanjiseriesdefault}
+% \begin{macro}{\kanjiseriesdefault@kernel}
+% |\kanjiseriesdefault|が\file{pldefs.ltx}または\file{pldefs.cfg}で
+% 定義された後に、その末尾に|\@empty|を追加します。
+% これは展開時に消滅しますが、文書のプリアンブルで別の値に
+% 変更されたかどうか検知できるようになります。
+% \changes{v1.7h}{2020/09/28}{Handling \cs{seriesdefault} changes
+%    (sync with ltfssini.dtx 2020/04/13 v3.1n)}
+%    \begin{macrocode}
+\ifx\AddToHook\@undefined
+\else % --- for LaTeX2e 2020-10-01 or later BEGIN
+\def\code@after@pldefs{%
+\expandafter\def\expandafter\kanjiseriesdefault
+  \expandafter{\kanjiseriesdefault\@empty}
+\let\kanjiseriesdefault@kernel\kanjiseriesdefault}
+\fi   % --- for LaTeX2e 2020-10-01 or later END
 %    \end{macrocode}
 % \end{macro}
+% \end{macro}
 %
 %
 % \begin{macro}{\mcfamily}
aminophen commented 3 years ago

私自身ほぼテストできていませんが,最新の master (4f0ba6c) を入手して「latex-dev + 新 platex = platex-dev」をテストしてくださる方がいれば大変助かります。

なお「latex + 新 platex = platex」の状態については,\AddToHook を検知する新旧判定コードを組み込んでありますので,新しいコードは全く無関係=すなわち従来通りの動作になるはずです(例外は pLaTeX 独自修正である #78 及び texjporg/ptex-base#8 がある)。要するに,10月1日以降 LaTeX が新しくなって問題が起きた場合は「LaTeX だけ tlmgr restore で復旧して fmtutil-sys したら大丈夫(pLaTeX の復旧は不要)」となっているはずです。この状態ならば,最低限のテストで早急にリリースする方向でも良いと考えています。

aminophen commented 3 years ago

いったん区切りがついたので platex 2020-09-30 として CTAN に登録申請しました。

冒頭のコメントの進捗状況を一度ここに記録します。


現状です。(このコメントは随時編集します)

pLaTeX カーネル

platex-tools → Done: release "2020-09-27"

gentombow → Done: release "2020-09-25"

pxjahyper → Done: release "2020-09-27"

jlreq

plautopatch → Done: release "2020-09-27"

jsclasses


よって,既知の残りの課題は以下となりました:

いずれも直近で致命的ではないと思いますが,追って対応しましょう。

aminophen commented 3 years ago

既知の残りの課題は以下となりました:

aminophen commented 3 years ago

既知の残りの課題は以下となりました:


Watching: https://github.com/latex3/latex2e/issues/444#issuecomment-737134906 (Proposed fix of \fontseries)

aminophen commented 3 years ago

latex3/latex2e#444 への対応は #96 へ。