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 2021-06-01 対策 #96

Closed
aminophen opened this issue Jan 10, 2021 · 19 comments
Closed

LaTeX2e 2021-06-01 対策 #96

aminophen opened this issue Jan 10, 2021 · 19 comments

Comments

@aminophen
Copy link
Member

#94 から移行。

latex3/latex2e#444 への対応で,次期リリース LaTeX2e 2021-05-01 では \selectfont の定義が変わります。それと同時に,従来の everysel パッケージの機能もカーネルに取り込まれます。

とりあえず fa423e4 で作業を始めてみました。テストはまだです。

@aminophen
Copy link
Member Author

latex3/latex2e@779ddbe までを確認して,他に気になったところ:

  • ltfloat.dtx 2021/02/10 v1.2e: \@footnotetext の定義変更
  • ltshipout.dtx 2021/01/25 v1.0i: \__shipout_execute_cont: の定義変更

@aminophen
Copy link
Member Author

先ほど pLaTeX2e <2020-10-01>+2 を CTAN に投稿しました。

  • LaTeX2e 2020-10-01 patch level 4 の上でフォーマット作成した場合:従来のコードのまま
  • LaTeX2e 2021-05-01 pre-release-1 の上でフォーマット作成した場合:新しいコードが使われる

としているつもりです。後者の新しいコードには \selectfont ならびに \fontseries, \fontshape の改修が入っているので,かなり大きな変更です。なお \@footnotetext の定義変更の調査は,まだ“本家”の CTAN latex-dev にも反映されていないため,保留です。

※ 今月末で TL2020 はフリーズになる予定なので,とりあえず「現状の latex-dev 対応したつもりの platex」を出しておきたかった

@h20y6m
Copy link
Contributor

h20y6m commented Mar 13, 2021

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/beforepara/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 の以下の箇所で段落が開始されてしまうためだと思います。

\iftdir\vbox{\hskip\z@}\fi

