縦組み書籍における英数字の使われ方

日本語の縦組み書籍の中で英数字(ラテンアルファベットやアラビア数字)をどのように使うかはかなり悩ましい問題です。

この問題を整理するにあたり、実際の書籍で少し実態を調べてみたいと思います。少しずつになりますが。

例えば、「昭和史発掘9」(松本清張、文春文庫、2005年11月10日新装版第一刷)ではアラビア数字は次の使われ方だけで、年号、日にち、年齢、人数などの数字はすべて漢数字で表記しています。
・表紙の「9」という巻数
・節番号(1,2,・・・)
・箇条書きの項目番号(p.63)
・奥付け(横組)
・目次のページ番号(縦中横)
・柱のページ番号(横書き)
☆最後の3つは横方向。

また、外国人名、国名・地名、外国語由来の単語はカタカナで表しています。そして、アルファベットは奥付け以外には、「A行動記」「B仙台発見遺書」(順序記号)(P.231)「Y判士」(p.294)のような使い方だけで、つまり1文字の記号として使っているだけです。この場合は正立です。

次の例では、「翔ぶが如く五」(司馬遼太郎、文春文庫、2007年4月5日第7刷)でもアラビア数字は目次(縦中横)と柱と奥付け(横組)しかでてきません。本文の中では数字は漢数字表記です。外国人名、地名、外来語はカタカナ表記でラテンアルファベットはエープ山(App-Hill)(p.236)に横倒し表記で使われているだけです。

また、「日本の一番長い日」(半藤 一利、文春文庫、2006年7月10日第1刷)ではアラビア数字は目次、柱、奥付け以外では注番号(縦中横)ででてきます。ラテンアルファベットは、「subject to」の訳についての話題(p.37)で英語として横倒し、K型、A型いづれも1文字で正立のような使い方です。

上の3冊の小説では次のようにまとめることができます。

(1)アラビア数字を横倒しにした例はありません。

但し、目次、注番号、などに縦中横形式で多用されていますので縦中横が使えないときどうするか、と言う問題があります。

(2)ラテンアルファベットは記号として1文字を使うことがあり、このとき正立します。また、英文(単語含め)を表すために使うときは横倒しです。

関連記事:
縦組み書籍における英数字の使われ方―その2(共同通信社の記者ハンドブック)

未来の縦書き文字の表示はどうなるの?

Webなどで日本語の縦書きを表示できるようにしようという標準化プロジェクトが進んでいます。この標準化が進みますとパソコンやスマホを初めとして様々な場所で日本語を縦書きで表示できるようになるでしょう。大賛成・歓迎です。

これに関連して、いま、関係者の間で熱い議論になっているのは、プレーン・テキストを縦書きでどう表示するか、ということです。

プレーン・テキストとはなんでしょうか?現在、多くの方がWebのページや電子メールなどで横書きの文字を読んでいますが、Webページでは文字に大きさやフォントの種類などの様々な指定がなされています。一方、これに対して電子メールを読むときは飾りのない文字を読んでいます。この飾りのない文字をプレーン・テキストと言います。

このプレーン・テキストを縦書きでどのように表示するか、というのは簡単な問題ではありません。さらに、日本の文字だけではなくて、世界中の文字を考慮して、標準を決めようとするとなかなか大変なことです。従って、論点が沢山出てくるわけですが、その中の一つに次があります。

日本語のプレーン・テキストの中にアルファベットや数字を含んでいるとき、アルファベットや数字を縦書きするときはどうすべきか。

まず、従来の横書きでは、日本語の中にアルファベットや数字があったときは、次のように表示されます。

これを縦書きにするとき、アルファベットや数字の表示の仕方として次の図に挙げた3通りを考えることができます。


PDF版

A.は英数字をすべて横に寝かせる方法です。
B.は英数字をすべて正立させる方法です。
C.は英数字の中で、英語の範囲を横に寝かせ、その他の英文字と数字を正立させる方法です。

C.は日本の縦組みの書籍で一般に使われている方法です。これを実際に行なうやり方には2つあります。
C-1.文章を入力するときに、横に寝かせる英数字を半角文字で、正立させる英数字を全角文字で入力する。印刷・表示のときに全角文字を正立させ、半角文字を横倒しする。
C-2.英数字の入力する際には、全角文字と半角文字は区別しないで、何らかの方法で正立する文字と寝かせる文字を判別する。

この中ではどれが良いでしょうか。

