本文へスキップ

章 3.4 · 部 II · 技法

設定:ハイフネーションと言語

ハイフネーションのパターンと例外、行末不ぞろいのテキスト、文書の言語とその数字と方向、Postextが組める文字体系

更新日 2026-10-1621分所属する章: 3 設定enescadefritptzhjaar

かんたんな説明

このページでは、行の終わりで単語をどう分けるかと、Postextが本の言語をどう知るかを説明します。ハイフネーションを使うかどうかを選び、決して分けてはいけない語を挙げます。行の終わりをそろえず、不ぞろいのままにすることもできます。文書の言語によって、ハイフネーションの規則、図や表の呼び名、数字、文字の方向が決まります。最後の節では、Postextが組める文字の種類と、アラビア文字の扱いを説明します。

#ハイフネーション

行そろえを'justify'にしたとき、ハイフネーションは長い語を音節の境界で分割して、語間が広がりすぎるのを防ぎます。エンジンはTeX/Liangのパターンを使って、音節の境界にある自然な分割位置を見つけます。詳しくはハイフネーションと両端そろえを参照してください。行末不ぞろいのテキストは、指定した場合にだけハイフネーションします。後述の行末不ぞろいのテキストを参照してください。

プロパティ型既定値説明
enabledbooleantrueハイフネーションを許可するかどうか。
localeLocaleTagトップレベルのlocale、なければ'en-us'音節の境界を決める言語の規則。後述の対応ロケールのいずれか、または任意のBCP 47タグ('es-ES'、'pt-BR')を指定します。
raggedbooleanfalse行末不ぞろいのテキスト(左そろえ・右そろえ・中央そろえ)も、zoneの範囲でハイフネーションします。行末不ぞろいのテキストを参照してください。
zoneDimension3em行末不ぞろいのテキストのハイフネーションゾーン。収まらない語は、丸ごと次の行に送るとこれより広いアキが残る場合にだけ分割します。emはそのテキスト自身の文字サイズが基準です。両端そろえのテキストでは無視されます。
compoundsbooleantrue複合語、つまり2文字の間にハイフンを含む語(af-ter-dinner)を辞書で分割できるようにします。falseにすると、TeXと同様に、そうした語は自身のハイフン以外では分割しません。ハイフンの位置では引き続き行を終えられます(after- · dinner)。語の中に入力したソフトハイフンでは引き続き改行し、行全体より広い複合語は引き続き分割します。本文テキスト、見出し、リスト、引用ブロック、囲みに適用されます。キャプション、注、表のセル、目次では複合語を引き続き分割します。複合語を参照してください。
exceptionsstring[]なし辞書で分割しない語、または項目に書いた位置でだけ分割する語。'Alice'は決して分割せず、'You-Tube'はそのハイフンの位置でだけ分割します。分割しない語を参照してください。
capitalizedbooleantrue大文字で始まる語も、ほかの語と同じように分割します。falseにすると、大文字で始まる語(Alice、Ámsterdam、UNESCO)はすべて分割しません。文頭の語も同じです。分割しない語を参照してください。

対応ロケール:'en-us'(英語)、'es'(スペイン語)、'fr'(フランス語)、'de'(ドイツ語)、'it'(イタリア語)、'pt'(ポルトガル語)、'ca'(カタルーニャ語)、'nl'(オランダ語)。

パターンを選ぶとき、地域・用字・バリアントのサブタグは無視され、大文字・小文字の違いと_の区切りも無視されます。'es-ES'、'es-MX'、'es_419'は'es'で、'pt-BR'は'pt'で、英語のタグはすべて('en'、'en-GB')'en-us'でハイフネーションします。同梱している英語のパターンはこれだけなので、イギリス英語のテキストもアメリカ式で分割されます。パターンを同梱していない言語('sv'、'pl'、'fi'など)は'en-us'のパターンでハイフネーションするため、分割されないのではなく誤った位置で分割されます。エンジンはこれをタグごとに1回console.warnで報告し、Sandboxは検査パネルに表示します。そうした文書ではenabled: falseを設定してください。警告も出なくなります。中国語・日本語・韓国語(zh、ja、ko。地域や用字は問いません)はパターンを必要とせず、警告も出ません。これらの言語の文書はハイフネーションなしで組まれます。文中に引用したラテン文字の語を分割するには、enabled: trueを設定し、localeにその言語を指定します(英語なら'en-us')。localeなしでenabled: trueにした場合や、中国語・日本語・韓国語のロケールを指定した場合は、ハイフネーションはオフのままで、その旨をコンソールに1回表示します。matchHyphenationLocale(tag)はタグに対応する同梱ロケールを返し(ない場合はundefined)、HYPHENATION_LOCALESは同梱ロケールの一覧です。解決済みの設定(doc.config.bodyText.hyphenation)は、実際に使ったパターンをlocaleに、指定したタグがそれと異なる場合はそのタグをtagに保持します。PDFバックエンドは文書の言語をトップレベルのlocaleから宣言し、localeが未設定の場合にだけこのタグから宣言します(文書の言語を参照)。