対処するには para/* フックを一時的に無効化する仕組みが必要な気がします。

@h-kitagawa
Copy link
Member

h-kitagawa commented Mar 13, 2021

__shipout_execute_nohooks_cont: に対しても __shipout_execute_cont: と同様の対処が必要そうです。

73a23c2 でやりました.
しかし,LaTeX2e 2021-05-01 では \shipout\RawShipout に共通する処理が \__shipout_execute_main_cont:Nnnn として切り出されたので,
LuaTeX-ja のコミット のようにこっち(だけ)をパッチしたほうが最終的に楽になりそうな気がします.

% 03/14 07:23 edit: LuaTeX-ja のコミットへの参照を追加

@h-kitagawa
Copy link
Member

新機能の para/* フックですが、縦組みで使うと para/beforepara/begin フックが改ページ毎に(二段組みの時は段毎に)余分に実行されてしまうようです。
...
おそらく \@makecol の以下の箇所で段落が開始されてしまうためだと思います。

\iftdir\vbox{\hskip\z@}\fi

対処するには para/* フックを一時的に無効化する仕組みが必要な気がします。

こうすると「LaTeX カーネルによって隠されたプリミティブとしての everypar」がいじれるので,これでどうでしょう(強引ですが……).

\iftdir\vbox{\pdfprimitive\everypar{}\hskip\z@}\fi

@h-kitagawa
Copy link
Member

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 の二回出現するのが気になります.何か良い解決方法はないでしょうか.

@aminophen
Copy link
Member Author

aminophen commented Mar 25, 2021

全然貢献できていなくてすみません。shipout の件の検討ありがとうございます。

\pdfprimitive\everypar{}

この方法で良いと思います。類似のコードは \@makecol だけでなく \@vtryfc にも仕込んでありますので「縦組みのページ補正」を別名マクロに切出しておくと後々メンテナンスしやすいと思いました。

\def\pltx@tate@adjustemptypage{\iftdir\vbox{\pdfprimitive\everypar{}\hskip\z@}\fi}

とか。(その方が \iftdir の数を減らせて LuaTeX-ja とのコード共通化もしやすいですし)

NFSS周辺を見直し

あとで追いかけます…。

@aminophen
Copy link
Member Author

リリースは先延ばしで 2021-06-01 になる?
latex3/latex2e@e871157

@h-kitagawa
Copy link
Member

リリースは先延ばしで 2021-06-01 になる?

だとしたらちょっと安心です.なかなか私も手が回らない…….

@h-kitagawa
Copy link
Member

全然時間(とやる気)がなくて取り組めていませんが…….

\set@safe@kanji@shape による「和文シェープの存在判定をしてから設定」

添付した kshape.txt(実際には pLaTeX ソースです)をタイプセットすると,
2 回めの \selectfont において,和文フォント側は

  1. \fontshape{sw} →現在の和文 (test/m/n) には sw シェープがないのでそのまま
  2. \fontseries{b} →和文は test/b/n に
  3. \fontseries{l} →和文は test/l/n に

という変更を受けます.しかし,和文で test/l/sw が定義されていることを考えると「不思議」な結果のように感じてしまいます.

@aminophen
Copy link
Member Author

そろそろ本気でなんとかしないと…ということで今日・明日は真面目に考えます。明日夕方の時点で,完成/未完成によらずCTANに出そうと思います(遅かれ早かれ,あと10日で出さざるを得ないので)。

@aminophen
Copy link
Member Author

aminophen commented May 23, 2021

作業メモ

NFSS 絡み (plfonts.dtx)

\selectfont 周りが4月にまたコードが変わっているので,最初に立ち戻って確認中…

% 数か月前の自分,コミットログ

plfonts.dtx: sync with latex2e develop branch as of latex3/latex2e@83f0f81

と書いててエライ! → この時点からの diff を置いておく

shipout/* フック及び para/* フック絡み (plcore.dtx)

北川さんに対応いただいたので大丈夫そう。以下にも波及するので,対応が必要。

その他

自前パッケージについても要確認。

  • mathfam256.sty: ltfssdcl.dtx の \expandafter 増量 (2020/03/19 v3.0v → 2021/02/15 v3.0w)

他にもあれば随時追記していく。

@aminophen
Copy link
Member Author

NFSS絡み (plfonts.dtx)

メモ: 99313cf で本家最新に追随したつもり…だがまだよくわかってない。

それと @h-kitagawa さんの上のほうのコメント2件

はまだ確認できてない,要調査。

@aminophen
Copy link
Member Author

aminophen commented May 31, 2021

とりあえず無理やり現状のものを pLaTeX2e 2021-06-01 として出しました。さて:

\@shape@roman@kanji フラグは \delayed@k@adjustment の中で変更/復帰させたほうが良い

確かに。

\set@safe@kanji@shape による「和文シェープの存在判定をしてから設定」

[中略]
和文で test/l/sw が定義されていることを考えると「不思議」な結果のように感じてしまいます.

これも同意です。治すには「和文シェープの存在判定」を \delayed@k@adjustment のリストが定まった最後に実行できれば良いような気がしますが…頭が回らないのでコードを考えるのは後日にします。

@aminophen
Copy link
Member Author

忘れないようにメモ → 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.

@aminophen
Copy link
Member Author

aminophen commented Jun 3, 2021

\RequirePackage[2020/10/01]{platexrelease} でエラー

c0098ad で platexrelease 側は直しましたが latex3/latex2e#577 のためまだ動かない…。

→ 追記:LaTeX 側のバグについては workaround を教えてもらったので,一時的に plvers.dtx に導入 (c888300)。後日 LaTeX2e 本体の修正がリリースされたら,そのコードは削除する予定。

@aminophen
Copy link
Member Author

forum:3124#p18720: 和文シェープの警告が増えた件
和文で test/l/sw が定義されていることを考えると「不思議」な結果のように感じてしまいます.

両者とも,以前ご指摘のあった「\@shape@roman@kanji フラグは \delayed@k@adjustment の中で変更/復帰」によって修正できたように思います (45ae7fd)。

@aminophen
Copy link
Member Author

aminophen commented Jun 4, 2021

@h-kitagawa さんのブランチ (h-kitagawa@26bcadb) にあるテストケースの結果が

  • 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 で確認ずみ)

@aminophen aminophen changed the title LaTeX2e 2021-05-01 対策 LaTeX2e 2021-06-01 対策 Jun 4, 2021
@aminophen
Copy link
Member Author

https://oku.edu.mie-u.ac.jp/tex/mod/forum/discuss.php?d=3146 で指摘された \userelfont での従属欧文のシェープ・シリーズ更新が効かない件について 04c437e で対処しました。

  1. \delayed@k@adjustment の処理
  2. 和文の処理
  3. \rel@///(|all) = \romanseries/\romanshape で更新
  4. \delayed@f@adjustment の処理
  5. 欧文の処理

の順にすることでどうにか。合わせて 65a11dfforced@series フラグを roman/kanji で分けてみました。分けない場合に何が起こるのかはわかりませんが,原理的には分けておかないといけないように感じたため。

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

3 participants