章 7 · 部 II · 技法
アラビア語の組版
Postextがアラビア語をどう組むか。書字方向と双方向アルゴリズム、右綴じの本、切り離さず字間も空けない連結した語、カシーダによる両端そろえ、母音記号、強調、数字と番号の書式、序数の語、脚注、古典詩、目次、索引、引用、フォント
かんたんな説明
このページでは、Postextがアラビア語をどのように組むかを説明します。アラビア語は右から左へ読むので、本の行も段もページもその向きに並びますが、文中の数字や英語の単語は左から右へ読みます。語の中の文字は互いにつながっているため、Postextは語を途中で分けず、文字の間を広げることもしません。行を伸ばすときは、文字どうしのつなぎの一部を長く引き延ばします。文字の上や下に付く母音の記号、地域ごとに使う数字、注、詩についても取り上げます。最後に、設定の完全な例を二つと、まだ残っている制限を示します。
アラビア語の本は、文字から見開きまで右から左へ進み、その語は切り離せない一続きの筆画でできています。
Postextは、現代標準アラビア語と古典アラビア語を、ほかの言語と同じMarkdownと設定から組みます。文書の言語という一つの設定が、本全体の向きを変えます。行は右から始まり、最初の段は右の段になり、本は右の端で綴じられ、見開きは右から左へ読まれます。一方、行の中のラテン文字の語や数字は左から右へ読まれたままです。語は丸ごと計測・描画され、字形はフォントが整えます。両端そろえの行は、語間のスペースと、文字どうしのつなぎを引き延ばすカシーダで伸ばし、文字の間を空けることはありません。このページでは、エンジンが何をするか、どの設定がそれを制御するかを説明します。各キーとその既定値は設定リファレンスに、マークアップは文書形式にあります。
規則は、W3Cの『Arabic & Persian Layout Requirements』(alreq)とUnicode双方向アルゴリズム(UAX #9)に、本の慣習についてはカイロ、ベイルート、ブーラーク版の刊本に従っています。出典は末尾に挙げます。
#アラビア語の本を始める
文書の言語と書体を設定します。このページで扱うほかの事柄は、すべてこの二つから決まるか、アラビア語用の既定値をもっています。
const config: PostextConfig = {
locale: 'ar',
bodyText: { fontFamily: 'Amiri', lineHeight: { value: 1.75, unit: 'em' } },
headings: { fontFamily: 'Amiri' },
};localeにはar、ar-EG、ar-MAなど、アラビア語の任意の言語タグを指定できます。言語によって、本には次のものが決まります。
- 方向:右から左(
direction: 'auto'が言語の文字体系から読み取ります)。 - 綴じ:右の端(
page.binding: 'auto')。 - 数字:生成される番号の数字は、マシュリクでは٠–٩、マグリブでは0–9です(
numerals: 'auto'、後述)。 - ハイフネーションなし:アラビア語の語にはハイフネーションも字間もトラッキングもなく、カシーダで両端をそろえます。
- 太字による強調:イタリックの代わりに太字を使い、引用ブロックは傾けません。
- 組み込みの語:図と表にはشكلとجدول(章ごとの番号、شكل ٢-٣)、相互参照にはالفصلとص、参考文献の見出しにはالمراجع、索引にはانظرとانظر أيضًا、続きの表のキャプションの後には(تابع)。
- 索引の順序:アルファベット順(ヒジャーイー順)で、冠詞الは無視します。
- 言語タグ:HTML(
lang="ar" dir="rtl")、Canvas、PDF(/Lang)に付くので、フォントの言語別の字形が適用されます。
Sandboxではこれを一度に行えます。デザイン › 表記体系で「العربية」を選び、「アラビア語の既定設定 › 確認…」を押します(Sandboxでの設定を参照)。
#書字方向と双方向アルゴリズム
アラビア語の段落は右から左へ進みますが、その中の数字、ラテン文字の語、引用は左から右へ進みます。行ごとにこれらの断片をどう並べるかは、Unicode双方向アルゴリズムが文字そのものから決めます。Postextはこれを完全に実装しています(UAX #9、Unicode 18、適合性テストの全ケース)。テキストは論理順、つまり入力した順で保存・検索され、並べ替えるのは描画だけです。
#文書、ブロック、インラインの方向
方向は三つのレベルで設定します。
- 文書:
direction: 'auto' | 'ltr' | 'rtl'。既定値の'auto'は、localeの文字体系が右から左へ書かれるもの(アラビア語、ペルシア語、ウルドゥー語、ヘブライ語、シリア語、ターナ文字、ンコ文字、アドラム文字…)なら右から左、それ以外なら左から右になります。設定するのは方向を強制したいときだけです。英語の本には不要で、アラビア語の本を左から右に組むのはほぼ必ず誤りです。 - ブロック:見出しの後に
{dir=ltr}か{dir=rtl}を付けるか、任意の:::コンテナーに付けます(:::paragraphs{dir=ltr}、:::callout{dir=ltr}、:::columns、:::part)。コンテナーの中はすべてその方向になり、別の方向を指定した入れ子のブロックがあればそこで切り替わります。ふつうの段落、リストの項目、引用には独自の属性がないので、:::paragraphs{dir=…}で囲みます。表のリソースはtable.directionで指定します。 - テキストの一部:
:ltr[…]と:rtl[…]はその文字列をアイソレートします。省略可能な{lang=…}を付けると、HTMLとPDFでその部分に言語タグが付きます。
# Introduction {dir=ltr}
:::paragraphs{dir=ltr}
An English paragraph quoted in an Arabic book, set left to right with its indent on the left.
:::
نشر الكتاب في :ltr[The Arabian Nights, vol. 2]{lang=en} سنة ١٨٣٥.文書と逆の方向に設定したブロックは、自分の始端の側を保ちます。1行目の字下げ、リストの記号、最終行の寄せ側は、そのテキストが始まる側に移り、各行はテキストが想定するとおりに段の中でそろえられます。アラビア語の本の中の英語の引用には{dir=ltr}を付けてください。付けないと、中立文字であるピリオドが右から左の段落に属し、ブラウザーでの表示と同じく行の左端に刷られます。コンテナーには言語も指定できます(:::paragraphs{dir=ltr lang=en})。その中の番号付きリストは、その言語の数字で番号を振ります(アラビア語の本では1. 2.、英語の本でlang=arなら١. ٢.)。ブロック内の脚注、図、表、見出しの番号は文書の数字のままです。これらは本そのものの番号の系列に属するからです。
#アイソレート
:ltr[…]と:rtl[…]は双方向のアイソレート(UAX #9のLRI…PDIとRLI…PDI)です。中の文字列はその内部で並べられ、段落からはそれぞれが一個の中立文字として見えます。ラテン文字の書名が中立文字(ピリオド、閉じ括弧、疑問符)で終わり、そのままでは周囲のアラビア語と一緒に読まれてしまうとき、あるいは文字列が数字やラテン文字で始まり、最初の強い文字で方向を推測するアルゴリズムの判断を変えてしまうときに使います。アイソレートの中の脚注、:ref、数式はその一部になります。Unicodeの制御文字そのもの(U+2066–2069、U+202A–202E、U+200EとU+200F、アラビア文字マークU+061C)もソースにあれば従いますが、ディレクティブのほうが読みやすく、編集もしやすくなります。
#数
数は、どの数字体系でも左から右へ読み、最上位の桁が左に来ます。١٤٤٥も1445も同じです。アラビア文字の後のヨーロッパ数字はアラビア語の数として読まれる(規則W2)ので、سنة 1835مとسنة ١٨٣٥مは同じ順に並びます。巻とページ、スーラと節のように斜線でつないだ二つの数(١٣/٩٠)は一続きのままです。ハイフンで書いた範囲(١٢-١٥)は、アラビア語の読者が期待するとおり右から左へ読み、12が右に来ます。パーセント記号٪(U+066A)は数の後に入力し、数の左に表示されます。著者が入力したテキストは書き換えません。文書の数字で書かれるのは、エンジンが生成する数だけです(数字)。
#括弧と引用符
丸括弧、角括弧、波括弧、ギュメは、右から左の部分では鏡像になります。アラビア語の語の前に入力した(は、その語を右側で開きます。英語と同じように論理順で、開き括弧を先に入力してください。Canvas、HTML、PDFは鏡像の字形を描きます(フォントのrtlm機能、または鏡像のコードポイント)。« »も同じように、アラビア語の引用を開いて閉じます。
クルアーンの引用に使う装飾括弧﴿(U+FD3F)と﴾(U+FD3E)は鏡像になりません。Unicode 14以降、﴿が開き、﴾が閉じで、その字形は右から左のテキスト用に描かれているからです。﴿を先に入力します。﴿بسم الله الرحمن الرحيم﴾は﴿が右に来て刷られます。また、これらは対になる括弧としても扱われないので、左から右の段落(英語の本に引用したアラビア語の章句)では、ラテン文字の語に隣り合う括弧が段落の方向をとります。﴿は章句の左に来て、ブラウザーと同じく対が逆向きに読まれます。引用を右から左のアイソレート:rtl[﴿بسم الله الرحمن الرحيم﴾]にすれば、両方の括弧が章句と一緒に並び、﴿は右に来ます。
#ページの順序と右綴じ
アラビア語の本は右の端で綴じます。最初のページは左側のページで、見開きは右のページから左のページへ読み、段は右から左へ埋まります。Postextはこうしたページを、左から右のページを鏡に映したものとして組みます。テキストの流れの中にあるもの(段、行、字下げ、リストの記号、フロート、注、囲み、表)はすべて英語の本と同じコードで配置し、そのうえでページ全体を鏡像にします。語、画像、数式はそれぞれ正しい向きで描きます。
- 綴じ:右から左の文書では、
page.binding: 'auto'は右の端になります。1ページ目はやはり奇数ページ(表のページ)なので、breakBefore.parity、:::pagebreak{parity="odd"}、ページ数の意味は変わりません。奇数ページは見開きの左のページになり、奇数ページで始まる章は左のページで始まります。margins.mirrorを使うと、奇数ページののどの余白は右側になります。PDFはビューアーに右から左の見開きを求め(/Direction /R2L、/PageLayout /TwoPageRight)、Sandboxは見開きを3 | 2と表示し、そのHTMLビューアーはページを右から左へ並べます。綴じを参照してください。 - 段:2段組みのページでは最初の段が右の段で、段間罫、サイド段、段間もそれに従います。上部のフロートは右から広がり、脚注は各段の下に置かれ、区切り罫は右側に来ます。
- 柱とノンブル:紙面上の位置を保ちます。ヘッダーとフッターのスロットは物理的な位置で、その
leftとrightは、どの本とも同じく紙の左右です。右の端に合わせて設定してください。多くのアラビア語の本と同じく、章題を左(奇数)ページに、書名を右(偶数)ページに置き、ノンブルは外側の角(奇数ページでは左)か中央に置きます。
#左・右・始端・終端の意味
側を指定する設定は、紙ではなくテキストの側を意味します。そのため英語の本のために作ったデザインは、本をアラビア語に切り替えてもそのまま使えます。startとendは、テキストの始端と終端を明示する名前としてどこでも使えます。
| 設定 | left / right | start / end |
|---|---|---|
文字のそろえ:bodyText.textAlign、見出し、段落スタイルと部のスタイル、脚注、キャプションのalign、囲みの本文 | テキストの側。leftは行が始まる側で、アラビア語の段落では右です。両端そろえの段落の最終行はそちらに寄ります。 | leftとrightの同義語。 |
表のセル(TableCell.align) | 表の方向(table.direction)で読んだ、セルのテキストの側。 | 同義語。表の方向で読みます。 |
フロートや幅の狭い図のplacement.align | 本文の流れの側。アラビア語の本ではleftは紙の右です。 | leftとrightの同義語。 |
囲みのstripe.side、icon.cornerSide、ラベルのposition | 本文の流れの側。ページのどの囲みでも同じです。 | 囲み自身の方向。アラビア語の本の:::callout{dir=ltr}では、始端は紙の左です。 |
| ヘッダーとフッターのスロット、紙面上のデザイン要素 | 紙の左右。 | テキスト要素のみ。要素自身の方向での始端と終端。 |
流れの中に配置されるデザイン要素(章扉の帯や見出しのデザインなど)は、流れと一緒に鏡像になります。そのleftとrightは、本文と同じく始端と終端の側です。テキスト要素はdirection: 'ltr' | 'rtl' | 'auto'をとり(既定は文書の方向。'auto'はテキストの最初の強い文字から読み取ります)、そのalign: 'start'と'end'はそれに従います。placement.rotateは物理的な意味を保ちます。時計回りに回した図は、紙の上でも時計回りに回ります。
#字形処理と分けない語
アラビア語の語の文字はつながり、それぞれが前後の文字に応じた形(語頭形、語中形、語尾形、独立形)をとり、ラーム・アリフのような合字も作ります。Postextは語を一字ずつではなく、字形処理した一つの文字列として計測し描きます。CanvasとHTMLは字形処理をブラウザーに任せます。PDFはHarfBuzzで字形処理します。HarfBuzzは、アラビア文字など字形処理が必要な文字体系を文書が含むときにだけ読み込まれ、各グリフを元の文字に対応付けるので、PDFからコピーしたテキストやスクリーンリーダーが読むテキストは、入力したとおりのものになります。HarfBuzzを読み込めないときもPDFは書き出されますが、記号の位置がずれ、renderToPdfはcomplexShapingUnavailable警告を出します。ホストが独自の場所からそのファイルを配信する場合は、harfbuzzWasmオプションでファイルを指定します。
つながりから三つの規則が生まれます。アラビア語の本の中でも、英語の本に引用された場合でも、アラビア文字を一つでも含むすべての語に適用されます。
- ハイフネーションしない:アラビア語は行末で分割せず、アラビア文字の文書ではハイフネーションはオフです。ラテン文字のパターン言語でオンにすると(
hyphenation: { enabled: true, locale: 'en-us' })、本の中のラテン文字の語はハイフネーションされ、アラビア語の語は分けられません。 - 字間を空けない:つながった文字の間を空けると、つながりが切れます。スタイルの
letterSpacingと両端そろえのトラッキングはアラビア語の語を飛ばします。アラビア語のテキストに字間を設定した本文や見出しのスタイルは、ビルド時に報告されます(joiningScriptLetterSpacing)。 - 切らない:行より広い語でも、文字と文字の間で切ることはありません。語は行長からはみ出し、その行には印が付き(
VDTLine.wordOverflow)、ビルド時に報告されます(unbreakableWordOverflow)。これは幅の狭い表のセルやサイド段で起こります。幅を広げるか、文章を書き直してください。
語の中でスタイルが変わっても、たとえば一文字に色を付けたり母音記号を太字にしたり(كتا**ب**)しても、語は二つに分かれません。語は丸ごと計測・字形処理され、スタイルを付けた部分がその上に描かれます。PDFとHTMLは正確にその文字に色を付けます。Canvasは字形処理された語の中で文字がどこにあるかを推定するので、色がわずかに隣の文字にかかることがあります。デザイン要素のテキストは、折り返しや切り詰めの際にアラビア語の語を切りません。最初の文字が次の文字とつながる場合、ドロップキャップは描かれません。
#両端そろえとカシーダ
アラビア語の本は両端そろえで組みます。行を伸ばすのに文字の間は空けず、語間のスペースとカシーダで伸ばします。カシーダは、書家がつながった二つの文字のあいだに引く延長線です(كتاب → كتـاب)。Postextはカシーダを完全なタトウィール(U+0640、ـ)として挿入し、フォントはそれを一本の線として描きます。Amiriは連続したタトウィールを曲線のつなぎに変えます。
bodyText.kashidaは、アラビア文字の文書では'auto'、それ以外では'none'です。段落の最終行を除く両端そろえの各行は、まず語間のスペースを幅の4分の1まで広げ、残りの余りをカシーダで埋めます。タトウィールを一つずつ、最適なつなぎから順に入れていき、タトウィール一つに満たない残りはスペースに戻します。Knuth–Plassは各語が延長できる量を伸びとして数えるので、アラビア語の語が並ぶ行がそこで広がれることを知ったうえで行分割を選びます。ラテン文字の語、数字、見出し、行末不ぞろいの行、段落の最終行にはカシーダは入りません。
カシーダを置ける場所はraqim-kashidaの規則に従います。置くのはつながる二つの文字の間だけで、後ろにつながらない文字(ا د ذ ر ز و ة)の後、語の末尾、ラーム・アリフの中には置きません。kashidaPatternsは規則の組を選びます。'naskh'は古典的なナスフ体の規則、'simple'は簡素な現代書体向けの優先順位、'nastaliq'はナスタアリーク体用で、'auto'は本文の書体から読み取ります(Aref Ruqaaのようなルクア体の書体では、様式がカシーダを禁じるので一切入れません)。kashidaPerWord(既定は1)とkashidaMaxLength(0.6 em)は、一つの語がどれだけ伸びるかを制限します。著者が入力したタトウィールを含む語は、その位置で伸ばします。挿入したタトウィールは描かれますが、プレーンテキスト、ソースマップ、PDFからコピーしたテキストには含まれません。規則の組の詳細はアラビア文字のカシーダにあります。
bodyText: {
textAlign: 'justify',
kashida: 'auto', // the default in an Arabic book
kashidaPatterns: 'naskh', // 'auto' reads it from the face
}#母音記号
母音記号(ハラカート:ファトハ、ダンマ、カスラ、スクーン、シャッダ、タンウィーン、短剣形アリフ)とクルアーンの記号は、文字の上下、行間に積み重なります。現代の散文はシャッダや母音をところどころに付けるだけです。古典の校訂版は詩には母音記号をすべて付け、散文には少しだけ付けます。クルアーンには常にすべての母音記号が付きます。行送りが記号のために自動で広がることはないので、本に含まれるいちばん母音記号の多いテキストに合わせて選んでください。
| テキスト | lineHeight |
|---|---|
| 母音記号なしの現代の散文 | 1.55–1.7 em |
| 母音記号を一部に付けた散文 | 1.7–1.85 em |
| 母音記号をすべて付けた詩、クルアーン | 1.9–2.1 em |
記号を含む各行は、そのインクがベースラインの上下にどこまで届くかを記録します(VDTLine.markInk)。CanvasとPDFの段のクリップは、段の最初と最後の行の記号を含めます。語の上の記号が、上の行の語から下に垂れた文字や記号に触れると、ビルドはその段落を、必要な行送りとともに報告します(arabicMarksExceedLeading、Sandboxの検査パネル)。比べるのは上下に重なる語どうしだけなので、短い語の下にある母音記号付きの語は問題になりません。母音記号の付いた部分、とくに詩には、行送りを広げた段落スタイルを与えてください。
bodyText.tashkilは、レイアウトが組むテキストから記号を取り除きます。母音記号付きの原本から母音記号なしの版を作るためのものです。'strip'は母音、タンウィーン、スクーン、シャッダ、短剣形アリフ(هٰذاはهذاと組まれます)、クルアーンの記号を取り除きます。'strip-vowels'は、多くの現代の本と同じくシャッダを残します。ハムザとマッダは残ります。أ إ آは文字だからです。ソースは記号を保ち、段落、見出し、目次は記号なしで組まれます。
#強調
アラビア文字にはイタリックがなく、傾けたアラビア文字の書体は形のゆがみにすぎません。アラビア文字の文書では、*…*は既定で太字で組まれます(bodyText.emphasis: 'auto')。'color'は傾けずにitalicColorで組み、'overline'は語の上に線を引きます。古いアラビア語の本に見られる上線です。どれを選んでも、エンジンはアラビア文字を決して傾けません。イタリックで組む部分では、アラビア語の語は直立したまま、ラテン文字の語はイタリックを保ちます。そのため*Kitāb al-ʿIbar كتاب العبر*は、翻字をイタリックで、アラビア語の書名を直立で刷ります。アラビア語の本では、引用ブロックは既定で直立です。それ自体の書体がイタリックのスタイル(blockquote.italic: true、イタリックで組む見出しレベル)でも、アラビア語の語は傾きのない同じ書体で直立に、ラテン文字の語はイタリックで組みます。キャプション、表のセル、目次、索引は、それぞれのイタリックの設定を保ちます。
bodyText: { emphasis: 'overline', italicColor: { hex: '#8a1c1c', model: 'hex' } }#数字と番号の書式
アラビア語は、地域によって使い分ける三種類の数字で書かれます。
| 地域 | 数字 | numerals |
|---|---|---|
マシュリク:エジプト、スーダン、レバント、イラク、アラビア半島(ar、ar-EG、ar-SA…) | ٠ ١ ٢ ٣ ٤ ٥ ٦ ٧ ٨ ٩(アラビア・インド数字) | 'arab' |
マグリブ:モロッコ、アルジェリア、チュニジア、リビア、モーリタニア(ar-MA、ar-DZ、ar-TN…) | 0 1 2 3 4 5 6 7 8 9(ヨーロッパ数字) | 'latn' |
ペルシア語、パシュトー語、インドのウルドゥー語(fa、ps、ur-IN) | ۰ ۱ ۲ ۳ ۴ ۵ ۶ ۷ ۸ ۹(ペルシア数字の字形) | 'arabext' |
最上位のnumeralsは、エンジンが書くすべての数の数字を決めます。ノンブル、目次と索引のページ番号、リストと脚注の番号、見出しと章のカウンター、図番号とその参照、{totalPages}です。'auto'は地域の数字をlocaleから取ります(地域のないarと、ar-AEは、その地域の本が刷るとおりマシュリクの数字になります)。タグで独自に指定することもできます(ar-MA-u-nu-arab)。著者が入力した数は変更されず、どの体系で書いても読み取られます。リストの項目٣.は3から始まり、{startAt=٥}は5です。文書の数字を参照してください。
設定で名前を指定した書式はその名前どおりに刷られるので、一冊の本で体系を混ぜることができます。アラビア語の番号の書式は次のとおりです。
| 書式 | 1, 2, 3 … 11, 1446 | 名前 |
|---|---|---|
| アラビア・インド数字 | ١، ٢، ٣ … ١١، ١٤٤٦ | arabic-indic, ١ |
| ペルシア数字 | ۱، ۲، ۳ … ۱۱، ۱۴۴۶ | persian, ۱ |
| アブジャド数字(加算式、マシュリクの数価) | ا، ب، ج … يا، غتمو | arabic-abjad |
| アブジャド数字(マグリブの数価) | ا، ب، ج … يا (ص 60، ش 1000) | arabic-abjad-maghrebi |
| アブジャド順の文字 | أ، ب، ج، د، هـ، و … | abjad, أبجد |
| アルファベット順(ヒジャーイー順)の文字 | أ، ب، ت، ث، ج … | hijai, أبتث |
アブジャド数字は、写本や年代記銘(クロノグラム)の数え方と同じく、文字の数価を大きいものから足し合わせます。11はيا、1446はغتمو、2000はبغ、1002はغبです。文字を使う二つの書式は、リストの項目や前付けのページに一項目一文字で番号を振ります。どちらも最初の文字をハムザ付き(أ)で書き、単独のハーをهـと書くので、数字の١や٥と読み違えられることはありません。古典の校訂版は、前付けにアブジャド順でノンブルを振り、本文から数字を始めます。
:::numbering{format="abjad" startAt=1}
# المقدمة {style="front-matter"}
…
:::pagebreak{parity="odd"}
:::numbering{format="decimal" startAt=1}番号付きリストも同じ名前に従います。アラビア語でよく使う階層は、「١-」、次に「أ-」、次に「(١)」です。
orderedLists: {
levels: [
{ level: 1, numberFormat: 'arabic', separator: '-' },
{ level: 2, numberFormat: 'abjad', separator: '-' },
{ level: 3, numberFormat: 'arabic', prefix: '(', separator: ')' },
],
},arabicは十進の書式で、文書の数字で書かれます。
#序数詞と基数詞
見出しのテンプレートの{1:ordinal}は定冠詞付きの序数をアラビア語の語で書き、{1:words}は基数を書きます。アラビア語の序数は数える名詞の性に一致するので、テンプレートではハイフンの後に性を指定します。الليلةのような女性名詞には-feminine(または-f)を付け、الفصلやالبابには既定の男性形を使います。-classicalは、ブーラーク版と同じくمئةの代わりにمائةと書きます。夜には独自の題がありません。numberPosition: 'replace'は番号を題全体として刷るので、# Night(またはソースに書いた任意の題)はالليلة الثانيةと刷られ、目次、柱、PDFのしおりも同じになります。
headings: {
levels: [{ level: 1, numberingTemplate: 'الليلة {1:ordinal-feminine}', numberPosition: 'replace' }],
},これでالليلة الأولى、الليلة الحادية عشرة、الليلة الخامسة والأربعون بعد الثلاثمئة、そして1001ではالليلة الحادية بعد الألفが刷られます。'الفصل {1:ordinal}'はالفصل الأول、الفصل الحادي عشرを刷ります。序数は9,999まで、基数は99,999まで語で書き、それを超えると数字で刷ります。デザインのプレースホルダー{numberWords}と{numberOrdinalWords}は男性形を返します。語で綴る番号を参照してください。
#脚注
アラビア語の本は、注を括弧に入れた番号«(١)»で示し、本文では上付きにし、注の頭では行の上に置きます。多くの古典の校訂版は、ページごとに番号を振り直します。区切り罫と注の番号は、自動的に始端の側、つまり右に置かれます。
footnotes: {
markerTemplate: '({n})', // «(١)» in the text and in the note
numbering: 'page', // ١ again on every page
noteNumberPosition: 'inline', // the note's own number on the line
}markerTemplateは、本文の合印と注の頭の番号を、どちらも文書の数字で書きます。注の番号は注が置かれるページで決まるので、ページごとに番号を振る本は一度組み、注が置かれた位置で番号を振り、もう一度組み直します。アラビア語の本と同じく、合印は後に続く約物の前に置いてください。[^id]は語の直後、読点やピリオドの前に書きます。脚注を参照してください。
#古典詩
アラビア語の古典詩(カスィーダ、キトア)は、一行に一つの詩行(バイト)を、二つの半句に分けて組みます。前半句のサドルが右、後半句のアジュズが左に来て、その間にアキを置きます。詩のすべての半句が同じ幅にそろえられるので、どのサドルも同じ縦の線から始まり、どのアジュズも別の縦の線で終わり、韻の文字が詩の上から下まで並びます。
詩は:::verseブロックに、一行に一つのバイトを書き、半句を||で区切ります(ウィキソースの翻刻と同じく、両側にスペースを置いた\\も使えます)。区切りのない行は単独の半句で、詩の中央に置かれます。
فأنشد يقول:
:::verse{style="verse"}
يَا حُرْقَةَ الدَّهْرِ كُفِّي || إِنْ لَمْ تَكُفِّي فَعِفِّي
فَلَا بِحَظِّيَ أُعْطِي || وَلَا بِصَنْعَةِ كَفِّي
:::- 共通の幅:もっとも広い半句の幅で、最大で行長の半分からアキを引いた値です。
widthで固定できます。各半句はまずカシーダで(詩は散文よりも自由にカシーダをとります)、次に語間のスペースでその幅に達します。 - アキ:既定は2 em(
gap)です。ornamentは、その中央に٭のような記号を刷ります。 - 長すぎる半句:まずスペースを詰めます。それでも収まらなければ、そのバイトは段違いに組まれ、サドルを独立した行に右そろえで、アジュズを次の行に左そろえで置きます。
- 分割しない:バイトが段やページの間で分かれることはありません。詩は段落のオーファンとウィドウの規則に従い、詩を導く行(«فأنشد يقول:»)は最初のいくつかのバイトから離れません。
- 書体:詩は本文の書体と大きさをとります。
styleは段落スタイルを指定します。母音記号付きの詩に、記号が必要とする行送りを与えるにはこの方法を使います。英語の本でラテン文字に翻字した詩も同じように組まれ、その場合はサドルが左に来ます。
プレーンテキストは詩を書かれたとおり、一行に一つのバイトとして保ち、カシーダと飾りは含めません。文書形式の:::verseを参照してください。
#目次と索引
目次:多くのアラビア語の本、とりわけ古典の校訂版は、目次(فهرسまたはفهرس المحتويات)を巻末に刷ります。:::tocは置いた場所に目次を刷るので、最終章に、目次から除外した見出しの下に置きます。
# فهرس المحتويات {toc="false"}
:::toc目次の行は右から左に組まれます。番号と題が右、その次にリーダー、ページ番号が左です。アラビア語の本の中のラテン文字の題もページ番号は左に置き、題の語そのものは左から右へ読みます。
索引:アラビア語の本の巻末索引は、項目をアルファベット順(ヒジャーイー順)に並べ、頭文字ごとにまとめます。定冠詞は無視します。البصرةはبの下、بدرとبغدادの間に入り、書かれたとおりに刷られます(index.ignoreArticle。索引の言語がアラビア語なら既定でオンで、اللهは冠詞を保ちます)。母音記号とタトウィールも無視し、أ إ آ ٱはاの下に入れ、ةはهと、ىはيと一緒に並べます。ページ番号はアラビア語の読点(، )でつなぎ、相互参照はانظرまたはانظر أيضًاとなります。独自のsortキーをもつ項目は、そのキーの冠詞を保ちます。索引を参照してください。
引用:アラビア語の本の参考文献は、引用スタイル言語の用語をアラビア語でとり(CSLのarロケール:ページはص、巻はمج、二人の著者の間はو、et al.はوآخرون)、番号付きの合印を文書の数字で書きます([٢، ص ١٢])。参考文献の見出しはالمراجعです。CSLスタイルに書かれたコンマとセミコロンは、スタイルのとおりに残ります。引用を参照してください。
#フォント
Postextは各スタイルを一つのファミリーで組み、足りない文字のために別のファミリーへフォールバックしません。したがって書体は、本が刷るすべてのアラビア文字、記号、数字を含んでいなければなりません。本に使える無料の書体(すべてSIL Open Font License)は次のとおりです。
| 書体 | 様式 | 用途 |
|---|---|---|
| Amiri | 20世紀初めのブーラーク版とアミーリーヤ印刷所の活字にもとづくナスフ体。曲線のカシーダ、完全な母音記号、調和したラテン文字。 | 古典の校訂版、母音記号付きのテキスト、詩。レギュラーとボールド。 |
| Noto Naskh Arabic | 癖のない現代のナスフ体。 | 現代の散文、注、表。可変フォントなので、ウェイトごとに静的なファイルを一つずつバンドルに入れます。 |
| Scheherazade New | 記号がきわめて明瞭な、簡略化した伝統的なナスフ体。既定の行送りが大きい。 | 母音記号をすべて付けたテキスト、語学教育。 |
| Reem Kufi | ファーティマ朝の碑文にもとづくクーフィー体。 | ディスプレイ用の見出し、夜や章の題。 |
| Aref Ruqaa | ルクア体。 | 短いディスプレイ用の見出しと扉。カシーダなし(ルクア体は引き延ばしません)。 |
Markazi TextとNoto Kufi Arabicは現代の本(本文と見出し)に、El Messiriは現代的なディスプレイ用に向きます。同じ公称サイズでは、ナスフ体はラテン文字の書体より小さく見えます。アラビア語の本文はふつう13–15 ptで、ラテン文字の本文なら10–11 ptにあたります。
- ブラウザーとSandboxでは、Google FontsとFontsourceが、各ファミリーをサブセットごとのファイル(
latin、latin-ext、arabic)として配信します。ブラウザーはarabicのファイルを、ある文字が必要としたときに初めて読み込むので、それが届く前に計測したレイアウトは代替書体で計測されます。Sandboxは最初のレイアウトの前にそれを読み込みます。ホストはアラビア文字を含むサンプルで確認します(document.fonts.load('16px Amiri', 'ب'))。PDFのフォントプロバイダーは、アラビア語のテキストのためにrenderToPdfにarabicのファイルを渡す必要があります。ブラウザーのフォントプロバイダーにあるプロバイダーは、コードポイントでファイルを選びます。 - バンドルでは、書体を丸ごと入れるか、本の文字にサブセット化します。その際、OpenTypeのレイアウトテーブル(
GSUB、GPOS)は残してください。連結形、合字、記号の位置、鏡像の括弧はそこに入っています。これらのないサブセットでは、文字が独立形で刷られます。 - 足りないグリフは、フォントの空の箱として刷られます。
renderToPdfは書体ごとにそれを報告し(missingGlyph)、Sandboxは検査パネルに一覧を出します。 - アラビア語の中のラテン文字は同じファミリーで組まれます。Amiriは独自のラテン文字をもっています。ラテン文字が貧弱なナスフ体を使う場合は、長いラテン文字の部分を、ラテン文字の書体をもつ段落スタイルで組んでください。
#Sandboxでの設定
デザイン › 表記体系では、文書の言語の選択欄にالعربية、العربية (مصر)、العربية (المغرب)があり、書字方向と数字には、自動が何に解決されるかが表示されます。「アラビア語の既定設定 › 確認…」は、本をアラビア語用に設定すると何が変わるかを、適用する前に一覧にします。書体は古典的(Amiri)と現代的(本文はNoto Naskh Arabic、見出しはNoto Kufi Arabic)から選べます。変わるのは次の点です。方向と綴じを自動に戻す、柱とノンブルをアラビア文字をもつ書体にする、行送りを1.75 emにする、両端そろえ、地域の数字、章ごとに番号を振るشكلとجدول、شكل ١-١: العنوانの形のキャプション、الفصل الأولのように番号を振る章、١- أ- (١)の番号のリスト、ページごとに番号を振る注。フォントの選択欄はどれも、アラビア文字のファミリーを先頭に並べます。
エディターは各行に、その最初の文字の方向を与えます。アラビア語の行は右から始まり、キャレットと矢印キーは視覚上の順序に従います。一方、行の中のマークアップ({…}属性、[^id]、:ref[…]、数式、リンク先)は左から右のままです。Sandboxを参照してください。
#二つの完全な設定例
#現代標準アラビア語の現代の本
14 × 21 cmの本で、本文は13 ptのNoto Naskh Arabic、見出しはNoto Kufi Arabic、章の番号はالفصل الأول、注は«(١)»でページごとに番号を振り、ノンブルは地の中央に置きます。方向、右綴じ、٠–٩の数字、カシーダ、太字の強調はlocale: 'ar-EG'から決まります。
import type { PostextConfig } from 'postext';
const pt = (value: number) => ({ value, unit: 'pt' as const });
const mm = (value: number) => ({ value, unit: 'mm' as const });
const em = (value: number) => ({ value, unit: 'em' as const });
const ink = { hex: '#1a1a1a', model: 'hex' as const };
const config: PostextConfig = {
locale: 'ar-EG',
page: {
sizePreset: 'custom', width: mm(140), height: mm(210),
margins: { top: mm(18), bottom: mm(22), left: mm(16), right: mm(20), mirror: true },
},
layout: { layoutType: 'single' },
bodyText: {
fontFamily: 'Noto Naskh Arabic', fontSize: pt(13), lineHeight: em(1.7),
textAlign: 'justify', firstLineIndent: em(1.5),
color: ink, boldColor: ink, italicColor: ink,
},
headings: {
fontFamily: 'Noto Kufi Arabic', color: ink,
levels: [
{ level: 1, fontSize: pt(20), numberingTemplate: 'الفصل {1:ordinal}', numberSeparator: ': ',
breakBefore: { enabled: true, parity: 'odd' } },
{ level: 2, fontSize: pt(15) },
],
},
captionStyle: { labelSeparator: ': ' },
orderedLists: {
levels: [
{ level: 1, numberFormat: 'arabic', separator: '-' },
{ level: 2, numberFormat: 'abjad', separator: '-' },
],
},
footnotes: { markerTemplate: '({n})', numbering: 'page', noteNumberPosition: 'inline' },
header: { elements: [] },
footer: { elements: [
{ kind: 'text', id: 'folio', content: '{pageNumber}', fontFamily: 'Noto Naskh Arabic', fontSize: pt(11),
overflow: 'clip', color: ink, placement: { anchor: { to: 'container', edge: 'center' } } },
] },
};parity: 'odd'は各章を奇数ページで始めます。この本では奇数ページは左側のページです。キャプションのラベルと本文はコロンで区切ります(شكل ١-٢: …)。アラビア・インド数字の後に既定のピリオドを置くと、小数点に読めてしまうからです。
#母音記号付きの古典の校訂版
17 × 24 cmの古典テキストの校訂版です。Amiriの14 ptで組み、夜の番号は語で書き、詩には母音記号をすべて付けます。ノンブルはページの天にダッシュで挟んで置き、前付けにはアブジャド順の文字でノンブルを振り、目次は巻末に置きます。
const config: PostextConfig = {
locale: 'ar',
page: {
sizePreset: 'custom', width: mm(170), height: mm(240),
margins: { top: mm(24), bottom: mm(24), left: mm(18), right: mm(24), mirror: true },
},
layout: { layoutType: 'single' },
bodyText: {
fontFamily: 'Amiri', fontSize: pt(14), lineHeight: em(1.85),
textAlign: 'justify', firstLineIndent: em(1.5),
kashida: 'auto', kashidaPatterns: 'naskh',
color: ink, boldColor: ink, italicColor: ink,
},
headings: {
fontFamily: 'Amiri', color: ink, textAlign: 'center',
levels: [
{ level: 1, fontSize: pt(18),
numberingTemplate: 'الليلة {1:ordinal-feminine}', numberSeparator: '',
breakBefore: { enabled: true, parity: 'any' } },
],
},
paragraphStyles: [
{ id: 'verse', lineHeight: em(2.1) },
],
footnotes: { markerTemplate: '({n})', numbering: 'page', noteNumberPosition: 'inline' },
header: { elements: [
{ kind: 'text', id: 'folio', content: '– {pageNumber} –', fontFamily: 'Amiri', fontSize: pt(12),
overflow: 'clip', color: ink, placement: { anchor: { to: 'container', edge: 'center' } } },
] },
footer: { elements: [] },
};章は、序論の前の:::numbering{format="abjad" startAt=1}と、最初の夜の前の:::numbering{format="decimal" startAt=1}で始まります。詩は:::verse{style="verse"}ブロックで、最終章は# فهرس المحتويات {toc="false"}に:::tocが続きます。索引が冠詞الを無視するのに設定は要りません。アラビア語の索引ではindex.ignoreArticleがオンだからです。同じソースから母音記号なしの読書用の版を作るには、bodyTextにtashkil: 'strip'を加えます。
#既知の制限
- ペルシア語、ウルドゥー語、ヘブライ語は、方向、数字、語を分けない規則、右綴じを得ますが、独自の組み込みの語はなく(図、表、索引は英語で刷られます)、ナスタアリーク体の組版もありません。ナスタアリーク体の書体は平らなベースラインの上に組まれます。
- ブロックの方向は見出しとコンテナーに設定します。ふつうの段落は
:::paragraphs{dir=…}で囲む必要があり、{dir=auto}はありません。 - 逆方向の島:本と逆の方向に設定したブロックでも、キャプション、目次、索引の行は文書の方向に従い、囲みのアイコン、マーカー列、タイトルは流れの始端の側にとどまります。
- デザイン要素のテキスト(柱、章扉、囲みのタイトル)は、双方向の順序を行ごとに解決します。アラビア文字を含むテキストは、ラテン文字の語も含めて字間がすべてなくなります。
- イタリックのデザイン要素のテキスト:イタリックで組んだ柱や章扉のテキストでは、アラビア文字がまだ傾きます。
- 母音記号は、囲みや表のセルの端を越えることがあります。それらのクリップは記号に合わせて広がらないからです。
tashkilは、キャプション、表のセル、デザイン要素のテキストの記号を残します。 - 数:引用の番号はヨーロッパ数字で刷られます。序数の語は、見出しが使う主格の定形で書かれます。
- 索引:ةはهの下に入り、名前はابنやأبوの先の部分では並べ替えられません。韻や語根による索引はありません。
- 詩:散文の中に組み込む詩、番号付きのバイトはなく、中央に置いた単独の行のほかには、中央そろえのリフレインをもつ連の形式もありません。行長より広い半句は、ぶら下げインデントなしで始端の側から折り返します。
- カシーダ:HTML出力からコピーしたテキストには、挿入したタトウィールがまだ含まれます。また、隣り合う行のカシーダが上下に積み重なるのは防いでいません。
#出典
- W3C、Arabic & Persian Layout Requirements (alreq)、およびArabic script gap analysis。
- Unicode Standard Annex #9、Unicode Bidirectional Algorithm。Unicode Technical Report #53、Unicode Arabic Mark Rendering。
- W3C、Ready-made Counter Styles。
arabic-indic、persian、アブジャドの系列について。 - aliftype、raqim-kashida(MIT)とその紹介記事。M. Benatia、M. Elyaakoubi、A. Lazrek「Arabic text justification」『TUGboat』27(2)、2006年。
- Titus Nemeth、On Arabic justification、TypoArabic、University of Reading。Khatt Foundation、The Big Kashida Secret。
- Aḥmad Zakī Pāshā『al-Tarqīm wa-ʿalāmātuhu fī al-lugha al-ʿarabiyya』1912年(Hindawi)。アラビア語の句読法について。
- AmiriとScheherazade Newのドキュメント。カシーダ、記号の積み重ね、スタイルセットについて。
- Unicode CLDR。各地域の既定の数字について。