Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

LaTeX2e 2020-10-01 対策 #94

Closed
aminophen opened this issue Aug 3, 2020 · 14 comments
Closed

LaTeX2e 2020-10-01 対策 #94

aminophen opened this issue Aug 3, 2020 · 14 comments

Comments

@aminophen
Copy link
Member

aminophen commented Aug 3, 2020

めぼしい変更点:

  • ltfssini.dtx (\IfFontSeriesContextTF)
  • lthooks.dtx (\AtBeginDocument, . . .)
  • ltshipout.dtx (\AtBeginDvi, pxeveryshi, pxatbegshi, . . .)
  • ltfilehook.dtx (plautopatch, . . .)

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

@aminophen
Copy link
Member Author

aminophen commented Sep 13, 2020

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

pLaTeX カーネル

  • \AtBeginDvi の定義変更,atbegshi / everyshi に相当する機能のカーネル化 → 完了
  • フォント関連コマンド(1):新命令 \IfFontSeriesContextTF[TODO 2020-09-30]
    • pLaTeX2e でも何かコードを書く必要があるかどうか???
  • フォント関連コマンド(2):フックの名称変更など → 完了
  • picture 環境コマンド(特に plext.sty の中身) → 完了
    • [Update] ltpictur.dtx の \@picture → plext.dtx の \@@picture を更新。(2020/10/07)
    • ltboxes.dtx の \@imakepicbox → plext.dtx の \@iimakePbox の更新は不要と判断。
  • その他 → 完了 (ef7eb21)
    • ltsect.dtx 2020/07/27 v1.1e の \addcontentsline → jclasses.dtx を更新。

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

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

  • gentombow:上記 pxatbegshi の対策により OK に見える。
  • bounddvi:エラーは無いが,調査は必要。(特に \@begindocumenthook のパッチが怪しい)

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

jlreq

  • jlreq:本体ではなく filehook パッケージが未対応であることに由来するエラー発生。
    • [Update] filehook 2020/09/27 v0.8 でエラーなく通る模様。

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

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

@aminophen
Copy link
Member Author

\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
Copy link
Member

h-kitagawa commented Sep 13, 2020

\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 added a commit to aminophen/plautopatch that referenced this issue Sep 13, 2020
@aminophen
Copy link
Member Author

aminophen commented Sep 13, 2020

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
Copy link
Member

\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
Copy link
Member Author

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

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

@aminophen
Copy link
Member Author

aminophen commented Sep 22, 2020

shipout 関連(\AtBeginDvi を含む)については texjporg/tests-shipout#1 へ集約します。


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

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

  • pLaTeX2e でも何かコードを書く必要があるかどうか???

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

  • \expand@font@defaults
    • old: \@expandfontdefaultshook
    • new: \UseHook{expand@font@defaults}
  • \normalfont:
    • old: \@defaultfamilyhook
    • new: \UseHook{normalfont}
  • \bfseries, \mdseries
    • old: \@setbfseriesdefaultshook, \@setmdseriesdefaultshook
    • new: \UseHook{bfseries/defaults}, \UseHook{bfseries}, \UseHook{mdseries/defaults}, \UseHook{mdseries}
  • (only for jsclasses) \rmfamily, \sffamily, \ttfamily
    • old: \@rmfamilyhook, \@sffamilyhook, \@ttfamilyhook
    • new: \UseHook{rmfamily}, \UseHook{sffamily}, \UseHook{ttfamily}

@aminophen
Copy link
Member Author

フォント関連 (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
Copy link
Member Author

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

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

  • \expand@font@defaults 及び \init@series@setup の定義変更です。
  • さらに \kanjiseriesdefault を (u)pldefs.ltx の読込後に一時保存する必要があるため,(u)platex.ltx の該当箇所にプレースホルダを新設して実現したつもりです。
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
Copy link
Member Author

aminophen commented Sep 29, 2020

私自身ほぼテストできていませんが,最新の 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
Copy link
Member Author

aminophen commented Sep 30, 2020

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

  • texjporg 名義で4つのパッケージを上げました:ptex-base, uptex-base, platex, uplatex

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


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

pLaTeX カーネル

  • \AtBeginDvi の定義変更,atbegshi / everyshi に相当する機能のカーネル化 → 完了
  • フォント関連コマンド(1):新命令 \IfFontSeriesContextTF[TODO 2020-09-30]
    • pLaTeX2e でも何かコードを書く必要があるかどうか???
  • フォント関連コマンド(2):フックの名称変更など → 完了
  • picture 環境コマンド(特に plext.sty の中身) → [TODO 2020-09-30]
    • ltpictur.dtx の \@picture → plext.dtx の \@@picture を更新すべきか?
    • ltboxes.dtx の \@imakepicbox は plext.dtx の \@iimakePbox と関係あるのか?
  • その他 → 完了 (ef7eb21)
    • ltsect.dtx 2020/07/27 v1.1e の \addcontentsline → jclasses.dtx を更新すべきか?

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

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

  • gentombow:上記 pxatbegshi の対策により OK に見える。
  • bounddvi:エラーは無いが,調査は必要。(特に \@begindocumenthook のパッチが怪しい)

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

jlreq

  • jlreq:本体ではなく filehook パッケージが未対応であることに由来するエラー発生。
    • [Update] filehook 2020/09/27 v0.8 でエラーなく通る模様。

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

jsclasses

  • jsclasses:フックの名称変更など (\rmfamily, \sffamily, \ttfamily) → [TODO 2020-09-30]
    • old: \@rmfamilyhook, \@sffamilyhook, \@ttfamilyhook
    • new: \UseHook{rmfamily}, \UseHook{sffamily}, \UseHook{ttfamily}

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

  • pLaTeX カーネル:新命令 \IfFontSeriesContextTF
  • plext パッケージ:picture 環境コマンド
  • jsclasses:フックの名称変更など

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

@aminophen
Copy link
Member Author

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

  • plext パッケージ:picture 環境コマンド → 完了 (platex 2020-10-07)
  • jsclasses:フックの名称変更など → 完了 (jsclasses 2020-10-05)

@aminophen
Copy link
Member Author

aminophen commented Dec 2, 2020

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

  • pLaTeX カーネル:新命令 \IfFontSeriesContextTF → まだ → おそらく不要と思われる。

Watching: latex3/latex2e#444 (comment) (Proposed fix of \fontseries)

@aminophen aminophen changed the title LaTeX2e 2020-10-01 対策 LaTeX2e 2020-10-01 対策 → LaTeX2e 2021-05-01 対策 Jan 10, 2021
@aminophen
Copy link
Member Author

aminophen commented Jan 10, 2021

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

@aminophen aminophen changed the title LaTeX2e 2020-10-01 対策 → LaTeX2e 2021-05-01 対策 LaTeX2e 2020-10-01 対策 Jan 10, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants