Closed aminophen closed 3 years ago
現状です。(このコメントは随時編集します)
\AtBeginDvi
の定義変更,atbegshi / everyshi に相当する機能のカーネル化 → 完了
\IfFontSeriesContextTF
→ [TODO 2020-09-30]
\expand@font@defaults
, \normalfont
, \bfseries
, \mdseries
)。\@picture
→ plext.dtx の \@@picture
を更新。(2020/10/07)\@imakepicbox
→ plext.dtx の \@iimakePbox
の更新は不要と判断。\addcontentsline
→ jclasses.dtx を更新。\@begindocumenthook
のパッチが怪しい)
\rmfamily
, \sffamily
, \ttfamily
)
\AtBeginDvi
の引数の展開タイミングの変化 → texjporg/jsclasses@f401517 で修正。\AtBeginDvi
について:plcore.dtx が ltshipout.dtx の定義を上書きしています。
$ 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 \\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.
これはまずいような気がしますがよくわかりません。
\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
の再定義は不要ではないかと思っています.
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
を追加すべき場所」があるのでは?
\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 カーネルに入れてしまえばいいのかなあ,と考えています.
pxatbegshi.sty の内容を platex カーネルに入れてしまえばいいのかなあ
aminophen/platex-tools#16 とも関連して,やはり aminophen/platex-tools#14 の Ulrike の提案のように「LaTeX カーネル側に \yoko を追加しやすいプレースホルダを用意してもらう」+「pLaTeX カーネルでそのプレースホルダに \yoko を入れる」という方向が実装的にもメンテナンス上も best だと思うに至りました。
shipout 関連(\AtBeginDvi を含む)については https://github.com/texjporg/tests-shipout/issues/1 へ集約します。
こちらの issue では,以下 pLaTeX の shipout 関連以外を扱うことにします。
\expand@font@defaults
\@expandfontdefaultshook
\UseHook{expand@font@defaults}
\normalfont
:
\@defaultfamilyhook
\UseHook{normalfont}
\bfseries
, \mdseries
\@setbfseriesdefaultshook
, \@setmdseriesdefaultshook
\UseHook{bfseries/defaults}
, \UseHook{bfseries}
, \UseHook{mdseries/defaults}
, \UseHook{mdseries}
\rmfamily
, \sffamily
, \ttfamily
\@rmfamilyhook
, \@sffamilyhook
, \@ttfamilyhook
\UseHook{rmfamily}
, \UseHook{sffamily}
, \UseHook{ttfamily}
フォント関連 (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 フック内容を調整すべきである。
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}
私自身ほぼテストできていませんが,最新の 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 の復旧は不要)」となっているはずです。この状態ならば,最低限のテストで早急にリリースする方向でも良いと考えています。
いったん区切りがついたので platex 2020-09-30 として CTAN に登録申請しました。
冒頭のコメントの進捗状況を一度ここに記録します。
現状です。(このコメントは随時編集します)
\AtBeginDvi
の定義変更,atbegshi / everyshi に相当する機能のカーネル化 → 完了
\IfFontSeriesContextTF
→ [TODO 2020-09-30]
\expand@font@defaults
, \normalfont
, \bfseries
, \mdseries
)。\@picture
→ plext.dtx の \@@picture
を更新すべきか?\@imakepicbox
は plext.dtx の \@iimakePbox
と関係あるのか?\addcontentsline
→ jclasses.dtx を更新すべきか?\@begindocumenthook
のパッチが怪しい)
\rmfamily
, \sffamily
, \ttfamily
) → [TODO 2020-09-30]
\@rmfamilyhook
, \@sffamilyhook
, \@ttfamilyhook
\UseHook{rmfamily}
, \UseHook{sffamily}
, \UseHook{ttfamily}
よって,既知の残りの課題は以下となりました:
\IfFontSeriesContextTF
いずれも直近で致命的ではないと思いますが,追って対応しましょう。
既知の残りの課題は以下となりました:
既知の残りの課題は以下となりました:
Watching: https://github.com/latex3/latex2e/issues/444#issuecomment-737134906 (Proposed fix of \fontseries)
latex3/latex2e#444 への対応は #96 へ。
めぼしい変更点:
なお pxeveryshi, pxatbegshi については https://github.com/aminophen/platex-tools/issues/14 ですが,atbegshi が LaTeX カーネルに取り込まれる以上,こちらで検討しても良いものと思います。