LaTeX で「部分的な縦書き」

## この文書の目的

本記事では、(u)pLaTeX／LuaLaTeX+LuaTeX-jaにおいて**「横組みの文書中で部分的に和文縦書きを入れる」**方法について説明する。

### 旧版の前口上

>   この小節は、本記事の初版における“前口上”の文章であり、古い情報を含む。特に、現在では、まともな和文縦組み文書を作ることを目的とした「[jlreq文書クラス]」[^jlreq]の開発が進んでいて既に実用できる段階に達していることを補足しておきたい。

現在、日本語対応のTeXとして最も広く用いられているpTeX（upTeXも含む；以下同様）は高品位の日本語縦組みの組版を行う能力を持っているが、残念ながら現状でその力が十分には活かされていない状態である。これにはもっともな理由があって、一般のLaTeX利用者がそれを利用できる環境が整っていないからである。

日本語の伝統的な組版の慣習への準拠が求められる度合いは横組みに比べて縦組みの方が高い。そのような多くの要請にpTeXを対応させる試みは既に行われているものの、現状のpLaTeXの縦組み用の文書クラス（tarticle等）にはそれが反映されていない。そのため、TeX言語の知識を持たない通常のLaTeXユーザが得られる縦組み文書は色々な問題を抱えており、Microsoft Wordや一太郎などの一般的なワープロソフトにも品質で劣るという残念な結果になっているのである。

しかし、現状でもpTeXの縦組み機能を活用する場面は存在する。それは**「横組みの文書中で部分的に縦書きを入れる」**ことである。後で例示するように、“典型的なLaTeXの利用方法”である論文体裁の横組み文書の中でも縦書きが必要となることがある。

そういうわけで、本記事では「部分的な縦書き」の方法について説明する。

## とにかく「部分的な縦書き」をやってみよう

「縦組みの文書」を作る場合と異なり、「部分的な縦書き」には特別な文書クラスは必要ない。いつも使っている文書クラス（例えばjsarticle）で大丈夫である。

(u)pLaTeX標準の縦組み関連の機能はplextというパッケージに収められている。なので何はともあれ **plextパッケージを読み込もう**。

```latex:(u)pLaTeXの場合
\usepackage{plext}
```

LuaLaTeX+LuaTeX-jaではplextの代わりに**lltjextパッケージ**を読み込む。

```latex:LuaLaTeX+LuaTeX-jaの場合
\usepackage{lltjext}
```

その上で、本文（横書き）において、`\pbox<t>{テキスト}`と記述すると、引数のテキストの部分だけ縦書きになる。周りのテキストは横書きのままである。

```latex:upLaTeXの場合
\documentclass[uplatex,a4paper]{jsarticle}
\usepackage{plext}
\begin{document}
縦書ーき\pbox<t>{縦書ーき}横書ーき
\end{document}
```

```latex:LuaLaTeX-LuaTeX-jaの場合
\documentclass[a4paper]{ltjsarticle}
\usepackage{lltjext}
\begin{document}
縦書ーき\pbox<t>{縦書ーき}横書ーき
\end{document}
```

