おそらく、TeX / LaTeX を使用する方の多くは、普段は横書きをメインに使われていると思います。僕自身も、おそらくコンピュータで扱う文書の9割以上が横書きです。しかし、日本では、特に印刷媒体においてまだまだ縦書きが主流で、新聞や各種雑誌などを見ても、ほとんどの出版物で縦書きが用いられています。ここでは、TeX / LaTeX による縦書きの文書のタイプセットに関して、簡単にふれておくことにします。
TeX / LaTeX での縦書きの前に、縦書きと横書きについて少し復習しておきましょう。
ひとくちに縦書き・横書きと言いますが、実際には4種類の書き方があります。
東アジアの多くの国では、中国語からの影響で縦書き表記が使われてきました。中国語の縦書きでは、右から左に改行する右縦書きが一般的でしたが、これにならって、それらの国でも右縦書きが使われてきました。唯一例外的なのはモンゴル語で、左から右に改行する左縦書きが用いられます。これはモンゴル語が中国語由来ではなく、ソグド文字起源のウイグル文字に由来するためだそうです。
中国語由来の縦書き表記を用いる国では、「一行あたり1文字の縦書き表記」という解釈で横書きが行われるようになりました。このため、欧米で一般的にみられる左から右への横書き(左横書き)ではなく、右から左への横書き(右横書き)表記だったわけです。
ヨーロッパ近縁においては、アラビア語やヘブライ語が右横書きです。ただし、これらの言語でも数字は左から右に書きます。
日本における横書きは、縦書き同様中国語の影響を受けたもので、古い建物の扁額(建物の入口などに掲げられた額)などにみられるような右横書きでした。これは前述のとおり、「一行あたり1文字の縦書き表記」として行われていたものです。
日本における左横書きの起源は、幕末にオランダ語の表記を真似して書かれたもののようです。やがて、普通の文章を書くのにも横書きが用いられるようになりましたが、太平洋戦争の終戦前までは、新聞や雑誌などではほとんど右横書きが用いられていました。
この右横書きを左横書きに改める動きは、意外なことに旧日本陸軍等から出てきたものだそうですが、戦時中は「欧米崇拝」であるとして、左横書きの看板を掲げた商店に対し、右横書きに改めるよう投書をする運動なども行われていたようです。
このような右横書きも、終戦に伴い、急激に左横書きに統一されていきました。官公庁においても、『公用文作成の要領』(1951年(昭和26年)10月30日国語審議会審議決定・1952年(昭和27年)4月4日内閣官房長官依命通知)内「第3 書き方について」で:
と定められ、現在は法律案や閣議に関する文書を除いて、公文書も左横書きになっています。執務能率を増進する目的をもって、書類の書き方について、次のことを実行する。
1 一定の猶予機関を定めて、なるべく広い範囲にわたって左横書きとする。
(以下略)
20世紀以降、東アジアの国々での国語表記法は大きな変容を遂げてきました。たとえば、中国語の影響で用いられていた漢字が使われなくなり、アルファベット(たとえばベトナム語)やハングル(朝鮮語)に置き換えられたりした国が少なくありません。
これと同様に、従来縦書きが一般的であったものが、欧米の左横書きに倣った体裁が好まれるようになった結果、縦書きがほとんど行われなくなった国が少なくありません。たとえば、東アジアの縦書きの元祖である中国ですら、現在は習字以外で縦書きをすることはまずない状態です。また、モンゴル語の場合は、キリル文字による表記が導入されたのに伴い、ほとんどの文書が左横書きとされるようになりました。朝鮮語も左横書きが広く用いられるようになっていますが、朝鮮語の場合はこれに加えて、縦書きも左横書きが用いられることが増えているようです。
先に書いたとおり、日本においては未だに右縦書きがひろく用いられています。しかし、ここまで見てきた通り、現代の世界において右縦書きをこれ程日常的に用いているのは、もはや日本人位なのです。
日本人はこれからどうすべきなのでしょうか。他国と同じように、左横書きだけを使うようにする、という選択肢もあるでしょう。しかし、右縦書きが印刷媒体にひろく用いられているひとつの理由として、日本語を読むときには右縦書きが読み易いということが挙げられます。たとえば、数百ページもある小説を読むときに、右縦書きと左横書き、どちらが読み易いか、考えてみて下さい。
この右縦書きの「読み易さ」を失うのは、日本語という言語において決して小さくない損害でしょう。そして、それは文化を失うということでもあります。しかしながら、右縦書きを容易に行える環境なしには、この電子化された社会で、右縦書きが使い続けられることはないでしょう。
幸いにして、我々は TeX / LaTeX / LuaTeX で右縦書きの文書を扱うことができます。ですから電子文書一般に、特に書類のような公的文書でない文書にひろく、右縦書きを使うべきなのかもしれません。さもなくば、他国の言語と同じように、日本語においても、縦書きは消えていってしまうかもしれないのです。
能書きが長くなってしまいましたが、縦書きと TeX / LaTeX の話に入りましょう。
これまで長きに渡って、日本語縦書きのタイプセッティングが可能な TeX / LaTeX は、アスキー(現アスキー・メディアワークス)の pTeX / pLaTeX が、現実的かつほぼ唯一の選択、ということになっていました。そこに燦然と登場したのが luatex-ja です。ここでは pTeX / pLaTeX と LuaTeX + luatex-ja の双方に関して、縦書きの実際を書いていくことにしましょう。pTeX / pLaTeXは、縦書き文書を扱えるよう拡張された TeX / LaTeX です。旧アスキーは1990年にこの pTeX / pLaTeX を公開しました。
これまでも見てきたように、2010年以降の TeX Live には pTeX / pLaTeX(正確にはレジスタ拡張を行った epTeX / epLaTeX)が標準で収録されています。ですから、TeX Live のインストールを行うだけで、日本語を pTeX / pLaTeX で扱うことが可能になります。
luatex-ja は、LuaTeX / LuaLaTeX を用いて日本語を取り扱うためのパッケージです。当初はルビと縦書きにおいて、pTeX / pLaTeX と同じことがなかなかできなかったわけですが、現時点では、pTeX / pLaTeX でできることはほぼ全て可能な状態になっています。処理速度に関しては、LuaJITTeX を使用しても若干の遅さを感じることになるわけですが、小規模な文書に対しては、むしろ luatex-ja を使う方が(フォント設定等の簡便さをみても)利があるかもしれません。
それでは、実際に縦書きの文書をタイプセットしてみることにしましょう。縦書き文書を TeX / LaTeX で扱う場合も、しなければならないことは横書きの場合と基本的には変わりません。
縦書きの文書を作成する際には、縦書き用のクラスファイルを使用します。pLaTeX で使用できる縦書き用クラスファイルは:
文書を作成し、platex で処理して DVI ファイルを作成したら、dvipdfmx や dvips で PDF ファイル、もしくは PS ファイルを生成します。この辺のプロセスは、通常の横書きの場合と特に変わることはないでしょう。
では、まずは文書を書いてみましょう。
これをタイプセットした結果はこのようになります。\documentclass[a5j,12pt]{tarticle} \title{縦書きのテスト} \author{何之 某} \date{} \begin{document} \maketitle \section{はじめに} これは日本語を書くためのテストです。 縦書きの場合も、横書きの場合同様に、段落の行頭には自動的に空白が挿入されます。 行換えの場合は勿論その空白は入りません。この文書もそうなっているでしょうか? \section{短いですが} 例はこんな感じです。 \end{document}
何のヒネりもないのですが、上から見ていくことにしましょう。まず \documentclass ですが、クラスファイルとしてここでは tarticle.cls を指定しています。縦書きの場合、A4 を縦に使って縦書きすると1行が長くなり過ぎるので、ここでは a5j を指定しています。もし、A4 版を横長に使いたい場合には、
のように landscape を指定しておいて、dvipdfmx で PDF を生成するときに、\documentclass[a4j,12pt,landscape]{tarticle}
のように、用紙サイズと横向きであることとを明示します。$ dvipdfmx -p a4 -l <filename>.dvi
上の PDF ファイルを見ると分かると思いますが、tarticle / treport / tbook で横書きと同じようにタイトル・名前(そして日付)を付ける場合、横書きのものをそのまま縦に直した体裁になってしまいます。原稿用紙に作文を書くような題名の体裁にしたいときは、そのように記述をする必要があります。たとえば……
(「○」は全角スペースです)などとすることになるでしょうか。この \flushleft, \flushright の使い方などからも分かると思いますが、縦書きは横書きを90°横倒しにしたイメージで実現されています。 これをタイプセットした結果はこのようになります。{\Large \begin{flushleft} ○○○縦書きのテスト \end{flushleft} \begin{flushright} 何之○某○ \end{flushright} }
縦書きの場合、横書きではあまり注意する必要のなかったことを注意しなければなりません。主なものを以下に挙げます。
いわゆる半角の英数字は、縦書きの版組みでは 90°右に回転した状態で配置されます。これは先程から書いているように、縦書きが横書きを90°横倒しにしたイメージで実現されているからなのですが、桁数があまり大きくない文字列の場合は、縦書きの文字と同じ向きに統一した方が読み易いことも少なくありません。また、縦書きの向きにする場合も、1文字ごとに縦に配置したい場合と、何桁かの文字列をまとめて縦に配置したい場合があるかと思います。
英数字を1文字だけ縦に配置したい場合、最も単純な方法はいわゆる全角で書くことです。これで用が足りる場合も少なくないかもしれませんが、いわゆる全角のフォントは、通常英数字に用いられるフォントと同じではありませんし、フォントの選択の余地もほとんどありません。
このような場合に、英数字を本来のフォントで、全角にすることなく縦書きにしたり、何桁かの英数字をひとまとめにして縦書きにしたりすると読み易くなりますが、このような処理をした文字、もしくは文字列を「連数字」といいます。
t から始まる縦書き用スラスファイルの読み込みの際に、縦書きで必要とされる処理をサポートした plext パッケージが自動的に読み込まれます。この plext パッケージでは、連数字処理を \rensuji{} コマンドで実現しています。下図は、
を縦書きで組んだ結果です。12個で1ダース、144個で1グロス。 12個で1ダース、144個で1グロス。 \rensuji{12}個で\rensuji{1}ダース、\rensuji{144}個で\rensuji{1}グロス。
横書きの場合でも、日本語で引用符を用いるときには "引用符" や ``引用符'' ではなく、全角の“引用符”を用いる方が望ましいとされるのですが、これらの引用符はいずれも英語で quotation mark と呼ばれるものです。
日本語の縦書きの場合、この引用符として〝引用符〟を使います。これはダブルミニュート、あるいは「ちょんちょん」「ノノガキ」と呼ばれるものです。以下に、縦書きと横書き双方におけるダブルミニュートの使用例を示します。
上例のように、このダブルミニュートは横書きと縦書きで異なります。文字コードで言うと、横書きの左側(起こし)が CID:7608 (Unicode: U+301D)、右側(受け)がCID:7609 (Unicode: U+301F) 、縦書きの上側(起こし)が CID:7956 (Unicode: U+201C)、右側(受け)がCID:7957 (Unicode: U+201D) です。
このように文字コードが分かっている場合、OTF パッケージの \UTF{} や \CID{} で、
\CID{7608}横書きの引用符\CID{7609}
と書くことでダブルミニュートを使うことができます。また OTF パッケージで、\CID{7956}縦書きの引用符\CID{7957}
のように expert オプションを指定している場合、いわゆる全角の quotation mark(“”)が自動的にダブルミニュートに置き換えられます。ただし、CID 対応でない TrueType フォント等の場合、ダブルミニュート、特に縦書き・受けのダブルミニュートが収録されていません(IPA フォントはこれに該当します)のでご注意下さい。\usepackage[expert,deluxe]{otf}
ある部分を強調したい場合ですが、縦書きの場合、
pLaTeX による縦書きの場合、傍点と傍線は plext パッケージの \bou{} コマンドと \kasen{} コマンドで付与できます。圏点は、奥村晴彦氏の okumacro パッケージを読み込んでおけば \kenten{} コマンドで付与できます。okumacro を読み込む代わりに、okumacro の圏点に関わる部分:
をプリアンブルに記述しておけば使用できます。\makeatletter \def\kenten#1{% \ifvmode\leavevmode\else\hskip\kanjiskip\fi \setbox1=\hbox to \z@{・\hss}% 「・」は全角の中黒 \ht1=.63zw \@kenten#1\end} \def\@kenten#1{% \ifx#1\end \let\next=\relax \else \raise.63zw\copy1\nobreak #1\hskip\kanjiskip\relax \let\next=\@kenten \fi\next} \def\rensuji#1{\hskip\xkanjiskip \hbox to 1zw{\yoko\hss#1\hss}\hskip\xkanjiskip\relax} \makeatother
LuaTeX-ja は今や強力に縦書きをサポートしています。ただし、縦書きの実装手法が pLaTeX と異なっている(横組で組んだボックスを回転させて縦組を行っている)ので、それが影響を及ぼす可能性はあるかもしれません。
このようなファイルを作ってみました。これを lualatex で処理すると……\documentclass[a5j,12pt]{ltjtarticle} \usepackage{luatexja} \usepackage[no-math]{luatexja-fontspec} \usepackage[sourcehan-jp]{luatexja-preset} \usepackage{luatexja-ruby} \usepackage{luatexja-otf} \title{縦書きのテスト} \author{何之 某} \date{} \begin{document} \maketitle \section{はじめに} これは日本語を書くためのテストです。 \section{短いですが} 例はこんな感じです。 12個で1ダース、144個で1グロス。 12個で1ダース、144個で1グロス。 \rensuji{12}個で\rensuji{1}ダース、\rensuji{144}個で\rensuji{1}グロス。 \pbox<y>{\CID{7608}横書きの引用符\CID{7609}}\pbox<y>{〝横書きの引用符〞} \CID{7956}縦書きの引用符\CID{7957}〝縦書きの引用符〞 \bou{傍点}、\ltjruby{圏|点}{・|・}、\kasen{傍線}。 \end{document}
圏点に関しては okumacro.sty が使えないので、ルビを使って書いています。特徴的なのはダブルミニュートの挙動です。全角のダブルクォーテーション「〝 〞」を luatexja-otf.sty と併用すると、各々の場合で適切なダブルミニュートに置換してくれる機能があるのですが、縦書きではこれが機能しているのに対して、横書きではちょっとおかしなことになっています。これに対して、CID で直接ダブルミニュートを指定する記法では、横書きでは従前通りの結果が得られているのに対し、縦書きではおかしなことになっています。
とは言え、縦書き全般に関しては、LuaTeX-ja はかなり使える状態です。今後ユーザーがどんどん増えてくれることを、僕も祈っています。