チケット #37467

lltjext読み込み時&縦書きの組方向指定なしtabular

登録: 2017-08-27 20:55 最終更新: 2017-09-04 21:22

報告者: abenori 担当者: h7k
チケットの種類: バグ 状況: 完了
コンポーネント: 縦組 マイルストーン: (未割り当て)
優先度: 5 - 中 重要度: 5 - 中
解決法: なし

詳細

lljtextを読み込んでtabularを組方向指定なしで使うと,zオプションと同様になるようですが,これ意図してます?

\documentclass{ltjtarticle}% lltjextが読み込まれる
\begin{document}
\begin{tabular}{c}
テスト
\end{tabular}
\end{document}
で「テスト」がutodになります.この影響で,ltjtarticleを使っていると \maketitle内で著者名が寝てしまいます.

ちなみにplextだと縦書きになります.Zという組方向オプションを渡している扱いにしているようです.lltjextも以前は同じだったようですが,今年の5/11の669795aでZ→zとされたようです.

添付ファイルリスト

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

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

2017-08-27 20:55 更新者: abenori
  • 新しいチケット "lltjext読み込み時&縦書きの組方向指定なしtabular" が作成されました
2017-08-27 21:41 更新者: h7k
コメント

8026750 で <Z> に直しました.なんで小文字化したのだろう…….

そろそろ新バージョンのリリースをしようと思っています(9/4 を目標).20170730.0 からの変更点は以下のとおりです.

  • いつものように,platex 2017/07/29+1 への追随
  • #37424(luatexja-fontspec で \labelitemiii が消える)修正.それに伴い etoolbox を動作要件に.#37427 参照.
  • luatexja-preset で新規プリセットを可能に (\ltjnewpreset, \ltjapplypreset)

#37419(縦書き時の矢印の向き)と #37458(lltjp-geometry と pTeX 横クラス)についてはどうするかまだ決めていません.

2017-08-27 22:13 更新者: abenori
コメント

ありがとうございます.(勝手に直そうと思ったらわざわざ変えていたので不思議になってしまった…….)

あまり関係ないのですが,ちょっと聞かせてください.次のソースをplatexで処理すると「テスト」が縦書きになるのですが,luatexjaの読み込みを加えてlualatexで処理するとutodになります.違いはなんなんでしょう?

\documentclass[landscape]{article}
% \usepackage{luatexja}
\usepackage{bxpapersize}
\makeatletter
\let\orig@array=\@array
\def\@array{\tate\orig@array}
\makeatother
\begin{document}
\tate
\begin{tabular}{c}
テスト
\end{tabular}
\end{document}

ちなみに\@arrayの定義を

