操作方法多言語 |
|
Q. | 英語(書き順が左から右)とアラビア語(書き順が右から左)を混在させたドキュメントの組版を行ったのですが、英語単語に付けた括弧が違う場所に表示されてしまいます。これは不具合ではないでしょうか。 [No.2002102508] |
---|---|
A. |
これは不具合ではありません。Unicodeの仕様によるものです。 Unicodeテキストの方向性は、Unicodeの仕様の中のbidiアルゴリズム(双方向アルゴリズム)によって決まっています。ラテンアルファベットはleft-to-right(書き順が左から右)、アラビア文字やヘブライ文字はright-to-left(書き順が右から左)です。
括弧はUnicodeではleft-to-rightでもright-to-leftでも使用できる「ニュートラル(neutral)」な文字とされています。 つまり、括弧の文字はニュートラルな文字で、なおかつミラーリング対象文字となっていますので、左括弧'('が右括弧')'になり、右括弧')'が左括弧'('になります。 例を出して解説します。 FOには次のように書かれていたとします。 'Arabic' が アラビア語、'English1'、'English2' が英語です。 'English2' が括弧で囲まれています。 <fo:block-container writing-mode="rl-tb" language="ar"> <fo:block> Arabic English1 (English2) </fo:block> </fo:block-container> この出現順で right-to-left の場合、次のようになります。 (English1 (English2 cibarA Unicodeの仕様では、「一般的に、ニュートラル(の文字)は周辺のテキストの影響を受ける。」とありますので、left-to-rightとleft-to-rightにはさまれたnuetralはleft-to-rightになりEnglish1とEnglish2の間の左括弧'('はleft-to-rightとなります。
これを解決する方法はふたつあります。 <fo:block-container writing-mode="rl-tb" language="ar"> <fo:block> Arabic English1 (English2) ‎ </fo:block> </fo:block-container> ふたつ目は「fo:bidi-override」を使用します。
<fo:block-container writing-mode="rl-tb" language="ar"> <fo:block> Arabic English1 <fo:bidi-override unicode-bidi="embed" direction="ltr"> (English2) </fo:bidi-override> </fo:block> </fo:block-container> なお、半角スペースもニュートラル文字ですので配置がかわります。上記のふたつの方法の適切な方法を使用してください。 Unicodeの仕様はUnicode Standard Annex #9 The Bidirectional Algorithmをご覧ください。 |