チケット #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 はこの仕様が異なるのですが、いくつかうまくいかない(それも全てではない)ので少し混乱しています。

チケットの履歴 (16 件中 3 件表示)

2017-03-02 15:08 更新者: aminophen
  • 新しいチケット "\strutbox パッチ相当?" が作成されました
2017-03-02 18:18 更新者: h7k
コメント

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

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

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

2017-03-02 19:21 更新者: aminophen
コメント

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

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

2017-03-02 21:03 更新者: 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 更新者: h7k
コメント

\fork@parbox@option

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

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

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

2017-03-02 21:12 更新者: aminophen
コメント

\relax を let するだけで良い

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

2017-03-07 10:49 更新者: aminophen
コメント

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

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

2017-03-07 12:48 更新者: h7k
コメント

|\cleardoublepage|を再定義

4819e9f で修正しました.

2017-03-22 02:25 更新者: 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 更新者: h7k
コメント

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

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

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

2017-03-22 17:56 更新者: h7k
コメント

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

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

2017-03-22 18:02 更新者: aminophen
コメント

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

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

2017-03-28 20:24 更新者: 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 更新者: aminophen
コメント

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

2017-03-30 10:32 更新者: h7k
コメント

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

2017-04-01 16:20 更新者: h7k
  • 解決法なし から 修正済み に更新されました
  • 状況オープン から 完了 に更新されました
  • チケット完了時刻2017-04-01 16:20 に更新されました
コメント

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

添付ファイルリスト

添付ファイルはありません

編集

ログインしていません。ログインしていない状態では、コメントに記載者の記録が残りません。 » ログインする