(u)pLaTeX 縦組で以下のコードが TeX Live 2016 最新でエラーになることを見つけました。
\documentclass[dvips]{tarticle}
\usepackage{color}
\begin{document}
{\color{red}あいうえお}
\end{document}
./test.tex:7: Incompatible direction list can't be unboxed.
\@begindvi ->\unvbox \@begindvibox
\global \let \@begindvi \@empty
l.7 \end{document}
?
これは dvipdfmx 指定だと ok です。
2015 は「dvips.def 2015/12/30 v3.0k」
2016 は「dvips.def 2016/06/02 v3.0l」あるいは「dvips.def 2016/06/17 v3.0m」
なので調べてみると、dvips.def はごく最近「setpagesize を pdflatex と latex + dvips で
同じに機能するように」というパッチが入っていることがわかりました。
これが悪さをしていて(geometry.sty が縦組で使えないのと同根の)エラーになっています。
おそらく解決するには pLaTeX と dvips.def の両方の改変が必要そうなのですが、ひとまず。
今わかっていること:エラーを消し去るだけなら、pLaTeX で
\def \@begindvi{%
\iftbox\@begindvibox\tate\else\yoko\fi
\unvbox\@begindvibox
\global\let \@begindvi \@empty
}
と定義すればすみますが、それだけだと width と height が置き換わらないので変なことになります。
(連投すみません。)
Incompatible direction list can't be unboxed. エラーの出かたが
\documentclass{tarticle}
\usepackage{color}
\AtBeginDvi{}
\begin{document}
あ
\end{document}
だと
\AtBeginDvi ...vibox \vbox {\unvbox \@begindvibox
#1}
で引っかかり
\documentclass{tarticle}
\usepackage{color}
\begin{document}
あ
\end{document}
だと
\@begindvi ->\unvbox \@begindvibox
\global \let \@begindvi \@empty
で出るので
\def \@begindvi{%
\iftbox\@begindvibox\tate\else\yoko\fi
\unvbox \@begindvibox
\global\let \@begindvi \@empty
}
\def \AtBeginDvi #1{%
\global \setbox \@begindvibox
\vbox{\iftbox\@begindvibox\tate\else\yoko\fi
\unvbox \@begindvibox #1}%
}
を pLaTeX に入れてみたところ、dvips.def など他を変えずに済む気がしてきました。
Incompatible direction list can't be unboxed. エラーの出かたが
\documentclass{tarticle}
\usepackage{color}
\AtBeginDvi{}
\begin{document}
あ
\end{document}
だと
\AtBeginDvi ...vibox \vbox {\unvbox \@begindvibox
#1}
で引っかかり
\documentclass{tarticle}
\usepackage{color}
\begin{document}
あ
\end{document}
だと
\@begindvi ->\unvbox \@begindvibox
\global \let \@begindvi \@empty
で出るので
\def \@begindvi{%
\iftbox\@begindvibox\tate\else\yoko\fi
\unvbox \@begindvibox
\global\let \@begindvi \@empty
}
\def \AtBeginDvi #1{%
\global \setbox \@begindvibox
\vbox{\iftbox\@begindvibox\tate\else\yoko\fi
\unvbox \@begindvibox #1}%
}
を pLaTeX に入れてみたところ、dvips.def など他を変えずに済む気がしてきました。
pLaTeX の出力ルーチンの「実際に \shipout
するところ」は次のようになっています。
\shipout\vbox{\yoko ... \@begindvi ...
先の \@begindvi
の再定義では、(場合により)組方向モードを \tate
に変えてしまうので都合が悪いと思います。かといって、「ボックスの中で一部だけ組方向を変更する」こともできません。
私自身は、この「\shipout
で \yoko
が指定されている」ことを根拠として、次のような前提を立てています。
\@begindvibox
は(空でない限り)常に横組でなければならない。
(つまり \@begindvibox
を縦ボックスにしてしまう操作は“不適切”。)
この考えに従うと、\AtBeginDvi
を次のように修正することになります。
\def\AtBeginDvi#1{% \global\setbox\@begindvibox \vbox{\yoko\unvbox\@begindvibox #1}}
例えば、pxchfon パッケージの実装コードでは、(\AtBeginDvi
には手をつけず、別の名前で)上記のコードを使用しています。
自分が書いたコード以外で、同様の考えをしているものとして、lltjp-geometry パッケージがあります。(pTeX エンジンの場合に、上記の再定義を行います。)
あと、LuaTeX-ja のカーネルも、上記と全く同じコードで \AtBeginDvi
の再定義を行っています。もっとも、この場合 \yoko
は“LuaTeX-ja の \yoko
”なので厳密には同じではありませんが。
dvipdfmx.def の 2016/07/02 v4.10 で、dvips.def と同様の
\AtBeginDocument{\AtBeginDvi{}}
を使った papersize special 機能が追加されました。
したがって、2016/07/01 より古い pLaTeX / upLaTeX を使用している場合、
縦組で graphicx や color の dvipdfmx オプションが
Incompatible direction list can't be unboxed.
なるエラーになります。最新版の pLaTeX / upLaTeX (2016/07/01) なら大丈夫です。
ギリギリのタイミングで更新していた (forum:1967) ので命拾いしました…
\AtBeginDocument{\AtBeginDvi{}}
を使った papersize special 機能が追加されました。
したがって、2016/07/01 より古い pLaTeX / upLaTeX を使用している場合、
縦組で graphicx や color の dvipdfmx オプションが
Incompatible direction list can't be unboxed.
なるエラーになります。最新版の pLaTeX / upLaTeX (2016/07/01) なら大丈夫です。
ギリギリのタイミングで更新していた (forum:1967) ので命拾いしました…