色々テスト中だとは思うのですが,2f800c3 では LuaLaTeX がうまく動かなくなっています.
\documentclass{ltjarticle}
\begin{document}
\end{document}
で
...
(/home/kmaeda/texmf/tex/luatex/luatexja/src/ltjsize10.clo3 tate nil
3 tate nil
)
(/home/kmaeda/texmf/tex/luatex/luatexja/src/jfm-min.lua)error: ...e/kmaeda/texmf/tex/luatex/luatexja/src/ltj-direction.lua:495: attempt to index field '?' (a nil value)
.
<to be read again>
\ltj@@reset@badness
l.805 \onecolumn
?
となります.一方
\documentclass{article}
\usepackage{luatexja}
\begin{document}
\end{document}
だと
...
(/home/kmaeda/texmf/tex/luatex/luatexja/src/ltj-base.sty)
! Package luatexja Error: Use `\yoko' at top of list.
See the luatexja package documentation for explanation.
Type H <return> for immediate help.
\yoko ....direction.set_list_direction(4, 'yoko')}
l.544 \yoko
?
と出ます.kmaeda への返信
色々テスト中だとは思うのですが,2f800c3 では LuaLaTeX がうまく動かなくなっています. {{{ \documentclass{ltjarticle} \begin{document} \end{document} }}}
こっちは 69ea4d0 で直ったと思います.
一方 {{{ \documentclass{article} \usepackage{luatexja} \begin{document} \end{document} }}}
こっちはまだです.
kmaeda への返信
一方
\documentclass{article} \usepackage{luatexja} \begin{document} \end{document}だと... (/home/kmaeda/texmf/tex/luatex/luatexja/src/ltj-base.sty) ! Package luatexja Error: Use `\yoko' at top of list. See the luatexja package documentation for explanation. Type H <return> for immediate help. \yoko ....direction.set_list_direction(4, 'yoko')} l.544 \yoko ?と出ます.
article.cls の内部で実行される \clearpage の定義を見ると
\def\clearpage{%
\ifvmode
\ifnum \@dbltopnum =\m@ne
\ifdim \pagetotal <\topskip
\hbox{}%
\fi
\fi
\fi
\newpage
\write\m@ne{}%
\vbox{}%
\penalty -\@Mi
}
となっています.\write があるおかげで
article.cls 読み込み終了時の「ページの中身」tex.lists.page_head は空ではなく,それによって
Use `\yoko' at top of list. というエラーが発生した,というわけです.
0557243 で直ったと思います.
ありがとうございます.今度は
\documentclass{article}
\usepackage{luatexja}
\begin{document}
あ
\end{document}
で
...
(I search kanjifont definition file) ABD: EverySelectfont initializing macroserror: ...e/kmaeda/texmf/tex/luatex/luatexja/src/ltj-direction.lua:590: attempt to perform arithmetic on a nil value
.
<to be read again>
\ltj@@reset@badness
l.5 \end{document}
?
となります.
また,
\documentclass{ltjarticle}
\begin{document}
あ
\end{document}
で
...
[1{/usr/local/texlive/2014/texmf-var/fonts/map/pdftex/updmap/pdftex.map}]
! Extra \fi.
<output> ...w \if@fcolmade \fi {\@opcol \@startcolumn }\fi
\ifnum \outputpenalty >-\@...
l.4 \end{document}
?
となって,
\documentclass{ltjtarticle}
\begin{document}
\end{document}
で
...
(I search kanjifont definition file) ABD: EverySelectfont initializing macros
! Package luatexja Error: Use `\tate' at top of list.
See the luatexja package documentation for explanation.
Type H <return> for immediate help.
\tate ....direction.set_list_direction(3, 'tate')}
l.2 \begin{document}
?
となります.こちらこそ,ありがとうございます.
kmaeda への返信
ありがとうございます.今度は
\documentclass{article} \usepackage{luatexja} \begin{document} あ \end{document}でattempt to perform arithmetic on a nil value
かわりに,次の ! Extra \fi が出ました.
また,
\documentclass{ltjarticle} \begin{document} あ \end{document}で! Extra \fi.
前から確認しています.\ifydir 等の定義が
\protected\def\ifydir{\directlua{luatexja.direction.dir_conditional(4)}}
% この中で tex.sprint('\\iftrue') している
となっていることによるものだと思います.TeX by Topic などを読んで調べてみます.
となって,
\documentclass{ltjtarticle} \begin{document} \end{document}で... (I search kanjifont definition file) ABD: EverySelectfont initializing macros ! Package luatexja Error: Use `\tate' at top of list. See the luatexja package documentation for explanation. Type H <return> for immediate help. \tate ....direction.set_list_direction(3, 'tate')} l.2 \begin{document} ?となります.
さっきコメントした \clearpage 関連によるもので, \AtBeginDocument で組方向を設定するのは遅すぎることによります.
どうも,pTeX では,トップレベルでの組方向切り替えについてバグがあるようです. 次のソースがエラーを出さずに通ってしまいます.
%#!platex
\documentclass{jsarticle}
\begin{document}
あ
\tate
あいう
\end{document}
(後で TeX forum に投げてみます)こういうことでしょうか.
\input luatexja.sty \iftrue\ifydir\fi\fi % OK \iffalse\ifydir\fi\fi % NG \bye\ifydir はエンドユーザも使いそうなものなので,ちょっとまずいですね. luatexja.direction.set_list_direction() の最後のあたりで \ifydir などに \iftrue や \iffalse を \let してしまうのがいいのかな.
kmaeda への返信
こういうことでしょうか. {{{ \input luatexja.sty \iftrue\ifydir\fi\fi % OK \iffalse\ifydir\fi\fi % NG \bye }}} \ifydir はエンドユーザも使いそうなものなので,ちょっとまずいですね. luatexja.direction.set_list_direction() の最後のあたりで \ifydir などに \iftrue や \iffalse を \let してしまうのがいいのかな.
例えば
\hbox{\tate %
\hbox{\yoko {\dtou (A)} (B) } (C)
}
というコードにおいて,(A), (B) では \ifddir が真,(C) では \ifydir が真,となる必要があります.
\yoko, \tate, \dtou で \ifydir 等に \let してしまうのはこの仕様を満たすためには無理か……と思っていましたが,
という案が浮かんだので,ちょっと確かめてみます.
なお,同様の困った状況は \ifybox<number> についても当てはまります.
#33986 のコメントに書きましたが,\ifydir, \iftdir, \ifddir を無理矢理実装するのは危なそうな気がするので, 今はやめておきます(完了にします).
「チケットの詳細」と同じ働きをするソースは次のようになります.
%#!luatex
\input luatexja.sty
\def\R{%
\ifcase\ltjgetparameter{direction}\or D\or\or T\or Y\fi
}
\hbox{\tate{\dtou\R1}\R2}\end
少なくとも commit f97d8da において,
%#!luatex \input luatexja.sty \def\R{% \ifydir Y\fi\iftdir T\fi\ifddir D\fi } \hbox{\tate{\dtou\R1}\R2}\endを実行すると,「D1T2」という出力が得られます. 本来は pTeX のように「D1D2」のようになるのが自然なはずです.「現在のリストの組方向」が count register で管理されているという 現在の実装が原因なのは明らかなので,別の方法をなにか考えてみます(再設計するかも).