UTR#50のフォーラムでの質問に答える: UTR#50とMVOは拙劣な規定であり、日本語の縦書きは不便になる

先日、UTR#50のフォーラムに「The approach of UTR#50 is different from Japanese standards」(UTR#50のアプローチはJIS X4051と異なる)というコメントを投稿した[1]ところ、次のような質問がありました。回答を直接英語で書くのは面倒なので、日本語で書いてGoogle Translationで翻訳してみようと思います[2]。うまくいくと一石二鳥だけど。(で結論としては、まだまだという感じですがとりあえず下訳的につかって修正したものを投稿しました[3]。まあ、私の英語力はそんなに高くないですので、便利といえば便利です。)

質問1. なぜ、我々の世界をJIS X 4051に限定する必要があるか?

質問2.UTR#50またはMVOが役に立たないというのであれば、その理由が分からない。

回答1.世界全体の言語の中で、文字を縦書きする言語は比較的少ない。現時点では、縦書きを採用する言語の中で、世界中で最も多くの人が使っているのは日本語である。過去においては縦書きで最も多く使われる文字は中国の漢字であった。また漢字文化圏の周辺には漢字以外にも縦書きする文字が多数あった――満州文字、モンゴル文字、西夏文字、契丹文字、ハングル、チュノムなど。しかし、中国本土の中国語は漢字の簡体字化に伴い、横書きに移行してしまった。また、周辺部の縦書きする文字の多くは消滅した。この結果、縦書きする文字は減っているのである。

縦書きの中に、横書きしかできない文字をどのように配置するかは非常に難しい問題である。これを正しく規定しているのはJIS X4051のみである。「日本語組版処理の要件」(JLReq)は、和欧混植に関する規定に関して、残念ながらJIS X4051よりも劣っている。

こうしてみると、JIS X4051は縦書きの中に横書き専用文字をどう配置するか――日本語組版でいう和欧混植――を正しく仕様化した世界で唯一の文書であるだろうと思う。縦書きの中に横書き文字を配置する方法に関して、JIS X4051をリスペクトするのは当然である。

逆に質問したい。縦書きの中に横書き専用の文字を配置する仕様を定めた文書が他にあるのか?あるのなら教えていただきたい。

回答2.Unicodeの文字は抽象的なものである。文字の形をグリフというが、印刷ではグリフの具体的な形状(グリフイメージ)をレンダリング(可視化)するのである。文字のコードポイントからグリフイメージへの変換処理方法には、文字によって様々な違いがある。一般的に言えば、コードポイントにグリフイメージを直接対応つける方法は、世界の文字を印刷するための技術としては役に立たない。

UTR#50とMVOは文字のコードポイントにグリフ可視化結果を規定する方法である。上に述べたように、一般論としてもこのアプローチは誤っている。このことを、以下に、具体的に例を示して説明する。

縦書き時のグリフイメージは文字のコードポイントの特性ではない。文字のコードポイントとグリフイメージは独立である。例えばInDesignにはアスキー文字を全角形で表示して、正立させる機能がある。その逆に、全角文字コードをプロポーショナル字形で表すこともできる。つまり、InDesignは文字のコードポイントとグリフイメージを独立のものとして扱っている。[4]

(9/21追記開始)文字のコードポイントに対して対応をつけることのできるグリフはひとつではない。複数のグリフを対応つけることができる。例えば、日本語組版ではラテンアルファベットには全角形とプロポーショナル形があるとしている。全角形とプロポーショナル形というのはグリフの区別であり文字コードの区別ではない。ラテンアルファベットの文字コードはU+0041~005A(大文字)とU+0061~007A(小文字)である(これらをアスキーアルファベットという)。JIS X4051の規定では、横書き時にはアスキーアルファベットにプロポーショナル形を割り当てて使うのが標準である(横書き時にアスキーアルファベットを全角形で表すことは一般には行なわない)。縦書き時には、アスキーアルファベットを全角形で正立したり、プロポーショナル字形で横倒しで並べたりできる。これは文字コードの使い分けではなく、グリフの使い分けである。具体的な実装例でいうと、InDesignは、縦書き時にアスキーアルファベットをプロポーショナル形で横倒し表示したり、全角形で正立させて表示する機能がある。つまり、InDesignは文字のコードポイントに対してグリフを何種類か対応付け、実際の表示においてその中から切り替えることができるのである。(9/21追記終わり)

別の例を示す。XML文書でコンテンツを表すのは文字コードの並びである。コンテンツ自体に方向属性を含むと再利用性が失われる。ひとつのコンテンツを縦書きでも横書きでも使えるようにするためには、縦書きのときのグリフイメージの向きを、コンテンツに対するXMLマークアップとスタイルシートの組み合わせによって指定するべきである。

繰り返すが、UTR#50とMVOは文字のコードポイントに縦書き時の方向を規定するというものである。特に、縦書きで、全角文字コードは正立し、アスキー文字を横倒しすると規定している。UTR#50とMVOを採用すると、コンテンツを縦書き専用、横書き専用に書き分ける必要が生じて大変不便である。

また、日本語の縦組みの書籍では、1ページの中に縦書きと横書きが混在している。また、本文は縦書きで索引は横書きという方式が一般的である。このように縦書きと横書きを同時に使う場合にも、UTR#50とMVOを採用すると不便である。[5]

[1]http://unicode.org/forum/viewtopic.php?f=35&t=346
[2]Google Translationの出力
[3]コメント投稿 2012/9/11
[4]上記のUnicodeフォーラムにて、山本太郎氏から独立ではないという指摘がありました。確かに、独立という表現は正しくないので、9/21にこの部分を削除して表現を改めました。文章の後ろの方もフォーラムの議論を鑑みてもっと補足するほうが良いのですが、これは別途、文章化することにします。
[5]この文章はUnicodeのフォーラムに投稿するために原文として書いたものなのですが、別途に何がどう不便かをもう少し具体的に説明したいと思っています。