Closed aminophen closed 3 years ago
latex3/latex2e@779ddbe7fcfac0c00b3a2e4d7c2ebe91ac117e68 までを確認して,他に気になったところ:
\@footnotetext
の定義変更\__shipout_execute_cont:
の定義変更先ほど pLaTeX2e <2020-10-01>+2
を CTAN に投稿しました。
としているつもりです。後者の新しいコードには \selectfont ならびに \fontseries, \fontshape の改修が入っているので,かなり大きな変更です。なお \@footnotetext
の定義変更の調査は,まだ“本家”の CTAN latex-dev にも反映されていないため,保留です。
※ 今月末で TL2020 はフリーズになる予定なので,とりあえず「現状の latex-dev 対応したつもりの platex」を出しておきたかった
2点問題と思われるものを見つけました。
shipout/*
フックを回避する \RawShipout
が追加されているのですが、最初のページで異方向のボックスを出力しようとすると ! Incompatible direction list can't be unboxed.
になります。
\documentclass{tarticle}
\begin{document}
\RawShipout\hbox{\yoko ABC}
\end{document}
\__shipout_execute_nohooks_cont:
に対しても \__shipout_execute_cont:
と同様の対処が必要そうです。
新機能の para/*
フックですが、縦組みで使うと para/before
と para/begin
フックが改ページ毎に(二段組みの時は段毎に)余分に実行されてしまうようです。
\documentclass{tarticle}
\usepackage{bxjalipsum}
\newcounter{para}
\AddToHook{para/before}{\stepcounter{para}}
\AddToHook{para/begin}{\hbox to 0pt{\hss\arabic{para}}}
\AddToHook{para/end}{\hbox to 0pt{\roman{para}\hss}}
\AddToHook{para/after}{\typeout{\arabic{para}}}
\begin{document}
\jalipsum{wagahai}
\end{document}
おそらく \@makecol
の以下の箇所で段落が開始されてしまうためだと思います。
https://github.com/texjporg/platex/blob/5db1ffddf3512f57d1b100f66bb1a3b5a9885141/plcore.dtx#L570
対処するには para/*
フックを一時的に無効化する仕組みが必要な気がします。
__shipout_execute_nohooks_cont: に対しても __shipout_execute_cont: と同様の対処が必要そうです。
73a23c2e9e735ecbdaea2dac7ecf7bc5e681003d でやりました.
しかし,LaTeX2e 2021-05-01 では \shipout
と \RawShipout
に共通する処理が \__shipout_execute_main_cont:Nnnn
として切り出されたので,
LuaTeX-ja のコミット のようにこっち(だけ)をパッチしたほうが最終的に楽になりそうな気がします.
% 03/14 07:23 edit: LuaTeX-ja のコミットへの参照を追加
新機能の
para/*
フックですが、縦組みで使うとpara/before
とpara/begin
フックが改ページ毎に(二段組みの時は段毎に)余分に実行されてしまうようです。 ... おそらく\@makecol
の以下の箇所で段落が開始されてしまうためだと思います。https://github.com/texjporg/platex/blob/5db1ffddf3512f57d1b100f66bb1a3b5a9885141/plcore.dtx#L570
対処するには
para/*
フックを一時的に無効化する仕組みが必要な気がします。
こうすると「LaTeX カーネルによって隠されたプリミティブとしての everypar」がいじれるので,これでどうでしょう(強引ですが……).
\iftdir\vbox{\pdfprimitive\everypar{}\hskip\z@}\fi
NFSS 周辺を見直していますが,気づいたことを.
\@shape@roman@kanji
フラグは \delayed@k@adjustment
の中で変更/復帰させたほうが良いように思います (修正案).
また,pLaTeX (, LuaTeX-ja) では \set@safe@kanji@shape
による「和文シェープの存在判定をしてから設定」という処理が加えられていますが,たとえば
\fontshape{it}\fontshape{sl}\selectfont
を実行すると
Kanji font shape `JY1/mc/m/it' undefined, No change`
という info が \selectfont
の位置で it, sl の二回出現するのが気になります.何か良い解決方法はないでしょうか.
全然貢献できていなくてすみません。shipout の件の検討ありがとうございます。
\pdfprimitive\everypar{}
この方法で良いと思います。類似のコードは \@makecol
だけでなく \@vtryfc
にも仕込んでありますので「縦組みのページ補正」を別名マクロに切出しておくと後々メンテナンスしやすいと思いました。
\def\pltx@tate@adjustemptypage{\iftdir\vbox{\pdfprimitive\everypar{}\hskip\z@}\fi}
とか。(その方が \iftdir の数を減らせて LuaTeX-ja とのコード共通化もしやすいですし)
NFSS周辺を見直し
あとで追いかけます…。
リリースは先延ばしで 2021-06-01 になる? https://github.com/latex3/latex2e/commit/e871157472eb0a62471be271f66b3ac6679c10dd
リリースは先延ばしで 2021-06-01 になる?
だとしたらちょっと安心です.なかなか私も手が回らない…….
全然時間(とやる気)がなくて取り組めていませんが…….
\set@safe@kanji@shape
による「和文シェープの存在判定をしてから設定」
添付した kshape.txt(実際には pLaTeX ソースです)をタイプセットすると,
2 回めの \selectfont
において,和文フォント側は
\fontshape{sw}
→現在の和文 (test/m/n) には sw シェープがないのでそのまま\fontseries{b}
→和文は test/b/n に\fontseries{l}
→和文は test/l/n にという変更を受けます.しかし,和文で test/l/sw が定義されていることを考えると「不思議」な結果のように感じてしまいます.
そろそろ本気でなんとかしないと…ということで今日・明日は真面目に考えます。明日夕方の時点で,完成/未完成によらずCTANに出そうと思います(遅かれ早かれ,あと10日で出さざるを得ないので)。
\selectfont
周りが4月にまたコードが変わっているので,最初に立ち戻って確認中…
\% 数か月前の自分,コミットログに
plfonts.dtx: sync with latex2e develop branch as of latex3/latex2e@83f0f81
と書いててエライ! → この時点からの diff を置いておく。
shipout/*
フック及び para/*
フック絡み (plcore.dtx)北川さんに対応いただいたので大丈夫そう。以下にも波及するので,対応が必要。
\@footnotetext
の再定義\@makecol
) → 対応済み (https://github.com/aminophen/platex-tools/commit/48ce7f543a4020689ff62c55a465112f81921d52)\@makecol
) → 対応済み (https://github.com/aminophen/plautopatch/commit/08f375357cfb6428e4615edaa4e33a3a6b536a98)自前パッケージについても要確認。
他にもあれば随時追記していく。
NFSS絡み (plfonts.dtx)
メモ: 99313cfc で本家最新に追随したつもり…だがまだよくわかってない。
それと @h-kitagawa さんの上のほうのコメント2件
はまだ確認できてない,要調査。
とりあえず無理やり現状のものを pLaTeX2e 2021-06-01 として出しました。さて:
\@shape@roman@kanji
フラグは\delayed@k@adjustment
の中で変更/復帰させたほうが良い
確かに。
\set@safe@kanji@shape
による「和文シェープの存在判定をしてから設定」[中略] 和文で test/l/sw が定義されていることを考えると「不思議」な結果のように感じてしまいます.
これも同意です。治すには「和文シェープの存在判定」を \delayed@k@adjustment
のリストが定まった最後に実行できれば良いような気がしますが…頭が回らないのでコードを考えるのは後日にします。
忘れないようにメモ → forum:3124#p18720: 和文シェープの警告が増えた件
さらにもう一点気づいたのですが
\RequirePackage[2020/10/01]{platexrelease}
\stop
これでエラーが出ますね。(2020/02/02 以前に巻戻すのは OK)
platexrelease.sty:3024:
! LaTeX3 Error: Control sequence \__platex_original_shipout_execute_cont:
(LaTeX3) already defined.
\RequirePackage[2020/10/01]{platexrelease}
でエラー
c0098ad で platexrelease 側は直しましたが https://github.com/latex3/latex2e/issues/577 のためまだ動かない…。
→ 追記:LaTeX 側のバグについては workaround を教えてもらったので,一時的に plvers.dtx に導入 (c888300)。後日 LaTeX2e 本体の修正がリリースされたら,そのコードは削除する予定。
forum:3124#p18720: 和文シェープの警告が増えた件 和文で test/l/sw が定義されていることを考えると「不思議」な結果のように感じてしまいます.
両者とも,以前ご指摘のあった「\@shape@roman@kanji
フラグは \delayed@k@adjustment
の中で変更/復帰」によって修正できたように思います (45ae7fd)。
@h-kitagawa さんのブランチ (https://github.com/h-kitagawa/platex/commit/26bcadb8fe63869b5e4a56a7d68c370d3f10dc2d) にあるテストケースの結果が
pLaTeX2e <2020-10-01>+2 on LaTeX2e <2020-10-01>+4
pLaTeX2e <2021-06-01>+1 on LaTeX2e <2021-06-01>
で違う件についても,理由を調べていますがよくわかりません…。
%#!platex
\documentclass{jarticle}
\makeatletter
\DeclareKanjiFamily{JY1}{hoge}{}
\DeclareFontShape {JY1}{hoge}{m} {n}{<-> s*nmlminr-h}{}
\DeclareFontShape {JY1}{hoge}{ub}{n}{<-> s*nmlminb-h}{}
\DeclareKanjiFamily{JY1}{fuga}{}
\DeclareFontShape {JY1}{fuga}{m} {n}{<-> s*nmlgothr-h}{}
\DeclareFontShape {JY1}{fuga}{sb}{n}{<-> s*nmlgothb-h}{}
\def\mcdefault{hoge}\def\gtdefault{fuga}
\def\bfseries@mc{ub}\def\bfseries@gt{sb}
\def\test#1{%
\par\begingroup#1%
\xdef\status@af{\f@family/\f@series/\f@shape}%
\xdef\status@jf{\k@family/\k@series/\k@shape}\endgroup%
(\texttt{\status@af}, \texttt{\status@jf})
}
\begin{document}
\test{}
% => hoge/m/n
\test{\kanjiseries{ub}\selectfont\gtfamily}
% => fuga/sb/n
\test{\kanjiseriesforce{ub}\selectfont\gtfamily}
% => changed!
% * 2020-10-01: fuga/ub/n (fallback -> fuga/m/n)
% * 2021-06-01: fuga/sb/n
\test{\romanseries{l}\kanjiseries{ub}\selectfont\gtfamily}
% => fuga/sb/n
\test{\romanseriesforce{l}\kanjiseries{ub}\selectfont\gtfamily}
% => fuga/sb/n
\end{document}
上記3つ目の changed! の所が変化します。なお,この変化は本家 LaTeX2e (pdflatex) でも類似です。
%#!pdflatex
\documentclass{article}
\makeatletter
\DeclareFontFamily{OT1}{hoge}{}
\DeclareFontShape {OT1}{hoge}{m} {n}{<-> s*cmff10}{}
\DeclareFontShape {OT1}{hoge}{ub}{n}{<-> s*cmsl10}{}
\DeclareFontFamily{OT1}{fuga}{}
\DeclareFontShape {OT1}{fuga}{m} {n}{<-> s*cmbxti10}{}
\DeclareFontShape {OT1}{fuga}{sb}{n}{<-> s*cmbxsl10}{}
\def\rmdefault{hoge}\def\sfdefault{fuga}
\def\bfseries@rm{ub}\def\bfseries@sf{sb}
\def\test#1{%
\par\begingroup#1%
\xdef\status@af{\f@family/\f@series/\f@shape}\endgroup%
(\texttt{\status@af})
}
\begin{document}
\test{}
% => hoge/m/n
\test{\fontseries{ub}\selectfont\sffamily}
% => fuga/sb/n
\test{\fontseriesforce{ub}\selectfont\sffamily}
% => changed!
% * 2020-10-01: fuga/ub/n (fallback -> fuga/m/n)
% * 2021-06-01: fuga/sb/n
\end{document}
結果的に sb になる原理はよくわかっていませんが,少なくともこの変化は「本家 LaTeX と互換である」と言えるので,問題ないとみなすことにします。(→ latex3/latex2e#579 で確認ずみ)
https://oku.edu.mie-u.ac.jp/tex/mod/forum/discuss.php?d=3146 で指摘された \userelfont での従属欧文のシェープ・シリーズ更新が効かない件について https://github.com/texjporg/platex/commit/04c437e5d3c9ada79d4d1c7a989061243c7847aa で対処しました。
\delayed@k@adjustment
の処理\rel@///(|all)
= \romanseries/\romanshape で更新\delayed@f@adjustment
の処理の順にすることでどうにか。合わせて https://github.com/texjporg/platex/commit/65a11dffbccdb269fb1b3b96d913952ca2759571 で forced@series
フラグを roman/kanji で分けてみました。分けない場合に何が起こるのかはわかりませんが,原理的には分けておかないといけないように感じたため。
94 から移行。
latex3/latex2e#444 への対応で,次期リリース LaTeX2e 2021-05-01 では \selectfont の定義が変わります。それと同時に,従来の everysel パッケージの機能もカーネルに取り込まれます。
とりあえず fa423e4 で作業を始めてみました。テストはまだです。