![部分的縦書きの例1](https://qiita-image-store.s3.amazonaws.com/0/14550/d2f2f17d-82fc-6d48-ed8e-4d6e64b5eb25.png)

上の例から判るように、横書きの行の中で「部分的な縦書き」は一つの「縦に長い文字」のように扱われる。

これさえ覚えておけば、次にあげる例のように、グラフの縦軸のラベルを書くときに文字を回転させずに「縦書き」にすることができる。

```latex
\begin{picture}(100,80)(-15,-15)
\put(-15,-15){\framebox(100,80){}}
\put(0,0){\vector(1,0){80}}
\put(0,0){\vector(0,1){60}}
\put(24,-10){\footnotesize 海賊の数}
\put(-11,8){\footnotesize\pbox<t>{地球平均気温}}
\end{picture}
```

![部分的な縦書きの応用例](https://qiita-image-store.s3.amazonaws.com/0/14550/59e99ce4-c711-0aff-79ec-7b87fc2b7fea.png)


## もっと詳しく

以下では、plextパッケージが提供する「部分的な縦書き」の機能[^plext-feat]について一通り解説する。

[^plext-feat]: plextは他にも様々な「日本語組版向けの」拡張機能を提供している。

### 「部分的な縦書き」の命令

plextパッケージを読み込むと、以下に挙げる命令・環境について「組方向オプション」が指定可能になり、これを利用して当該の命令・環境の内部の組方向を外部のものと異なるものに変更できるようになる。

  * array環境／tabular環境
  * minipage 環境／`\parbox` 命令

これに加えて、「`\makebox`命令の組方向オプション対応版」である`\pbox`という命令が新たに用意される。

### 組方向オプション

組方向オプションは各命令・環境のオプション引数（つまり省略可能）であり、`< >`で囲った形で指定する。すなわち、各々の命令・環境の完全な書式は以下のようになる。

  * `\begin{array}<組方向>[垂直位置]{列書式指定}`～`\end{array}`
  * `\begin{tabular}<組方向>[垂直位置]{列書式指定}`～`\end{tabular}`
  * `\begin{tabular*}<組方向>{幅}[垂直位置]{列書式指定}`～`\end{tabular*}`
  * `\begin{minipage}<組方向>[垂直位置][高さ][内部位置]{幅}`～`\end{minipage}`
  * `\parbox<組方向>[垂直位置][高さ][内部位置]{幅}{テキスト}`
  * `\pbox<組方向>[幅][水平位置]{テキスト}`

組方向オプションは、次の3つの何れかを指定できる。

  * `<y>`： （外部が縦書きの場合に）内部を横書きに切り替える。
  * `<t>`： （外部が横書きの場合に）内部を縦書きに切り替える。
  * `<z>`： （外部が縦書きの場合に）内部を“回転した横書き”に切り替える。

![組方向オプション](https://qiita-image-store.s3.amazonaws.com/0/14550/5896243a-16e9-6a60-ac6b-94eacd8d25f9.png)

さて、この記事では「部分的な縦書き」を扱っている訳で、組方向オプションの3つの値のうちそれに相当するのは `<t>` である。従って、さしあたっては**「\<t\> を付ければ縦書きになる」**ことを覚えておこう。

組方向オプション以外の部分の書式とその意味については、plext拡張前と全く変わらない。また、前述の通り、`\makebox`に組方向オプションを付けたのが`\pbox`命令なので、`\pbox`の組方向オプション以外の引数の意味は `\makebox`のそれと全く同じである。

### 縦書き中の上下左右

(u)pLaTeXの縦組みでは、従来の（横組みの）LaTeXの命令体系をなるべく尊重する形で拡張が行われている。その関係で、縦組みを行っている時には次のように**「方向の解釈」が変わる**：

  * “水平（horizontal）”が「縦方向」、“垂直（vertical）”が「横方向」になる。
  * “上（top）”／“下（bottom）”／“左（left）”／“右（right）”が本来の方向より時計回り 90°だけずれた方向を指す。つまり、それぞれ右／左／上／下を指す。

例えば次のような例を考える。

```latex
\parbox<t>{10zw}{%
  アレ\hspace{3zw}コレ\par
  \vspace{2\baselineskip}%
  ソレ！
  \begin{flushright}
  敬具
  \end{flushright}
  {\TeX}はア\raisebox{.5zw}{レ}
}
```

これの組版結果は次のようになる。「上下左右」が 90°ずれていることが解るだろう。

![縦書き中の上下左右](https://qiita-image-store.s3.amazonaws.com/0/14550/d26ea32c-b1ca-87dc-be08-b6b2970fca31.png)

## \pbox と \parbox のサンプル

組方向拡張された命令群のうち、`\pbox` と `\parbox` は純粋に「部分的な縦書きをする」という機能を果たすものという点で非常に重要である。従って、最後にこの 2 つの命令について、組方向以外のオプションを変化させたサンプルを載せておく。特に、「普通に横組したもの」との位置関係に注意してほしい。

※蛇足であるが、もし本記事の内容に関心があって、しかも（縦組拡張無しの）`\makebox`や`\parbox`についてよく知らないという人は、是非ともこれらの命令について手許のLaTeXの参考書で調べてみてほしい。そうすれば、組方向以外のオプションの意味についても理解できるであろう。

### \pbox 編

```latex
横\pbox<t>{縦書}書\qquad
横\pbox<t>[4zw][l]{縦書}書\qquad
横\pbox<t>[4zw][c]{縦書}書\qquad
横\pbox<t>[4zw][r]{縦書}書\par
```

![pboxの使用例](https://qiita-image-store.s3.amazonaws.com/0/14550/78cf9045-5a9f-4a65-1872-ac1dc36ce0d7.png)

※横書きで和欧文混植を行う場合、通常は、和文文字文字のボディをを欧文ベースラインより下に少しはみ出すように置く。それに対して、縦書きの`\pbox`はベースライン上に乗るように配置される。

### \parbox 編

```latex
\parbox<t>[t]{4zw}{{\LaTeX}はアレ。}\qquad
{\LaTeX}は\qquad
\parbox<t>[c]{4zw}{{\LaTeX}はアレ。}\qquad
アレ。\qquad
\parbox<t>[b]{4zw}{{\LaTeX}はアレ。}\par
```

![parboxの使用例](https://qiita-image-store.s3.amazonaws.com/0/14550/47447f57-f953-b2fa-7d77-5d4d7cb2e39d.png)

[jlreq文書クラス]: https://github.com/abenori/jlreq
[^jlreq]: jlreq文書クラスはTeX LiveやW32TeXの配布に含まれている。