TeX Live 2014 の pTeX で次のソースを走らせてみたところ,
エラー無しに dvi が生成されました.
----
%#!ptex
あ
\tate
\tentmin % 縦組用フォント
い
\end
----
文章中で組方向を変えていることになるので,私は
「! Use `\tate' at top of list.」というエラーが起きるのが
自然だと思っています.この挙動は意図的なのでしょうか?
\par の直後というより,nest_ptr=0 の状況が変です.
全体を \vbox で囲んだ
\vbox{あ\par\tate}\end
では "! Use `\tate' at top of list" エラーが発生します.
\tate の前に \showlists を実行すると確かに
### yoko direction, internal vertical mode entered at line 1
\hbox(7.77588+1.38855)x469.75499, glue set 440.13283fil
.\hbox(0.0+0.0)x20.0
.\tenmin あ
.\penalty 10000
.\glue(\parfillskip) 0.0 plus 1.0fil
.\glue(\rightskip) 0.0
prevdepth 1.38855, prevgraf 1 line
### yoko direction, vertical mode entered at line 0
prevdepth ignored
となり,カレントリストは空でないからです.
tex.web を読んでみたところ
When \TeX\ has appended new material in vertical mode, it calls the procedure
|build_page|, which tries to catch up by moving nodes from the contribution
list to the current page. This procedure will succeed in its goal of
emptying the contribution list, ...
とあり,(internal でない) vertical mode 時の head .. tail という
リストが上記の contribution list のようです.
そのため,vertical mode における普通(?)の場合には
head = tail になるのではないか,と思います.
全体を \vbox で囲んだ
\vbox{あ\par\tate}\end
では "! Use `\tate' at top of list" エラーが発生します.
\tate の前に \showlists を実行すると確かに
### yoko direction, internal vertical mode entered at line 1
\hbox(7.77588+1.38855)x469.75499, glue set 440.13283fil
.\hbox(0.0+0.0)x20.0
.\tenmin あ
.\penalty 10000
.\glue(\parfillskip) 0.0 plus 1.0fil
.\glue(\rightskip) 0.0
prevdepth 1.38855, prevgraf 1 line
### yoko direction, vertical mode entered at line 0
prevdepth ignored
となり,カレントリストは空でないからです.
tex.web を読んでみたところ
When \TeX\ has appended new material in vertical mode, it calls the procedure
|build_page|, which tries to catch up by moving nodes from the contribution
list to the current page. This procedure will succeed in its goal of
emptying the contribution list, ...
とあり,(internal でない) vertical mode 時の head .. tail という
リストが上記の contribution list のようです.
そのため,vertical mode における普通(?)の場合には
head = tail になるのではないか,と思います.
蛇足な気もしますが,自分でもやってみました.
あ\showlists\par\tate\tentmin い\end
だと
### yoko direction, horizontal mode entered at line 1
\hbox(0.0+0.0)x20.0
\tenmin あ
spacefactor 1000
### yoko direction, vertical mode entered at line 0
prevdepth ignored
あ\par\showlists\tate\tentmin い\end
だと
### yoko direction, vertical mode entered at line 0
### current page:
\glue(\topskip) 2.22412
\hbox(7.77588+1.38855)x469.75499, glue set 440.13283fil
.\hbox(0.0+0.0)x20.0
.\tenmin あ
.\penalty 10000
.\glue(\parfillskip) 0.0 plus 1.0fil
.\glue(\rightskip) 0.0
total height 10.0
goal height 643.20255
prevdepth 1.38855, prevgraf 1 line
あ\par\tate\showlists\tentmin い\end
だと
### tate direction, vertical mode entered at line 0
### current page:
\glue(\topskip) 2.22412
\hbox(7.77588+1.38855)x469.75499, glue set 440.13283fil
.\hbox(0.0+0.0)x20.0
.\tenmin あ
.\penalty 10000
.\glue(\parfillskip) 0.0 plus 1.0fil
.\glue(\rightskip) 0.0
total height 10.0
goal height 643.20255
prevdepth 1.38855, prevgraf 1 line
あ\par\tate\tentmin い\showlists\end
だと
### tate direction, horizontal mode entered at line 1
\hbox(0.0+0.0)x20.0
\tentmin い
spacefactor 1000
### tate direction, vertical mode entered at line 0
### current page:
\glue(\topskip) 2.22412
\hbox(7.77588+1.38855)x469.75499, glue set 440.13283fil
.\hbox(0.0+0.0)x20.0
.\tenmin あ
.\penalty 10000
.\glue(\parfillskip) 0.0 plus 1.0fil
.\glue(\rightskip) 0.0
\glue(\parskip) 0.0 plus 1.0
total height 11.38855 plus 1.0
goal height 643.20255
prevdepth 1.38855
nest_ptr=0 のときは \par が来るたびに current list の中身を current page に放り込んで空にしてしまうので,
any_mode(chg_dir):
begin if cur_group<>align_group then
if head=tail then
begin direction:=cur_chr;
if mode=vmode then page_dir:=cur_chr;
end
else begin print_err("Use `"); print_cmd_chr(cur_cmd,cur_chr);
print("' at top of list");
help2("Direction change command is available only while")
("current list is null."); error;
end
else ...
の if head=tail の判定だけだと不十分で,current page の中身も見ないと自然な挙動にはならない,ということでしょうか.
あ\showlists\par\tate\tentmin い\end
だと
### yoko direction, horizontal mode entered at line 1
\hbox(0.0+0.0)x20.0
\tenmin あ
spacefactor 1000
### yoko direction, vertical mode entered at line 0
prevdepth ignored
あ\par\showlists\tate\tentmin い\end
だと
### yoko direction, vertical mode entered at line 0
### current page:
\glue(\topskip) 2.22412
\hbox(7.77588+1.38855)x469.75499, glue set 440.13283fil
.\hbox(0.0+0.0)x20.0
.\tenmin あ
.\penalty 10000
.\glue(\parfillskip) 0.0 plus 1.0fil
.\glue(\rightskip) 0.0
total height 10.0
goal height 643.20255
prevdepth 1.38855, prevgraf 1 line
あ\par\tate\showlists\tentmin い\end
だと
### tate direction, vertical mode entered at line 0
### current page:
\glue(\topskip) 2.22412
\hbox(7.77588+1.38855)x469.75499, glue set 440.13283fil
.\hbox(0.0+0.0)x20.0
.\tenmin あ
.\penalty 10000
.\glue(\parfillskip) 0.0 plus 1.0fil
.\glue(\rightskip) 0.0
total height 10.0
goal height 643.20255
prevdepth 1.38855, prevgraf 1 line
あ\par\tate\tentmin い\showlists\end
だと
### tate direction, horizontal mode entered at line 1
\hbox(0.0+0.0)x20.0
\tentmin い
spacefactor 1000
### tate direction, vertical mode entered at line 0
### current page:
\glue(\topskip) 2.22412
\hbox(7.77588+1.38855)x469.75499, glue set 440.13283fil
.\hbox(0.0+0.0)x20.0
.\tenmin あ
.\penalty 10000
.\glue(\parfillskip) 0.0 plus 1.0fil
.\glue(\rightskip) 0.0
\glue(\parskip) 0.0 plus 1.0
total height 11.38855 plus 1.0
goal height 643.20255
prevdepth 1.38855
nest_ptr=0 のときは \par が来るたびに current list の中身を current page に放り込んで空にしてしまうので,
any_mode(chg_dir):
begin if cur_group<>align_group then
if head=tail then
begin direction:=cur_chr;
if mode=vmode then page_dir:=cur_chr;
end
else begin print_err("Use `"); print_cmd_chr(cur_cmd,cur_chr);
print("' at top of list");
help2("Direction change command is available only while")
("current list is null."); error;
end
else ...
の if head=tail の判定だけだと不十分で,current page の中身も見ないと自然な挙動にはならない,ということでしょうか.
> nest_ptr=0 のときは \par が来るたびに current list の中身を
> current page に放り込んで空にしてしまうので,
(略)
> の if head=tail の判定だけだと不十分で,current page の
> 中身も見ないと自然な挙動にはならない,ということでしょうか.
あまり詳しく調査できていませんが,そうではないかと思っています.
なお,現行の tarticle.cls に
\DeclareOption{tate}{%
\AtBeginDocument{\showlists\tate\message{《縦組モード》}%
\adjustbaseline}%
}
と \showlists を追加し,
\showboxdepth10000\showboxbreadth1000
\documentclass{tarticle}
\begin{document}
\end{document}
をタイプセットすると,
### yoko direction, vertical mode entered at line 0
### current page:
\write-{}
と出力され,\tate 実行時には current page は非空であることが
わかります.そのため,もし nest_ptr=0 の場合の判定を
厳しくしようとすれば,tarticle.cls 等も変更する必要が出てきます.
> current page に放り込んで空にしてしまうので,
(略)
> の if head=tail の判定だけだと不十分で,current page の
> 中身も見ないと自然な挙動にはならない,ということでしょうか.
あまり詳しく調査できていませんが,そうではないかと思っています.
なお,現行の tarticle.cls に
\DeclareOption{tate}{%
\AtBeginDocument{\showlists\tate\message{《縦組モード》}%
\adjustbaseline}%
}
と \showlists を追加し,
\showboxdepth10000\showboxbreadth1000
\documentclass{tarticle}
\begin{document}
\end{document}
をタイプセットすると,
### yoko direction, vertical mode entered at line 0
### current page:
\write-{}
と出力され,\tate 実行時には current page は非空であることが
わかります.そのため,もし nest_ptr=0 の場合の判定を
厳しくしようとすれば,tarticle.cls 等も変更する必要が出てきます.
> 空行(段落)を挟まずに
> (略)
> とすると、「! Use `\tate' at top of list.」というエラーが出ました。
これは仕様通りの,ごく自然な挙動だと思います.
\tracingonline2\showboxbreadth100\showboxdepth100
あ\showlists\tate
\end
として,\tate 実行直前のリストを表示させると
### yoko direction, horizontal mode entered at line 2
\hbox(0.0+0.0)x20.0
\tenmin あ
spacefactor 1000
### yoko direction, vertical mode entered at line 0
prevdepth ignored
となり,確かに現在のリスト (horizontal mode ...) は
空ではありませんから.
> (略)
> とすると、「! Use `\tate' at top of list.」というエラーが出ました。
これは仕様通りの,ごく自然な挙動だと思います.
\tracingonline2\showboxbreadth100\showboxdepth100
あ\showlists\tate
\end
として,\tate 実行直前のリストを表示させると
### yoko direction, horizontal mode entered at line 2
\hbox(0.0+0.0)x20.0
\tenmin あ
spacefactor 1000
### yoko direction, vertical mode entered at line 0
prevdepth ignored
となり,確かに現在のリスト (horizontal mode ...) は
空ではありませんから.
私のところはすごく古いpTeX(Win32TeX)なのですが、
同じようにエラー無くdviファイルができあがってしまいました。
dvioutで見てみると、A4横用紙を縦書きで使った感じで、右上のほうに「い」が、
その一つ右に、「右に寝た「あ」」があります。
ノンブルは紙面左の中央に、「右に寝た「1」」があります。
\end の直前で \showlists して、続けて \tracingoutput もさせたときのlogファイルは次のようになりました。
ご報告まで。
This is pTeX, Version p2.1.11, based on TeX, Version 3.14159 (SJIS) (Web2C 7.3.3) (format=ptex 2001.5.23) 30 JUN 2014 20:44
**ptextest.tex
(./ptextest.tex
### tate direction, horizontal mode entered at line 5
\hbox(0.0+0.0)x20.0
\tentmin い
spacefactor 1000
### tate direction, vertical mode entered at line 0
### current page:
\glue(\topskip) 2.22412
\hbox(7.77588+1.38855)x469.75499, glue set 440.13283fil
.\hbox(0.0+0.0)x20.0
.\tenmin あ
.\penalty 10000
.\glue(\parfillskip) 0.0 plus 1.0fil
.\glue(\rightskip) 0.0
\glue(\parskip) 0.0 plus 1.0
total height 11.38855 plus 1.0
goal height 643.20255
prevdepth 1.38855
! OK.
l.9 \showlists
?
Completed box being shipped out [1]
\vbox(667.20255+0.0)x469.75499, tate direction
.\vbox(0.0+0.0)x469.75499, glue set 14.0fil, tate direction
..\glue -22.5
..\hbox(8.5+0.0)x469.75499, glue set 469.75499fil, tate direction
...\vbox(8.5+0.0)x0.0, tate direction
...\glue 0.0 plus 1.0fil
..\glue 0.0 plus 1.0fil minus 1.0fil
.\vbox(643.20255+0.0)x469.75499, glue set 616.62033fill, tate direction
..\glue(\topskip) 2.22412
..\hbox(7.77588+1.38855)x469.75499, glue set 440.13283fil
...\hbox(0.0+0.0)x20.0
...\tenmin あ
...\penalty 10000
...\glue(\parfillskip) 0.0 plus 1.0fil
...\glue(\rightskip) 0.0
..\glue(\parskip) 0.0 plus 1.0
..\glue(\baselineskip) 6.02924
..\hbox(4.58221+4.58221)x469.75499, glue set 440.13283fil
...\hbox(0.0+0.0)x20.0
...\tentmin い
...\penalty 10000
...\glue(\parfillskip) 0.0 plus 1.0fil
...\glue(\rightskip) 0.0
..\hbox(0.0+0.0)x469.75499
..\glue 0.0 plus 1.0fill
.\glue(\baselineskip) 17.55556
.\hbox(6.44444+0.0)x469.75499, glue set 232.37749fil, tate direction
..\glue 0.0 plus 1.0fil minus 1.0fil
..\tenrm 1
..\glue 0.0 plus 1.0fil minus 1.0fil
)
Output written on ptextest.dvi (1 page, 320 bytes).
同じようにエラー無くdviファイルができあがってしまいました。
dvioutで見てみると、A4横用紙を縦書きで使った感じで、右上のほうに「い」が、
その一つ右に、「右に寝た「あ」」があります。
ノンブルは紙面左の中央に、「右に寝た「1」」があります。
\end の直前で \showlists して、続けて \tracingoutput もさせたときのlogファイルは次のようになりました。
ご報告まで。
This is pTeX, Version p2.1.11, based on TeX, Version 3.14159 (SJIS) (Web2C 7.3.3) (format=ptex 2001.5.23) 30 JUN 2014 20:44
**ptextest.tex
(./ptextest.tex
### tate direction, horizontal mode entered at line 5
\hbox(0.0+0.0)x20.0
\tentmin い
spacefactor 1000
### tate direction, vertical mode entered at line 0
### current page:
\glue(\topskip) 2.22412
\hbox(7.77588+1.38855)x469.75499, glue set 440.13283fil
.\hbox(0.0+0.0)x20.0
.\tenmin あ
.\penalty 10000
.\glue(\parfillskip) 0.0 plus 1.0fil
.\glue(\rightskip) 0.0
\glue(\parskip) 0.0 plus 1.0
total height 11.38855 plus 1.0
goal height 643.20255
prevdepth 1.38855
! OK.
l.9 \showlists
?
Completed box being shipped out [1]
\vbox(667.20255+0.0)x469.75499, tate direction
.\vbox(0.0+0.0)x469.75499, glue set 14.0fil, tate direction
..\glue -22.5
..\hbox(8.5+0.0)x469.75499, glue set 469.75499fil, tate direction
...\vbox(8.5+0.0)x0.0, tate direction
...\glue 0.0 plus 1.0fil
..\glue 0.0 plus 1.0fil minus 1.0fil
.\vbox(643.20255+0.0)x469.75499, glue set 616.62033fill, tate direction
..\glue(\topskip) 2.22412
..\hbox(7.77588+1.38855)x469.75499, glue set 440.13283fil
...\hbox(0.0+0.0)x20.0
...\tenmin あ
...\penalty 10000
...\glue(\parfillskip) 0.0 plus 1.0fil
...\glue(\rightskip) 0.0
..\glue(\parskip) 0.0 plus 1.0
..\glue(\baselineskip) 6.02924
..\hbox(4.58221+4.58221)x469.75499, glue set 440.13283fil
...\hbox(0.0+0.0)x20.0
...\tentmin い
...\penalty 10000
...\glue(\parfillskip) 0.0 plus 1.0fil
...\glue(\rightskip) 0.0
..\hbox(0.0+0.0)x469.75499
..\glue 0.0 plus 1.0fill
.\glue(\baselineskip) 17.55556
.\hbox(6.44444+0.0)x469.75499, glue set 232.37749fil, tate direction
..\glue 0.0 plus 1.0fil minus 1.0fil
..\tenrm 1
..\glue 0.0 plus 1.0fil minus 1.0fil
)
Output written on ptextest.dvi (1 page, 320 bytes).