import { matchHyphenationLocale } from 'postext';
 
matchHyphenationLocale('es-MX'); // 'es'
matchHyphenationLocale('en-GB'); // 'en-us'
matchHyphenationLocale('sv');    // undefined: hyphenated with 'en-us', with a console warning

5文字未満の語はハイフネーションしません。分割位置の前に2文字以上、後に3文字以上が必要です。

#分割しない語

辞書は、名前もほかの語と同じように分割します(Al-ice、Áms-ter-dam、You-Tu-be)。語を分割せずに保つ設定は3つあり、どれも既定値は辞書どおりの動作です。

hyphenation.exceptionsは語のリストで、TeXの\hyphenation{…}にあたります。ハイフンなしで書いた項目は決して分割しません。ハイフンを入れて書いた項目はその位置でだけ分割するので、'You-Tube'はYou- · Tubeとなり、ほかの位置では分かれません。項目は、前後に何があっても、ひと続きの文字に一致します。'Alice'は(Alice,にもAlice’sにも当てはまり、複合語は部分ごとに照合します(Blender-basedは'Blender'に一致します)。活用形は別の語なので、それぞれ項目が必要です。小文字で書いた項目は、大文字・小文字の違いを問わずその語に一致します('blender'はBlenderにもBLENDERにも当てはまります)。大文字で始めた項目は、大文字で始まる箇所にだけ一致するので、'Rose'は名前を分割せずに保ち、roseは辞書に任せます。項目に使えるのは文字とハイフンだけで、それ以外は取り除かれます。

hyphenation.capitalized: falseにすると、大文字で始まる語はすべて分割しません。名前、頭字語、そして各文の最初の語も含みます。InDesignの「Hyphenate Capitalized Words」スイッチをオフにした状態で、TeXの\uchyph=0にあたります。ハイフンを入れたexceptionsの項目は、引き続きその位置で語を分割します。ドイツ語は名詞をすべて大文字で始めるので、この設定ではドイツ語のテキストに分割できる語がほとんど残りません。その場合はexceptionsに語を挙げるか、citations.hyphenateNamesを使ってください。

citations.hyphenateNames: falseにすると、文書が引用する著者の姓を、どこにあっても分割しません。引用の中でも、本文でも、参考文献の一覧でも同じです。引用を参照してください。

const config: PostextConfig = {
  locale: 'es',
  bodyText: {
    hyphenation: { exceptions: ['Ámsterdam', 'Blender', 'You-Tube'] },
  },
};

この3つは、辞書で分割するすべてのテキストに効きます。本文、見出し、リスト、囲み、キャプション、表のセル、注、柱、そのほかのデザインのテキストです。compoundsより範囲が広く、compoundsはキャプション、注、セル、目次には効きません。変わらない点が2つあります。語のある箇所に入力したソフトハイフンは、引き続きその箇所の分割位置を決めます。最初の文字の前に入力したソフトハイフンは、リストを使わなくても、その箇所の語を分割せずに保ちます(行を分割しない箇所を参照)。また、行長全体より広い語は引き続き分割します。項目に分割位置があればその位置で、なければ辞書の音節で分けます。分割する語が減ると、両端そろえの狭い段では行を埋める手段が減ります。3段組のページでcapitalizedをオフにしたあとは、語間を確かめてください。リフロー型のEPUBはハイフネーションを閲覧システムに任せますが、閲覧システムはこれらの規則を知りません。

#行末不ぞろいのテキスト

既定では、ハイフネーションするのは両端そろえのテキストだけです。textAlign: 'left'の場合や、左そろえ・中央そろえ・右そろえの段落スタイルでは、行末がどれほど不ぞろいになっても語は丸ごと保たれます。例外はテキストに入力したソフトハイフン(U+00AD)です。行末不ぞろいのテキストもハイフネーションするには、hyphenation.ragged: trueを設定します。

行末不ぞろいの行は伸ばさないので、収まらない語をすべて分割すると行末がハイフンだらけになります。これを抑えるのがハイフネーションゾーンで、DTPソフトの単一行コンポーザーと同じ方法です。行末に語が収まらないとき、エンジンは、その語を丸ごと次の行に送った場合に残るアキを調べます。アキがzoneより広ければ、収まる最後の音節で語を分割し、そうでなければ語を丸ごと次の行に送ります。emで指定したゾーンは、そのテキスト自身の文字サイズが基準です。既定値の3emでは、目立って短い行を残す語だけを分割します。ゾーンを広くするとハイフンが減り、行末の不ぞろいが大きくなります。0にすると、収まらない語はすべて分割します。1行ずつ組む場合、音節で終わる行は3行以上続きません。ハードハイフン(enseñanza-aprendizaje)、URLの区切り、テキストに入力したソフトハイフン、行全体より広い語は、これまでどおりに改行します。ゾーンと2行の制限が制御するのは辞書による音節だけです。

この設定は文書全体に効きます。本文テキストと引用ブロックが行末不ぞろいのときに適用され、行末不ぞろいの段落スタイルや囲みの本文のうち、自身のhyphenationがオンのもの(既定値は本文のhyphenation.enabled)にも適用されます。したがって、hyphenation: falseにすると、そのスタイルの語は丸ごと保たれます。見出し、キャプション、注、表のセル、目次はハイフネーションしません。そこでは、ほかと同様に、行長全体より広い語だけを分割します。デザインのテキスト(柱、章扉、部扉)は、各テキスト要素のhyphenateフラグに従います。組み込みの全ページの章扉と部扉はこれを設定しており、文書の辞書も使います。両端そろえのテキストではraggedとzoneは無視されます。

const config: PostextConfig = {
  locale: 'es',
  bodyText: {
    textAlign: 'left',
    // A little more hyphenation than the 3 em default.
    hyphenation: { ragged: true, zone: { value: 2, unit: 'em' } },
  },
};

optimalRagged(既定)を使うと、行末不ぞろいの本文テキストはKnuth-Plassで改行され、ゾーンはそこでも同じ意味を持ちます。語を分割するのは、行の残りに収まらず、丸ごと送るとゾーンを超えるアキが残る場合だけです。音節で終わる行が2行続くことは禁止されませんが、両端そろえのテキストでハイフンが2行続くのと同じコストがかかるため、3行続くことはまれです。optimalRagged: falseまたはoptimalLineBreaking: falseでは、postext 1.4までと同様に、各行を埋めてから次の行に進みます。

行末不ぞろいのハイフネーションでは、インライン書式(太字、イタリック、リンク、数式)を含む段落が常に使う改行処理で段落を組みます。そのため、オンにするとハイフン以外の改行位置もいくつか変わることがあります。行末不ぞろいの行では、この改行処理はスペースと辞書の音節のほかに、2語の間のハードハイフンやダッシュの後(largas—separadas。breakAfterDashesを使うと、語の間に前後を詰めて置いたあらゆるダッシュ、つまりriddles.—Iやriddles—*and*も)、URLの区切り、表意文字の間で改行し、複数の範囲にまたがって組まれた語は分割しません(**Nota**:、(*véase*)。行末不ぞろいのハイフネーションを使わない場合、書式のない行末不ぞろいの段落は、optimalRaggedがオン(既定)ならKnuth-Plassで改行されます。改行位置は、語間、2文字の間のハードハイフンの後(meta- · analyses。もう一方の改行処理と同じ)、breakAfterDashesを使う場合は前後を詰めたダッシュの後です。1行ずつ組む場合はpretextの改行処理を通り、3つの点で異なります。挿入句を閉じるダッシュの前や開くダッシュの後でも改行することがあり(él · — y)、ハイフネーションするときはスラッシュの後でも改行し(km/ · h)、行より広い語を任意の文字の位置でハイフンなしに切ります。もう一方の改行処理は、まず音節で分割します。

Sandboxでは、このスイッチは本文セクションの段落の行そろえの下にある行末不ぞろいのテキストもハイフネーションで、その下にゾーンがあります。本文が両端そろえの場合、同じスイッチは両端そろえの設定と並んでおり、行末不ぞろいの段落スタイルと囲みに適用されます。

#文書の言語

トップレベルのlocaleは文書全体の言語です。hyphenation.localeと同じ値を取り、そのフィールドが未設定のときの代わりになります。スペイン語の本なら、locale: 'es'だけでスペイン語のハイフネーションになります。表と分割された囲みの、組み込みの継続表示の文字列((cont.)/ContinuedかContinúaか。ページより高い表と分割された囲みの目印を参照)や、言葉で書く見出し番号(Chapter OneかCapítulo unoか。語で綴る番号を参照)の言語もこれで決まり、アクセシブルなPDFにタグ付けする言語にもなります。未設定の場合、エンジンは'en-us'とみなします。Sandboxはインターフェースの言語を使い、このフィールドをデザイン › 表記体系で設定します。

組み込みのリソースタイプもこれで決まります。resourceTypesが未設定の場合、buildDocumentはdefaultResourceTypes(locale)で番号とキャプションを付けるので、locale: 'de'だけでAbbildung 1.1やTabelle 1.1になります。localeが未設定の場合は、リソースタイプでも表の文字列でも、ハイフネーションのロケールが代わりに使われます。明示的に指定したresourceTypesのリストが常に優先されます。以前のバージョンでは、defaultResourceTypes(locale)を自分で渡さない限り、localeにかかわらず英語のタイプを使っていました。localeを設定しつつ英語のラベルを残したい文書は、resourceTypes: defaultResourceTypes('en')を渡します。Sandboxの本とバンドルは自身のリストを持っているので、影響を受けません。

ここでもhyphenation.localeと同様に任意のBCP 47タグが使えます。'de-AT'ならドイツ語の文字列になります。組み込みの文字列があるのは、ハイフネーションが対応する8言語、中国語(簡体字と繁体字)、日本語、アラビア語です。それ以外の言語には英語の文字列が使われます。

中国語では、zh、zh-Hans、zh-Hant、zh-CN、zh-SG、zh-TW、zh-HK、zh-MOと長い形(zh-Hant-TW)を、大文字・小文字を問わず、-でも_でも受け付けます。文字列はIntl.Locale(tag).maximize()で読み取った用字に従います。zh、zh-CN、zh-SGは簡体字、zh-TW、zh-HK、zh-MOは繁体字です。一方、言語に依存する組版の既定値は、clreq §1.2の推奨どおり地域に従います。CN、SG、MYは中国大陸、TWは台湾、HKとMOは香港とみなし、地域のないタグは用字で判断します(zh-Hantは台湾、zhとzh-Hansは中国大陸)。日本語では、ja、ja-JP、ja-Jpan、そのほかのjaタグを受け付けます(isJapaneseLanguage(tag))。postext 1.16からは日本語独自の文字列と独自の地域japanを持ち、その組版の既定値はJLReqに従います(日本語の組版を参照)。日本語の項目がない文字列の表では、中国語ではなく英語が使われます。localeScript(tag)、cjkRegionOf(tag)、stringsKeyOf(tag)、sameContentLocale(a, b)はこれらの判定結果を返します。DOCUMENT_LANGUAGESは組み込みの文字列がある言語の一覧で、各言語はその言語自身の名前で表記されています(日本語は中国語の項目とالعربيةの間)。Sandboxの文書の言語の選択肢にはこの一覧が表示されます。

言語図:名前、複数形、短いラベル表:名前、複数形、短いラベル表の継続表示:continuedSuffix、continuesMarker
英語(en)Figure, Figures, Fig.Table, Tables, Tab.(cont.), Continued
スペイン語(es)Figura, Figuras, Fig.Tabla, Tablas, Tabla(cont.), Continúa
フランス語(fr)Figure, Figures, Fig.Tableau, Tableaux, Tabl.(suite), À suivre
ドイツ語(de)Abbildung, Abbildungen, Abb.Tabelle, Tabellen, Tab.(Forts.), Wird fortgesetzt
イタリア語(it)Figura, Figure, Fig.Tabella, Tabelle, Tab.(segue), Continua
ポルトガル語(pt)Figura, Figuras, Fig.Tabela, Tabelas, Tab.(cont.), Continua
カタルーニャ語(ca)Figura, Figures, Fig.Taula, Taules, Taula(cont.), Continua
オランダ語(nl)Figuur, Figuren, Fig.Tabel, Tabellen, Tab.(vervolg), Wordt vervolgd
簡体字中国語(zh-Hans、zh、zh-CN)图, 图, 图表, 表, 表(续), 接下页
繁体字中国語(zh-Hant、zh-TW、zh-HK)圖, 圖, 圖表, 表, 表(續), 接下頁
日本語(ja、ja-JP)図, 図, 図表, 表, 表(続き), 次ページへ続く
アラビア語(ar、ar-EG、ar-MA…)شكل, أشكال, شكلجدول, جداول, جدول(تابع), يتبع

キャプションの接頭辞はタイプの名前です(Figure 1.1.)。中国語のタイプは章ごとにハイフンで番号を付け({h1}-{n}、图 1-1)、キャプションの設定でlabelNumberGap: ''とlabelSeparator: ' 'を指定すると、キャプションは图1-1 标题になります(キャプションスタイルを参照)。索引も言語に従います。簡体字では、相互参照の前に见と另见を置き、記号と数字の項目の上に符号と数字の見出しを置きます。繁体字では見、另見、符號、數字を使います。日本語も同じ方法でタイプに番号を付け、この2つの設定なしでキャプションを図1-1 題と組みます。相互参照は第3章、2.3節、12ページと書き、参考文献の見出しを「参考文献」とします。索引は記号と数字の項目の上にそれぞれ「記号」「数字」の見出しを置き、相互参照を矢印で示します。seeは→夏目漱石、see alsoはページ番号の後に→夏目漱石、森鷗外も見よと書き、ラベルは正体です。アラビア語も同じ方法でタイプに番号を付け({h1}-{n}、شكل 2-3)、相互参照はالفصل 3、القسم 2-1、ص 12と書き、参考文献の見出しをالمراجعとします。索引はانظر/انظر أيضًا、رموز、أرقامを使い、アラビア語のカンマとセミコロン(، ؛)を使います。

中国語・日本語・韓国語の文書は、HTML出力(.pt-docのルートのlang。zh-Hant-TWはそのまま保持)と、描画するCanvas(ctx.lang。Chrome 136以降)で言語を宣言します。これにより、ブラウザーは地域に合った字形で描画します。Unicodeは漢字を統合しているため、同じコードポイントでも台湾のフォントと日本のフォントでは見た目が異なるからです。postext 1.30以降は、ほかの文書も、テキストを組む言語を同じように宣言します(bodyText.shapingLanguage: 'document'、既定値)。'host'では、ほかの文書にはlangを付けず、どのCanvasも自分をホストしているページの言語で描画します。PDFは、タグ付きかどうかにかかわらず、すべての文書でlocaleから用字と地域を含めて/Langを宣言します。右から左に書く言語(アラビア語、ペルシア語、ウルドゥー語、ヘブライ語など)の文書も言語を宣言し、フォントの言語別字形(locl)とフォールバックフォントはそれに従います。

const config: PostextConfig = {
  locale: 'es',
  bodyText: { textAlign: 'justify', hyphenation: { enabled: true } }, // hyphenates in Spanish
};

#文書の数字

トップレベルのnumeralsは、エンジンが書くすべての数の数字を設定します。対象は、ノンブルと、目次・索引・ページ参照のページ表記、番号付きリストと脚注の番号、見出しと章のカウンター、{chapterNumber}、図番号とその参照の{h1}と{n}、{totalPages}、{bookTotalPages}、{numberDecimal}です。'latn'は0–9、'arab'はアラビア・インド数字٠–٩、'arabext'はペルシア数字۰–۹で書きます。変わるのは10進の形式(decimal、リストのarabic、または既定値のままの設定)だけなので、著者が名前で指定した形式はそのとおりに出力されます。lower-romanはi、ii、iiiのままで、ラテン文字の文書でarabic-indicを指定すれば١، ٢، ٣と書きます。文書のテキストが書き換えられることはありません。

既定値の'auto'は、localeの数字を使います(defaultNumeralsFor(tag))。地域なしのアラビア語とマグリブ以外の地域のアラビア語(ar、ar-EG、ar-SA、ar-AEなど)は'arab'、ar-MA、ar-DZ、ar-TN、ar-LY、ar-MR、ar-EHは'latn'、ペルシア語(fa)、パシュトー語(ps)、インドのウルドゥー語(ur-IN)は'arabext'、パキスタンのウルドゥー語を含むそれ以外はすべて'latn'です。CLDRは地域なしのarとar-AEにlatnを割り当てていますが、マシュリクと湾岸地域のアラビア語の本は٠–٩で印刷され、Postextはそれに従います。数字を指定したタグはその数字を保ちます(ar-MA-u-nu-arab)。文書の数字でノンブルを付けたページは、pageNumberFormatとしてarabic-indicまたはpersianを記録するので、PDFのページラベルにも同じ数字が表示されます。不明な値は言語に従い、unknownNumeralsとして報告されます。

著者が入力した数は、3つの方式のいずれでも読み取ります。リスト項目٣.は3から始まり、{startAt=٥}、:::numbering{startAt=٥}、:::space{lines=٢}、:::part{number="٣"}({numberDecimal}用)もその値を読み取ります。

const config: PostextConfig = { locale: 'ar' };                     // ١، ٢، ٣
const maghreb: PostextConfig = { locale: 'ar-MA' };                 // 1, 2, 3
const forced: PostextConfig = { locale: 'ar', numerals: 'latn' };   // 1, 2, 3

#テキストの方向

トップレベルのdirectionは文書の基本方向を設定します。'ltr'、'rtl'、'auto'(既定)のいずれかです。既定値は、localeの用字が右から左に書かれる場合(アラビア文字、ペルシア語、ウルドゥー語、ヘブライ文字、シリア文字、ターナ文字、ンコ文字、アドラム文字など。directionOf(tag)で判定)に'rtl'、それ以外では'ltr'になります。右から左の文書は鏡像の座標系でレイアウトされます。行は右から始まり、第1段は右の段になり、インデント、リストのマーカー、フロート、脚注、囲みは右側に置かれ、page.binding: 'auto'は右綴じになります。解決済みの設定がdirection: 'rtl'を持つのはそうした文書だけなので、左から右の文書はこれまでどおりに解決されます。不明な値は'auto'として読み取られ、unknownConfigValueとして報告されます。Unicodeの双方向アルゴリズム(UAX #9)は、どちらの方向でも各行のランを並べます。英語の本の中のアラビア語の引用は、その場で右から左に読めます。

文書の中では、見出しや:::コンテナーに{dir=ltr}や{dir=rtl}を付けられ、インラインの:ltr[…]と:rtl[…]はテキストの範囲を分離します(マークアップでの文字方向を参照)。表のリソースにはtable.directionを指定します。文書と逆の方向に組んだブロックは、自身の開始側を保ちます。そのインデント、リストのマーカー、最終行の寄せる側は、テキストが始まる側に移ります。

側を指定する設定は、用紙の側ではなく、テキストまたは本文の流れの側を意味します。そのため、英語の本のために作ったデザインは、本をアラビア語に切り替えてもそのまま機能します。'start'と'end'も明示的な名前として受け付けます。

設定'left'/'right''start'/'end'
本文、見出し、段落スタイル、部、脚注、囲みの本文のtextAlign。キャプションとキャプションの注記のalignテキストの側。'left'は行が始まる側で、アラビア語の段落では右になり、両端そろえの段落の最終行もそちらに寄ります。'left'と'right'の同義語。解決済みの設定は'left'/'right'を持ち、保存した設定は書かれたとおりの値を保ちます。
表のセルのalignセルのテキストの側。表の方向(table.direction)で読み取ります。同義語。表の方向で読み取ります。
placement.align(フロート、幅の狭い図)本文の流れの側。右から左の本では、'left'は用紙の右です。同義語。
囲みのstripe.side、icon.cornerSide、labelTab.position('top-start'、'top-end')本文の流れの側。ページ上のすべての囲みで同じです。囲み自身の方向(アラビア語の本の中の:::callout{dir=ltr}は用紙の左から始まります)。
ヘッダーとフッターのスロット。用紙に固定したデザイン要素用紙の側。テキスト要素のみ。要素自身のdirectionの始まりと終わり。

placement.rotateは鏡像のページでも物理的な意味を保ちます。時計回りに回転した図は、用紙の上でも時計回りに回転します。レイアウトを読み取るホストは、各ページの鏡像の座標系(direction: 'rtl'を持つVDTPage.flow、pageIsMirrored(page))と、各行のセグメントの表示順(VDTLine.order)を参照できます。flowToPageとpageToFlowは、流れと用紙の間で座標を変換します。アラビア語の組版を参照してください。

const arabic: PostextConfig = { locale: 'ar' };                        // right to left, bound on the right
const english: PostextConfig = { locale: 'en', direction: 'rtl' };     // forced; rarely what you want

#言語と文字体系

Postextは、左から右に書くアルファベット系の文字体系と、横組み・縦組みの中国語と日本語を組めます。中国語の組版と日本語の組版では、それらの組み方と、それを制御する設定を説明しています。設定キーは東アジアの組版、縦組み、綴じにあります。文字体系ごとの扱いは次のとおりです。

  • 中国語は、段落のCJK文字が語間より多いときにCJKコンポーザーで組まれます。行はcjk.lineBreakの行頭・行末の規則のもとで文字の間で改行し(。、」やーで始まる行、「や(で終わる行は作りません)、——と……、記号付きの数、ラテン文字の語は分割しません。両端そろえの行は、文字の間を広げて行長にそろえます。約物の幅、ぶら下げ、漢字とラテン文字の間のアキ、文字グリッド、圏点、固有名詞と書名の符号、ルビ、割注は、横組みでも縦組み(layout.writingMode: 'vertical-rl')でも、localeの地域に従います。いくつかのCJKの語を引用するラテン文字の段落は最適改行を保ち、それらの語の隣で改行することがあります。ラテン文字のテキストに引用したCJKの括弧、中黒、全角の記号(〈h〉、%)は何も変えません。
  • 日本語は同じコンポーザーを通りますが、postext 1.16からは独自の規則、つまりW3Cの『日本語組版処理の要件』(JLReq)とJIS X 4051の規則に従います。jaロケールはjapan地域になり、その自動の値によって、JLReqの禁則のレベル(小書きの仮名とーは行頭に置かない)、約物の連続の詰めを伴う全角の約物、?!の後の全角アキ、段落冒頭の始め括弧を字下げの後半に置く処理、本文の上に付けるゴマ圏点、『』による書名、1:2:1の割付けによるルビ、日本語の番号表記、注、読みで並べる索引が設定されます。以前のバージョンでは、日本語を中国大陸の既定値で組んでいました。
  • 韓国語も同じコンポーザーを通り、ハイフネーションなしで組まれますが、既定値は中国大陸のものです。韓国語独自の規則(KLREQ)は実装されていません。韓国語のテキストは、スペースのほかに音節の間でも改行します。
  • アラビア語とそのほかの右から左の文字体系(ペルシア語、ウルドゥー語、ヘブライ語など)は右から左に組まれます。詳しくはアラビア語の組版で説明しています。文書のdirectionはlocaleの用字から決まり、Unicodeの双方向アルゴリズムが各行の中のラテン文字の語と数を並べ、本は右綴じで第1段が右になり、エンジンが書くすべての数は地域の数字を使います。アラビア文字を含む語は、ハイフネーション、字間の調整、分割の対象にならず、アラビア語の両端そろえの行は語間とカシーダで伸ばします。母音記号、強調、脚注、アラビア語の文字列はアラビア文字のテキストにあります。ペルシア語、ウルドゥー語、ヘブライ語には方向、数字、語を分割しない規則が適用されますが、独自の組み込みの文字列はありません。

ハイフネーションのパターンは8言語分を同梱しています(en-us、es、fr、de、it、pt、ca、nl)。組み込みのリソースタイプと継続表示の文字列は、この8言語と、中国語、日本語、アラビア語にあります。中国語、日本語、韓国語と、右から左に書く言語は、ハイフネーションなしで組まれます。それ以外の言語は、コンソールに警告を出したうえでアメリカ英語のパターンでハイフネーションし、英語の文字列を使います。そうした文書では、hyphenation.enabled: falseを設定し、resourceTypesとtableStyleの継続表示の文字列をその言語で渡してください。

#アラビア文字のテキスト

ここの設定はアラビア文字のテキストのためのもので、ほかの文字体系で書かれた文書には何の影響もありません。アラビア語の組版では、方向、綴じ、数字、韻文、目次、索引といったアラビア語の本のほかの要素とあわせて説明しています。

  • 母音記号と行送り。母音記号付きのテキストの母音記号(ファトハ、カスラ、シャッダ、タンウィーン、短剣アリフ、クルアーンの記号)は、文字の上下の行間に積み重なり、行送りはそのために広がることはありません。記号を含む各行は、記号のインクがどこまで届くか(VDTLine.markInk)を記録し、レンダラーの段のクリップは段の最初と最後の行の記号を含めます。語の上の記号が、上の行の語の下にぶら下がる文字や記号とぶつかると、ビルドはその段落を報告します(arabicMarksExceedLeading。Sandboxの検査パネル)。比較するのは上下に重なる語だけです。部分的に母音記号を付けたテキストには約1.7–1.85 emのlineHeight、完全に母音記号を付けた韻文には1.9–2.1 emが適しています。
  • 強調。アラビア文字の活字にはイタリックがないため、localeがアラビア文字で書かれる文書では、*…*は既定で太字になります(bodyText.emphasis: 'auto')。'color'はitalicColorの正体で組み、'overline'は語の上に線を引きます。アラビア語の本で使われるkhaṭṭ fawqīです。この設定は、本文の書体で組むすべてのテキスト、つまり段落、リスト、引用ブロック、段落スタイル、囲みの本文、注、見出しに及びます。キャプション、表のセル、目次、索引は、自身のイタリックの設定を保ちます。どれを選んでも、エンジンがアラビア文字をイタリックにすることはありません。イタリックで組んだ範囲のうち、アラビア語の語は正体のままで、ラテン文字の語はイタリックを保ちます。そうした文書では、引用ブロックは既定で正体です。
  • タシュキール(tashkīl)。bodyText.tashkil: 'strip'は、レイアウトで組むテキストから母音記号とクルアーンの記号を取り除きます。母音記号付きの原稿から母音記号なしの版を作るためのものです。対象は、ファトハ、ダンマ、カスラとそのタンウィーン、スクーン、シャッダ、短剣アリフ(هٰذاはهذاになります)、U+0656–U+065FとU+06D6–U+06EDの記号です。'strip-vowels'は、現代の多くの本と同じようにシャッダを残します。ハムザとマッダは残ります(أ إ آは文字であり、結合記号で入力した場合も同じです)。原稿は記号を保ち、行、見出し、目次は記号なしで組まれますが、組まれた文字はすべて原稿の中の位置に対応づけられたままです。
  • 脚注。footnotes.markerTemplate: '({n})'は合印を文書の数字で«(١)»と書き、numbering: 'page'はページごとに番号を振り直し、noteNumberPosition: 'inline'は注自身の番号を行の中に組みます。区切り線と注の番号は段の始まり側に置かれ、右から左の本では右側になります。
  • 語を分割しない。アラビア文字を含む語は、アラビア語の本の中でも、ほかの言語の本に引用した場合でも、ハイフネーション、分割、字間の調整の対象になりません。アラビア文字のテキストにletterSpacingを設定したスタイルは報告され(joiningScriptLetterSpacing)、行より広い語は行からはみ出して報告されます(unbreakableWordOverflow)。アラビア語の組版を参照してください。
  • カシーダと韻文。アラビア語の両端そろえの行は、語間に加えてカシーダでも伸ばします(bodyText.kashida。アラビア文字のカシーダを参照)。古典詩は、:::verseを使うと、同じ幅の2つの半句からなるベイト(bayt)を1行に1つずつ組みます(:::verseを参照)。
  • 索引。アラビア語の索引はアルファベット順に並べ、冠詞ال(index.ignoreArticle)、母音記号、ハムザの座を無視します。索引を参照してください。