待辦事項 #37038

\strutbox パッチ相当?

啟用日期: 2017-03-02 15:08 最後更新: 2017-04-01 16:20

回報者:
負責人:
(無)
類型:
狀態:
關閉
元件:
(無)
里程碑:
(無)
優先權:
5 - 中
嚴重程度:
5 - 中
處理結果:
修正
檔案:

細節

pLaTeX 用に作成した \strutbox パッチ関連のテストケース 6 点を LuaTeX-ja でも試していたのですが、やはりうまくいっていないケースがあるようです(例えば align の数式番号とか array の arraystretch とか)。ただ、なぜうまくいっていないのかがよく理解できません。

pTeX の \wd や \ht などは「現在の組方向に対する寸法」を返す仕様なので、横で組まれた \strutbix の \ht などが変になる、というのが pLaTeX の \strutbox パッチを必要とする理由だと思っていました。LuaTeX-ja はこの仕様が異なるのですが、いくつかうまくいかない(それも全てではない)ので少し混乱しています。

Ticket History (3/16 Histories)

2017-03-02 15:08 Updated by: aminophen
  • New Ticket "\strutbox パッチ相当?" created
2017-03-02 18:18 Updated by: h7k
評語

横で組まれた \strutbix の \ht などが変になる

横と縦ではベースラインからどれだけ文字が行送り方向に飛び出すか,が変わります. むしろそちらがメインの理由なのでは,と個人的には思っています.

a5825c7 で \strutbox パッチを入れてみたつもりです. platex のテストケース 6 点も処理してみたのですが, strutbox_05empheq.tex はそもそも LuaTeX-ja ではタイプセットできていないです.

2017-03-02 19:21 Updated by: aminophen
評語

strutbox_05empheq.tex はそもそも LuaTeX-ja ではタイプセットできていないです.

縦組でも lltjext を読ませないようにするとエラーなく通り、横組でも lltjext を読ませると ! Missing \endgroup inserted. エラーになります。どうやら lltjext が \parbox を拡張していることと empheq が衝突していそうですが、それ以上はまだわかっていません。

2017-03-02 21:03 Updated by: aminophen
評語

lltjext と plext の違いを調べたところ \fork@parbox@option に問題があることに気づきました。

  1. \def\@begin@parbox{$\vcenter}%
  2. \def\@end@parbox{\m@th$}%

という定義がなされますが、もともと数式モード内にいる状態で \parbox が呼ばれる empheq の場合に問題が起きている、ということのようです。plext のほうは条件分岐が入っていて

  1. \ifmmode
  2. \def\@begin@parbox{\vcenter}%
  3. \def\@end@parbox{\m@th}%
  4. \else
  5. \def\@begin@parbox{$\vcenter}%
  6. \def\@end@parbox{\m@th$}%
  7. \fi

のようになっていますから、これはエラーが出ないようです。

2017-03-02 21:10 Updated by: h7k
評語

\fork@parbox@option

ようやくそれに気づいたので,737cd15 で入れました.

数式モード時の \@end@parbox

元々数式モード内にいる状態なのですから,\def\@end@parbox{\m@th} は不要 (\relax を let するだけで良い)のではないでしょうか?

2017-03-02 21:12 Updated by: aminophen
評語

\relax を let するだけで良い

確かにそうですね。 737cd15 で ok になりました。

2017-03-07 10:49 Updated by: aminophen
評語

オフトピですが ltjsclasses の「reportとbookクラスの場合に|\cleardoublepage|を再定義します」の docstrip が <!article> ですが,ここは <book|report> じゃないかと思います.ltjskiyou と ltjspf には open… はないのでエラーになると思います.

あと 2 箇所ほど ????/??/?? が残っていますがこれは 2017/02/24 ですね.

2017-03-07 12:48 Updated by: h7k
評語

|\cleardoublepage|を再定義

4819e9f で修正しました.

2017-03-22 02:25 Updated by: aminophen
評語

