マクロツイーター

はてダから移行した記事の表示が崩れてますが、そのうちに直せればいいのに(えっ)

plext で組方向を変えるとどう配置されるか

メモメモ。

組方向拡張される命令・環境

某 Qiita の記事によると、以下のものが挙げられている。

  • \begin{array}<組方向>[垂直位置]{列書式指定}〜\end{array}
  • \begin{tabular}<組方向>[垂直位置]{列書式指定}〜\end{tabular}
  • \begin{tabular*}<組方向>[幅][垂直位置]{列書式指定}〜\end{tabular*}
  • \begin{minipage}<組方向>[垂直位置][高さ][内部位置]{幅}〜\end{minipage}
  • \parbox<組方向>[垂直位置][高さ][内部位置]{幅}{テキスト}
  • \pbox<組方向>[幅][水平位置]{テキスト}
    \pbox は「組方向拡張版 \makebox」に相当する。)

しかし実際には拡張される環境がもう一つある。picture である。*1

  • \begin{picture}<組方向>(幅,高さ)(変位横,縦)〜\end{picture}

これらの命令・環境について、組方向に <t> (横組の中の縦組)を指定した時に、内容(ボックス)と外側の行の垂直位置関係がどうなるかを調べた。一部の命令・環境では「垂直位置指定のオプション」(下線部)がありこの値(t、c、b)によって結果が異なるので全ての値を調べた。

※ただし tabular* や array は tabular と、minipage は \parbox と同じになる(なった)ので、ここで示す結果からは省いた。

横組の中の縦組(<t>)

% upLaTeX 文書
\documentclass[uplatex,a4paper]{jsarticle}
\usepackage{plext}
\begin{document}
\par\medskip
{\TeX}\pbox<t>{なんとか}アレ。
\par\medskip
{\TeX}\parbox<t>[t]{3zw}{なんとかかんとか}アレ。
\par\medskip
{\TeX}\parbox<t>[c]{3zw}{なんとかかんとか}アレ。
\par\medskip
{\TeX}\parbox<t>[b]{3zw}{なんとかかんとか}アレ。
\par\medskip
{\TeX}\begin{tabular}<t>[t]{l}ほげ\\なんとか\end{tabular}アレ。
\par\medskip
{\TeX}\begin{tabular}<t>[c]{l}ほげ\\なんとか\end{tabular}アレ。
\par\medskip
{\TeX}\begin{tabular}<t>[b]{l}ほげ\\なんとか\end{tabular}アレ。
\par\medskip
{\TeX}\begin{picture}<t>(40,30)\put(0,0){\line(2,3){20}}\put(20,30){\vector(2,-3){20}}\end{picture}アレ。
\end{document}

\pbox の出力。

\parbox の出力、上から順に [t]、[c]、[b] 指定。

tabular の出力、上から順に [t]、[c]、[b] 指定。

picture の出力。

まとめると、以下のようになっていることが判る。

  • t: 外の「ベースライン」と内の「ボックス上端」を合わせる。
  • c: 外の「数式軸(math axis)」と内の「ボックス中心」を合わせる。
  • b: 外の「ベースライン」と内の「ボックス下端」を合わせる。
  • 垂直位置指定のない \pbox や picture は b 指定と同じ動作。

これを見ると、c 指定については通常(組方向変換なし)の仕様に従っている。一方で t/b 指定は通常は「外のベースラインと内の『最上行/最下行のベースライン』を合わせる」という仕様であるが、内側と外側で「行の方向」が異なる時にはこの動作は実現できないので、「内側の最上/最下にあるのが“行”(水平ボックス)でない」場合の仕様に従っている。

縦組の中の横組(<y>)

縦組の中の横組(<y>)についても、同様の要領で調べてみた。

% upLaTeX 文書
\documentclass[a4paper,landscsape]{utarticle}
%\usepackage{plext}% 縦組クラスでは自動的に読み込まれる
\begin{document}
\par\medskip
{\TeX}\pbox<y>{なんとか}アレ。
% 以下同様, 先のソースの<t>を<y>に変える

右から順に、\pbox の出力、\parbox の [t]、[c]、[b] 指定の出力。

右から順に、tabular の [t]、[c]、[b] 指定の出力、picture の出力。

むむむむむむ……、なんだか、ややこしい。

*1:なぜ picture を省いたのかは今となっては判らない。pict2e などの「picture を拡張する」パッケージは縦組と相性と悪く、「拡張無しの picture 環境なんて今時誰も使わない」ということかも知れない。