少し補足しますと、日本語の表示には多くの場合、英数字に全角形と半角形が使えます。A、B、C-2は全角形と半角形を文字としては区別をしないことを前提としています。つまり、全角形と半角形を文字として区別しないでしかも文字の種類だけで方向を決めるとするとA、B、C-2の選択肢となります。

それに対して、C-1は全角形と半角形を文字として異なるものとして取り扱います。C-1の問題点は全角文字と半角文字を使い分けるのはなかなか難しいことで、原稿レベルでは混乱していることがあります。また、横書きと縦書きを切り替えるときにも少々難があります。あまり推奨されません。

これまでの多くのソフトウエアは全角文字と半角文字を別の文字として扱ってきました。しかし、最近は全角文字と半角文字を同じ文字として、表示の際に全角形と半角形を切り替えることができるようになってきています。全角文字と半角文字を区別しないとするとどうするか?ということを考えないといけなくなるわけです。

○詳細:http://blog.cas-ub.com/?p=614
○この話は、文字、フォント、グリフに関する知識があるとより分かりやすくなります。これについては、現在執筆中の「PDFインフラストラクチャー解説」に詳しく説明しています。興味のあるかたは、EPUB版(未完成)を配布していますのでどうぞ→http://www.cas-ub.com/project/

CSSの縦書きとUnicode(TR#50)がホットです

CSS3のWriting Modeで縦書きを指定できるようになって、EPUB3がそれを採用してEPUBで縦書きができるようになった、というのは昨年(2010年~2011年)の話です。

CSS Writing Modes Module Level 3

その後、Unicodeで文字のコードポイント毎に方向の特性を定義しようという、TR#50というものが浮上しています。

UNICODE PROPERTIES FOR VERTICAL TEXT LAYOUT(Draft)

この全体像はまだ読んでいないですが、ざっと見ると、縦書きにするときの文字の挙動として、文字単位で次の分類をしようとしています。

U:直立する文字 characters which are displayed upright
S:横倒しになる文字 characters which are displayed sideways
SB:横倒しになる括弧 brackets which are displayed sideways
T:単に上とか横ではなく、別のグリフが必要な文字 characters which are not just upright or sideways, but require a different glyph

スコープとしては、主に日本語の文字ですが、中国語などにも広げようとしているように見えます。

そして、CSS3の新しいEditor’s Draftでは、縦書きではこのUTR#50を利用して縦書きのときの文字の挙動を指定しようとしているようです。(注1)

CSS Writing Modes Module Level 3 Editor’s Draft 5 January 2012

さあ、これはうまく行くのでしょうか?直感的にはあまり意味がないような気がします。理由は以下の通りです。

「PDFインフラストラクチャ解説」http://www.cas-ub.com/project/index.html(でEPUB版を無償配布しています。)で文字と字形について整理しています(『PDFインフラストラクチャ解説』はプリントオンデマンドとEPUBを販売しています。)ので、そこを読んでいただくと分かると思いますが、文字のコードポイントは抽象的字体を定めるものであって、文字の表示形(字形、グリフ)を決めていない、と考えています。そして、文字の字形を与えるものはグリフであって、現在のフォント技術ではグリフはフォントファイルの中にあります。必然的に、コードポイントからグリフへのマッピングの仕組みが必要になります。日本語の縦書きは書記方法のひとつであり、表示形になるので本来コードポイントとは別の階層になります。コードポイントが基底階層とすると印刷や表示は表層です。そして日本語の文字には横書きと縦書きするときでグリフが違うものがあるのですが、これに対処するためにマッピングを切り替えることで文字の表示形を切り替える仕組を入れます。このマッピングの仕組みは必ずフォント依存になります(グリフはフォントファイルの中にあるからです)。

あとは、日本語の中に欧文などのほかの言語の列が来たときは、オリジナル言語の書記方向(たいていは左から右への横書き)で書いておいて、それを言語単位毎に文字列全体を回転させて日本語の文中に埋め込みます。こうすれば縦書きが簡単にできます。

こうして考えると、文字のコードポイント一つ一つに方向性を定義するのはあまり意味のないことだし、抽象化に反します。いわば、数十年前に先祖がえりというか・・・

しかし、CSS3 Writing ModeはTR#50に依存することになりそうです。これが正式な仕様になると、これからのブラウザは文字をひとつづつ回転させることになるかもしれませんね。どうもCSSのワーキングはフォント依存を嫌っているようなのです。その気持ちは分かりますが、しかし、フォント依存性をなくそうとすると文字毎に表示形を自力で操作することになり、また同時に、過去20年程度のフォントの技術の発展を無視することになります。以上のことからUTR#50は完全な解決策にはならないだろうと予想します(以上、1/11メモ)。

2012/1/13 追記(メモ)
TR#50をもう一度読みました。この文書は二つのこと、つまり日本語の(1)縦書きのときに字形を変えるべきかどうか、(2)文字と文字の間の空き量をどう変えるべきか、に対する指針を決めようとしているようです。この二つの問題は一応別の問題なので、とりあえず、ここでは(1)だけ取り上げることにすると、まず、Unicodeをはじめとする文字セットは原則として抽象的な文字(漢字の場合は字体)を決めているものです。そして、抽象的な文字を使って、日本語を横書きか、縦書きで書き表すことになります。現在日本語で使われている文字の中には、a. 横書専用の文字(例:U+2019 RIGHT SINGLE QUOTATION MARK)b.縦書き専用の文字(U+301D REVERSED DOUBLE PRIME QUOTATION MARK)c.縦書きと横書きで字の形(グリフ)が同じでよい文字(ほとんどの漢字)、d.縦書きと横書きで字の形を変えるべき文字(句読点類、括弧類など)があります。例は、日本語組版処理の要件(日本語版)(JLReq)の付属書に記載されているものより。

ですので、もし日本語の文字を分けるとすると上のa.~d.に分けるのが良いと思います。

さて、ラテンアルファベットなども日本語として1文字づつ使うときは、c.(日本語の縦書きで直立)にすべきで、URT#50で、CL-27(Western Character)をS:横倒しとしているのは正しくないでしょう。但し、英語の単語が縦書きの中に現れれば単語ごとそっくり横倒しです。これは文字を回転するのではありません。(CL-27を横倒しにしているのは、UTR#50の著者の頭の中に英語表記のスコープが混じっているからだと思います。しかし、文字単位で考えたら縦になる(正立する)のは自明だと思います)。つまり、TR#50は日本語縦書きの中に英語や他の言語(合わせて欧文という)の表記が入るとどうするか、と言う問題、いわゆる和欧混交の段落を縦書きするときの話を混同していると思います。しかし、日本語の中における欧文の表記、和欧混交の表示問題はTR#50のスコープ外になっているようですし、これは別の問題としてスコープ外のままで良いと思います。(★ここはちょっと表現がよくなくて、コメントがあります)

2012/1/14追記
CSS3のWriting-modeでは日本語縦書きの中にラテン文字を直立させる組版方法は、text-orientation:uprightで、日本語縦書きの中にラテン文字を欧文組版のブロックとして挿入する方法はtext-orientation:upright-rightを指定すると実現できます。従って、問題は縦書きのときのグリフとグリフメトリックスをどう決定するかということに尽きるようです。

2012/1/15追記
JLreqでは、日本語の縦組時に文中に挿入される英数字の向きは、(1)和文文字と同じように正常な向きで1字1字配置する。(2)主に英字の単語、文などは文字を時計回りに90度回転し,配置する。という二通りを挙げている。

英数字(ASCII文字)のUnicodeにおけるコードポイントは、Basic Latin(U+0020~たとえばAにはU+0041)であり、慣例的に半角形と呼ばれる。UnicodeではASCII文字の全角形(異形文字)にはコードポイントU+FF00~(たとえばAの全角形はU+FF21)が与えられている。したがって、(1)のように直立するときは全角形の文字コードを使い、(2)のように寝かせるときは半角形の文字を使いわければ、1冊の出版物の中で(1)と(2)の印刷時の表記を使い分けることができる。しかし、もし、一つの出版物の中ですべての英数字を半角形で作成すれば(1)と(2)の表記を自動的に切り替えることはできない。このときは、英数字の直立・横倒しを切り替えるには何からのマークアップを使う必要がある。

日本語を読む上では、(1)の表記の方が読みやすく、(2)のような横倒しは読みにくいのは明らかである。もし、全角文字と半角文字を使い分けせず、また、文字が横倒しになるのをできるだけ避けるとするならば、解決策としては、連続3文字までは直立し4文字以降は横倒し、というような規則で自動処理する方法もあるだろうが、あまり有効に働きそうもない。

で結局?

ASCII文字を立てる寝かせるというような問題は言語の書記方法の問題なので、Unicodeのような標準にはなじまないのではないか?

————————————————————–
(注1)
CSS Writing Modeのエディタは、UTR#50の文字のスコープをUnicodeの全域に広げようとしているようだ。そのために文字のカテゴリーを少し詳しく定義しなおすことを試みている。
http://dev.w3.org/csswg/css3-writing-modes/#vertical-typesetting-detailsの抄訳
(なお、この文章はエディターズ・ドラフトというものであって、CSSの正式なドキュメントではないので注意。)

1.URT#50と次の規則により縦組みの時の文字の挙動を5つのクラスのどれかに分ける。

なお、‘upright-right’と‘upright’は、CSS Writeing Modeのtext-orientation特性で指定する値である。この詳細は後述する。☆を見よ。

1) 直立upright (U)
‘upright-right’ と ‘upright’ 書記指定時で直立する
2) 横倒しsideways (Sv)
‘upright-right’ と ‘upright’ 書記指定時で横倒し (時計回りに90度回転) (★SvとSBの違いが分かりにくい)
3) 非ネイティブ non-native (Sh)
‘upright-right’ 書記指定時は横倒し、‘upright’ 書記指定時に直立
4) 括弧brackets (SB)
‘upright-right’ と‘upright’ 書記指定時にともに横倒し。しかし、縦書きをサポートするOpenTypeフォントが直立の異形グリフをもつので、縦組みフォント設定オンで直立する。
5) 変形transforms (T)
縦組みと横組みでグリフの形が大幅に変わるもの。‘upright-right’と‘upright’ 書記方向で直立するが、正しい組版では波形グリフを必要とする。