\def\@array[#1]#2{%
  \if #1t\vtop \else \if#1b\vbox \else \vcenter \fi\fi
  \bgroup
  \tate
  \setbox\@arstrutbox\hbox{%
(後はオリジナルの@arrayと同じ)
とするとLuaTeX-jaでも縦書きになります.

2017-08-28 07:02 更新者: h7k
  • 担当者(未割り当て) から h7k に更新されました
  • コンポーネント(未割り当て) から 縦組 に更新されました
コメント

次のソースをplatexで処理すると「テスト」が縦書きになるのですが,luatexjaの読み込みを加えてlualatexで処理するとutodになります

問題の部分だけ抜き出すと次のようになります:

\documentclass[landscape]{article}
\ifdefined\directlua\usepackage{luatexja}\fi
\begin{document}
\hbox{\tate$\tate \vbox{あいう}$}
\end{document}
ここで,数式モードに入った直後に \tate を実行していますが,LuaTeX-ja では「ボックス開始時,tate であり,かつその一つ上位のリストが数式モードであればボックスは utod になる」という挙動(*)を示すため,その中の \vbox は utod になってしまいます.

一方,\hbox{\tate$\vbox{\tate あいう}$} とすると,中の \vbox は当然 tate です.

(*)の該当コードは ltj-direction.lua の

   function luatexja.direction.set_list_direction_hook(v)
      local lv = tex_nest.ptr -- must be >= 1
      if not v then
         v = get_dir_count()
         if abs(tex_nest[lv-1].mode) == ltjs.mmode and v == dir_tate then
            v = dir_utod
         end
      (略)
です.なんとかできないかなあ.

2017-08-28 14:08 更新者: abenori
コメント

ありがとうございます.納得しました.数式入った瞬間utodになって\tateされるとそっからはずっとtate,ってのは難しいんですかね?

2017-08-28 17:38 更新者: h7k
コメント

数式入った瞬間utodになって\tateされるとそっからはずっとtate

とりあえず cab73095 で書いてみましたが,数式モードのリスト中に whatsit を置く(LuaTeX-ja では,リストの組方向を保持するのに whatsit を使っている)ことで副作用がないか不安です.

2017-08-28 21:16 更新者: h7k
コメント

数式入った瞬間utodになって\tateされるとそっからはずっとtate

コミットはしたものの,どうもモヤモヤ.

pTeX でも LuaTeX-ja でも,「組方向はリスト・ボックスごとに定まる」という方針なのですが,文中数式はいずれ水平リストに変換されてしまうことを考えると,数式モードで組方向が設定できるのは不自然な気がしています. 別の言葉で言えば,pTeX で $\tate ...$ ができるのは抜け穴のように感じています.ここまでサポートする必要あるのかなあ.


参考として,以下のソースを e-pTeX で処理させると,内側の \hbox が「縦組の90度回転」の状態になります:

\ifdefined\directlua
  \input luatexja.sty
\fi
\tentmin
あいうabc$\tate xyz\hbox{あいうabc}xyz$
\bye
ノードで言うと次のようになります.「数式の組方向」とその中の \hbox の組方向がともに縦であることによるのでしょうか,通常なら異方向のボックスを組むときに使われる dir_node が作られていないようです.
\hbox(7.77588+4.58221)x469.75499, glue set 322.11545fil
(略)
.\tenrm c
.\mathon
(略)
.\kern0.4398
.\glue(\xkanjiskip) 2.40553 plus 1.0 minus 1.0
.\hbox(6.94444+4.58221)x46.54984, tate direction
..\tentmin あ
(略)

2017-08-29 09:20 更新者: h7k
コメント

h7k への返信

数式入った瞬間utodになって\tateされるとそっからはずっとtate

コミットはしたものの,どうもモヤモヤ. pTeX でも LuaTeX-ja でも,「組方向はリスト・ボックスごとに定まる」という方針なのですが,文中数式はいずれ水平リストに変換されてしまうことを考えると,数式モードで組方向が設定できるのは不自然な気がしています. 別の言葉で言えば,pTeX で $\tate ...$ ができるのは抜け穴のように感じています.ここまでサポートする必要あるのかなあ.

マニュアルが ! Improper \halign inside $$'s というエラーをだして組版できなくなりました. そのため,commt cab73095 は revert しました.

上記のエラーは tex.web で

@ When \.{\\halign} is used as a displayed formula, there should be
no other pieces of mlists present.

@<Check for improper alignment in displayed math@>=
if (mode=mmode)and((tail<>head)or(incompleat_noad<>null)) then
  begin print_err("Improper "); print_esc("halign"); print(" inside $$'s");
@.Improper \\halign...@>
(略)
と定義されており,どうやら組方向格納用 whatsitが存在することによるようです.

2017-08-29 11:02 更新者: abenori
コメント

別の言葉で言えば,pTeX で $\tate ...$ ができるのは抜け穴のように感じています.

なるほど,言われてみると違和感を感じても来ました.

2017-08-29 17:05 更新者: zrbabbler
コメント

文中数式はいずれ水平リストに変換されてしまうことを考えると

これって、「いずれ水平リストに変換されて 周りの水平リストに吸収されてしまう 」ということですか?

だとすると、 $\tate ...$ は「アリエナイ」ような……。

この構成を利用している例が現状で存在する、という話なんでしょうか?

2017-09-04 21:22 更新者: h7k
  • チケット完了時刻2017-09-04 21:22 に更新されました
  • 状況オープン から 完了 に更新されました
コメント

20170904.0 を出したので,完了とします.数式モード中で $\tate ...$ のように組方向を変更することは禁止していますが,pTeX 側がどうなるか (tex-jp-build/#21) によってはまた仕様変更するかも.

編集

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