現状の lltjext では、周囲が縦組で <y> オプションのときに、「\box@dir を適用する前の時点」で \@tempcnta=\strutbox が実行されています。これは \strutbox パッチ適用下では \tstrutbox に展開されるため、正しくないようです。

簡単には 4 箇所登場する \@tempcnta=\strutbox\@tempcnta=\ystrutbox に置き換えればよいと思います。

# これは私自身 pLaTeX 向けの \strutbox パッチを書きながら最も危惧した点でした。(しかも platexrelease で巻き戻した場合も考慮しないといけず、なおさらでした。)が、(1) 元々 plext.sty (platex) は大丈夫な実装になっていたこと、および (2) plextarray.sty (platex-tools) も両対応な実装にしたこと、さらに (3) その他の日本製パッケージで \strutbox を稼働するものが皆無だったこと …から、カーネルへの導入に踏み切ったという経緯があります。

  1. % こうしないと stfloats.sty の実装のせいでエラーになる
  2. \def\isofmtversion{2017-05-01}
  3. \ifx\fmtversion\isofmtversion
  4. \def\fmtversion{2017/05/01}
  5. \fi
  6. \documentclass{ltjtarticle}
  7. \begin{document}
  8. \begin{tabular}<y>[t]{l}
  9. \hline\smash{abcde}あいう◆\\ \hline
  10. \end{tabular}
  11. \end{document}

# ちなみに stfloats.sty は「新しい LaTeX2e 2017-05-01」の ISO 書式日付に非対応でした。(内部の \if@before@latex@release あたり。)したがって、単に \documentclass{ltjsarticle} とするだけで Runaway argument? してしまいます。これは stfloats の Issue なのか、LaTeX2e のアグレッシブな変更がまずいのか…?

2017-03-22 05:50 Updated by: h7k
評語

\@tempcnta=\strutbox を \@tempcnta=\ystrutbox に置き換えればよいと思います。

ありがとうございます.単純な考慮漏れでしたので,直しました.

stfloats.sty については,せっかく ltj-latex.sty 中で \RequirePackage{filehook} されているので, 上に書いてくださった処理を lltjp-stfloats.sty の中に(復帰処理付きで)仕込むという対処療法があるかと思います.
# まだ調べていません.

2017-03-22 17:56 Updated by: h7k
評語

stfloats.sty は「新しい LaTeX2e 2017-05-01」の ISO 書式日付に非対応

やっぱり,lltjp-stfloats.sty の中に日本語対応以外のことを書くのは収集がつかなくなりそうな気がします. そのため,これについては上流で何とかしてもらうのが良いと思います.

2017-03-22 18:02 Updated by: aminophen
評語

やっぱり,lltjp-stfloats.sty の中に日本語対応以外のことを書くのは収集がつかなくなりそうな気がします.

私もそう思います。とりあえず sttools の開発者に(Cc: LaTeX team としつつ)お願いしてみます。

2017-03-28 20:24 Updated by: aminophen
評語

stfloats については先ほど Sigitas さんと LaTeX team の Bruno さんから返答があり,早ければ今週に

  1. \def\tmp@reserved@a#1#2#3#4#5\@nil{%
  2. \ifnum #1#2#3#4<2015\relax

のようにする予定だそうです。

2017-03-30 10:17 Updated by: aminophen
評語

d9a08ce (use \zstrutbox in \utod mode) のコミットで \strut の定義にひとつ \fi が足りないみたいです。

2017-03-30 10:32 Updated by: h7k
評語

ほんとだ,なおしました.

2017-04-01 16:20 Updated by: h7k
  • 處理結果 Update from to 修正
  • 狀態 Update from 開啟 to 關閉
  • Ticket Close date is changed to 2017-04-01 16:20
評語

20170401.0 を出しました(\strutbox, \strut は \utod でも \tstrutbox を使うように戻しました). 何かあれば再オープンしてください.

Attachment File List

No attachments

編輯

You are not logged in. I you are not logged in, your comment will be treated as an anonymous post. » 登入