SvとShは、UTR#50執筆時ではSとなっている。‘upright’ 指定時の挙動の違いで分割した。

2)のSvは、Sカテゴリーの次の文字からなる:
・回転する縦書き言語に属する文字 (e.g. Mongolian)
・空白 (Zs), 接続文字 (Pc), ダーシ (Pd) あるいは括弧のような句読文字 (Ps, Pe, Pi, Pf)(★←SBに入っていたのではないか?)
・Box Drawing、Block Element区域の文字

その他のS文字はShになる。

2.Unicode文字の分類は次のようになるだろう。(以下のa, b, cの分類はUTR#50によるものだと思う。英語の文章はそうは読めないけれども。)

a. 括弧類brackets (SB)には次が入る

 東アジアのすべて全角(F) と広い(W) 括弧句読文字 (Ps, Pe, Pi, Pf)

b. 横倒しsideways (S)には次が入る

Currency Symbols (Sc), Math Symbols (Sm), and Modifier Symbols (Sk)、Dashes (Pd)(全角のハイフンマイナスを除く)
東アジアの半角East Asian Halfwidth (H) 文字、上付き、下付き、 and non-Indic fractions from the Other Number (No) category.
Aegean numbers and North Indic fractions from the Other Number (No) category.
All characters from the Box Drawing and Block Elements blocks
All directional arrows: the Arrows block, the Pointing hand symbols from the Miscellaneous Symbols block, any arrow from the Miscellaneous Symbols and Arrows block, any Dingbat arrows from the Dingbats block
Other Symbols (So) from the Latin-1 Supplement and Letterlike Symbols blocks.
Other Symbols (So) from the Aegean Numbers, Ancient Symbols, Common Indic Number Forms blocks
Characters belonging to any horizontal-only or rotating vertical scripts.

c. 直立upright (U)には次が入る

すべての東アジアの全角文字 (F) と広い (W) 文字でSBに割り当てられているものを除く
Other Numbers (No) and Other Symbols (So) except those assigned to S
All letters (L*), marks (M*), and numbers (N*) belonging to any translating vertical scripts.

3.☆text-orientationの値の説明。以下の値は縦組のときの話である。デフォルトは、‘upright-right’ なので、text-orientationになにもしない指定ときは‘upright-right’である。

a. ‘upright-right’ 縦組のとき、横書き専用のsriptの文字は横倒しになる。すなわち、標準の方向から時計回りに90度回転する。縦書きの記法がある文字は固有の方向となる。

b. ‘upright’ 縦組みでは、横書き専用のsriptの文字は直立で可視化される。このような記法の文字の字形は独立系となる(アラビア文字などの独立形のこと)。縦書きscriptの文字は固有の方向で書かれる。縦書き用の異形グリフや縦書きのフォントメトリックスが使えるときはテキストにセットする。