# الإعدادات: الصفحة والتخطيط

> مقاس الصفحة والهوامش وشبكة خطوط الأساس، والأعمدة والفواصل بينها، ورؤوس الصفحات وتذييلاتها

- نسخة HTML: https://postext.dev/ar/docs/configuration-page-layout
- آخر تحديث: 2026-10-10
- مدة القراءة: 6 دقائق
- لغات أخرى: [en](https://postext.dev/en/docs/configuration-page-layout.md), [es](https://postext.dev/es/docs/configuration-page-layout.md), [ca](https://postext.dev/ca/docs/configuration-page-layout.md), [pt](https://postext.dev/pt/docs/configuration-page-layout.md), [zh](https://postext.dev/zh/docs/configuration-page-layout.md), [ja](https://postext.dev/ja/docs/configuration-page-layout.md)

## باختصار

تتناول هذه الصفحة إعدادات الورقة نفسها. تختار مقاس الصفحة والهوامش وجهة تجليد الكتاب والشبكة التي تستقر عليها أسطر النص. وتحدد عدد أعمدة الصفحة ومقدار الفراغ بينها. وتقرر أيضًا ما يُطبع أعلى كل صفحة وأسفلها، مثل رقم الصفحة أو عنوان الفصل. وهي إحدى الصفحات التسع في مرجع الإعدادات.

## الصفحة

تتحكم الخاصية `page` في الأبعاد المادية للصفحة وفي مظهرها.

| الخاصية | النوع | القيمة الافتراضية | الوصف |
| --- | --- | --- | --- |
| `sizePreset` | `PageSizePreset` | `'17x24'` | مقاس صفحة معرّف مسبقًا. اضبطه على `'custom'` لاستخدام عرض وارتفاع صريحين. |
| `width` | `Dimension` | `17 cm` | عرض الصفحة. يؤخذ من `sizePreset` عند إغفاله؛ والقيمة الصريحة تتقدّم دائمًا (استخدم `sizePreset: 'custom'` للمقاسات المخصّصة كليًا). |
| `height` | `Dimension` | `24 cm` | ارتفاع الصفحة. يؤخذ من `sizePreset` عند إغفاله؛ والقيمة الصريحة تتقدّم دائمًا. |
| `margins` | `PageMargins` | `2 cm` لكل الجوانب | المسافة بين حافة الصفحة ومساحة المحتوى. يُضبط كل جانب (الأعلى والأسفل والأيسر والأيمن) على حدة. مع `mirror: true` تصبح الهوامش *هوامش صفحات متقابلة*: `left` هو الهامش الداخلي (جهة الكعب) و`right` هو الخارجي؛ تُبقي الصفحات الفردية (الصفحة 1 فردية) الهوامش كما كُتبت وتبدّلها الصفحات الزوجية، فتنتقل مساحة المحتوى، ومعها الأعمدة وأشرطة العناصر العائمة وحاويات الترويسة والتذييل وأشرطة صفحات الافتتاح، من جانب إلى آخر بين الصفحتين المتقابلتين. القيمة الافتراضية `false`. انظر أدناه. |
| `backgroundColor` | `ColorValue` | `transparent` | لون خلفية الصفحة. |
| `dpi` | `number` | `300` | عدد البكسلات في البوصة الذي يعمل به الإخراج: به تُحوَّل الوحدات المادية (cm وmm وin وpt) إلى بكسلاته. والصورة النقطية التي ليست لها دقة خاصة بها تأخذ بكسلًا واحدًا من الإخراج لكل بكسل فيها، فتُطبع بهذا العدد من البكسلات في البوصة (ppi): أبقِه 300 للطباعة، أو أعطِ الصور دقة (`Resource.bitmap.resolution`، `layout.bitmapResolution`؛ انظر [صيغة المستند › مقاس الصورة النقطية](https://postext.dev/ar/docs/document-format.md#مقاس-الصورة-النقطية)). ويفحص [الفحص قبل الطباعة](https://postext.dev/ar/docs/configuration-fonts-colors-viewers.md#الفحص-قبل-الطباعة) الدقة الفعلية لكل صورة. |
| `cutLines` | `CutLinesConfig` | معطّل | يُظهر علامات القص في زوايا الصفحة لقصّ المطبوع. عند تفعيله تتّسع اللوحة (Canvas) لتشمل مساحة النزف وعلامات القص. انظر أدناه. |
| `baselineGrid` | `BaselineGridConfig` | معطّل | يرسم شبكة خطوط الأساس فوق الصفحات لفحص الإيقاع العمودي. يلتزم الإخراج بالشبكة سواء رُسمت أم لم تُرسم. انظر أدناه. |
| `binding` | `'auto' \| 'left' \| 'right'` | `'auto'` | الحافة التي يُجلَّد الكتاب عندها. `'auto'` تساوي `'right'` حين تكون `layout.writingMode` هي `'vertical-rl'`، أو حين يجري المستند من اليمين إلى اليسار ([`direction`](https://postext.dev/ar/docs/configuration-text.md#اتجاه-النص))، أو حين يُقرأ قسم [`comics`](https://postext.dev/ar/docs/configuration-comics.md#القصص-المصورة) فيه من اليمين إلى اليسار (مانغا، أو طبعة يابانية أو بالصينية التقليدية)، وإلا فهي `'left'`. الكتاب المجلّد على اليمين يُفتتح بصفحة يسرى ويعكس هوامشه في الاتجاه المقابل. إعداد على مستوى الكتاب: لا يغيّره `layout` الخاص بنمط عنوان أبدًا. انظر [التجليد](https://postext.dev/ar/docs/configuration-page-layout.md#التجليد). |

### الهوامش المتناظرة

تُقرأ الكتب صفحتين متقابلتين، وعادةً ما يختلف الهامش الداخلي عن الخارجي. يحوّل `margins.mirror` الهوامش الأربعة إلى هوامش صفحات متقابلة:

```json
{
  "page": {
    "margins": {
      "top": { "value": 2, "unit": "cm" },
      "bottom": { "value": 2.5, "unit": "cm" },
      "left": { "value": 2.2, "unit": "cm" },
      "right": { "value": 1.4, "unit": "cm" },
      "mirror": true
    }
  }
}
```

بهذه الإعدادات يكون لكل صفحة فردية هامش 2.2 cm على اليسار (الكعب) و1.4 cm على اليمين (الحافة الأمامية)؛ ولكل صفحة زوجية 1.4 cm على اليسار (الحافة الأمامية) و2.2 cm على اليمين (الكعب). تحمل كل صفحة مُخرَجة `contentArea` الخاصة بها في `VDTPage`، فكل ما يُشتق منها، أي الأعمدة وأشرطة العناصر العائمة بعرض الصفحة وحاويات الترويسة والتذييل وأشرطة صفحات الافتتاح ذات `span: 'page'`، يتبع الهندسة المتناظرة تلقائيًا. أما إطارا الصفحة والنزف اللذان تستخدمهما عناصر التصميم المثبّتة إلى `'page'` / `'bleed'` فلا يتأثران: إنهما يصفان الورقة المادية لا الهوامش.

### التجليد

«تُجلَّد المستندات الصينية المنضّدة عموديًا على الجانب الأيمن، وتُجلَّد المستندات المنضّدة أفقيًا على الجانب الأيسر» ([clreq §7.1.1.1](https://www.w3.org/TR/clreq/#x7-1-1-1-basic-elements-of-page-formatting)). يُخرج `page.binding: 'right'` الكتابَ للتجليد على الحافة اليمنى:

- تظل الصفحة 1 فردية وتظل وجهَ الورقة (recto)، فتحتفظ `breakBefore.parity` و`:::pagebreak{parity}` وعناصر التصميم ذات `parity` وكل عدّ للصفحات بمعانيها. ما يتغيّر هو الجانب الذي يقع عليه وجه الورقة: الصفحة اليسرى من الصفحتين المتقابلتين. والفصل الذي يُفتتح على وجه ورقة جديد يُفتتح على صفحة يسرى ([clreq §7.1.3.3](https://www.w3.org/TR/clreq/#x7-1-3-3-how-to-handle-headings-with-new-recto-and-page-break)).
- مع `margins.mirror` يبقى `left` هو الهامش الداخلي، لكن الصفحات الفردية هي التي تبدّل: الهامش الداخلي للصفحة 1 على يمينها، وللصفحة 2 على يسارها. ويتبع القاعدة نفسها كلٌّ من العمود الجانبي في `oneAndHalf` عند `'outer'` / `'inner'`، والعنصر العائم المُدار الملاصق للكعب، وهوامش صفحات الأجزاء، وأيقونات زوايا الإطارات عند `'outer'` / `'inner'`.
- يصرّح المستند بذلك (`VDTDocument.binding: 'right'`)، فلا يحتاج المضيف أبدًا إلى قراءة الإعدادات: يعرض Sandbox، بيئة التجربة في المتصفح، صفحاته المتقابلة على هيئة `[3 | 2]` والصفحة 1 وحدها على يسار الكعب، ويعرض عارض HTML فيه الصفحاتِ من اليمين إلى اليسار، فيُفتح عند الطرف الأيمن ويقود السهم الأيسر إلى الصفحة التالية. وفي وضع multi يرتّب `renderToHtml` الصف من اليمين إلى اليسار.
- يحمل ملف PDF `/ViewerPreferences << /Direction /R2L >>` و`/PageLayout /TwoPageRight` (الصفحة 1 وحدها ثم أزواج)، موسومًا كان أم غير موسوم. يتبعهما Acrobat وFoxit؛ ويتجاهلهما كليهما العارض المدمج في Chrome.

لا تتحرك أرقام الصفحات والترويسات من تلقاء نفسها: القالب الذي يطبع رقم الصفحة في الزاوية الخارجية يحتاج إلى ضبط عناصره الفردية والزوجية للحافة اليمنى (تقبل العناصر `parity`).

والكتاب المكتوب من اليمين إلى اليسار (العربية والفارسية والعبرية…) يُجلَّد على اليمين أيضًا: تعطي `'auto'` الحافة اليمنى حين يُحسم [`direction`](https://postext.dev/ar/docs/configuration-text.md#اتجاه-النص) الخاص بالمستند إلى `'rtl'`. ويعكس مثل هذا الكتاب تدفقه كله كذلك، فيكون عموده الأول هو الأيمن، وتقع إزاحاته وعلامات قوائمه وعناصره العائمة وحواشيه على اليمين؛ أما خانات الترويسة والتذييل فتبقى في مواضعها المادية. انظر [الإخراج العربي](https://postext.dev/ar/docs/arabic-layout.md#ترتيب-الصفحات-والتجليد-على-اليمين).

والقصة المصورة التي تُقرأ من اليمين إلى اليسار تُجلَّد على اليمين أيضًا: تعطي `'auto'` الحافة اليمنى حين يكون في الإعدادات قسم `comics` يُحسم اتجاه قراءته إلى `'rtl'`. وهذه حال المانغا (`comics.artDirection: 'rtl'`) والطبعة اليابانية أو الصينية التقليدية لقصة مصورة غربية. ويحسم القسم الأمر للكتاب كله، لا كتل `:::page` في فصل واحد. انظر [القصص المصورة](https://postext.dev/ar/docs/comics.md#اتجاه-القراءة).

### مقاسات الصفحة المسبقة

| المقاس المسبق | العرض | الارتفاع | الاستخدام الشائع |
| --- | --- | --- | --- |
| `'11x17'` | 11 cm | 17 cm | كتب الجيب |
| `'12x19'` | 12 cm | 19 cm | الكتب الورقية القياسية |
| `'17x24'` | 17 cm | 24 cm | الكتب التقنية والكتب المدرسية |
| `'21x28'` | 21 cm | 28 cm | المجلات والتقارير (قريب من A4) |
| `'broadsheet'` | 375 mm | 597 mm | صحف القطع الكبير |
| `'berliner'` | 315 mm | 470 mm | صحف قطع برلينر |
| `'tabloid'` | 280 mm | 430 mm | صحف التابلويد |
| `'compact'` | 297 mm | 420 mm | صحف القطع المدمج (صحيفة القطع الكبير مطويةً إلى نصفين) |

> **شكل: مقاسات الصفحة المسبقة**
> أربعة مقاسات صفحة مسبقة مدمجة مرسومة بمقياس متناسب: الجيب 11x17، والورقي 12x19، والتقني 17x24، و21x28 cm القريب من A4.
>
> *المقاسات المسبقة مرسومة بمقياس متناسب.*

صيغ الصحف الأربع جديدة في postext 1.18 ولا تظهر في الرسم: مساحة صفحة القطع الكبير تقارب أربعة أضعاف مساحة صفحة 21 × 28. وتُنضَّد عادةً بـ[تخطيط `'multiple'`](https://postext.dev/ar/docs/configuration-page-layout.md#أنواع-التخطيط)؛ والشائع ستة أعمدة في القطع الكبير وخمسة في التابلويد.

### شبكة خطوط الأساس

شبكة خطوط الأساس هي إيقاع نص المتن: أسطر تفصل بينها مسافة ارتفاع سطر واحد من المتن، تُعدّ من أعلى مساحة المحتوى. يستخدمها الإخراج سواء رُسمت أم لم تُرسم: تعيد العناوين ونهايات القوائم والإطارات والأشكال والمعادلات المعروضة النصَّ إليها (ما لم يكن `snapToGrid` الخاص بها معطّلًا)، فتبقى أسطر الأعمدة المتجاورة متحاذية. لا يفعل `enabled` إلا رسم الخطوط، في Canvas وفي PDF وفي عروض Sandbox، لفحص ذلك الإيقاع؛ وتشغيله أو إيقافه لا يحرّك شيئًا. لا تمتد الخطوط إلا على نص الصفحة الفعلي، من أول سطر نص إلى آخره، فلا تظهر شبكة في أشرطة العناصر العائمة ولا في الصفحات الفارغة المضافة لضبط الزوجية ولا في المساحة الفارغة الباقية في آخر الصفحة.

| الخاصية | النوع | القيمة الافتراضية | الوصف |
| --- | --- | --- | --- |
| `enabled` | `boolean` | `false` | هل تُرسم خطوط الشبكة (في Canvas وفي PDF). الرسم فقط: الإخراج هو نفسه في الحالتين. |
| `color` | `ColorValue` | `#cccccc` | لون خطوط الشبكة. |
| `lineWidth` | `Dimension` | `0.5 pt` | سماكة خطوط الشبكة. |

```ts
page: {
  baselineGrid: { enabled: true, color: { hex: '#e0e0e0', model: 'hex' } }
}
```

### خطوط القص

عند التفعيل تتّسع اللوحة لتشمل مساحة نزف، ويرسم المحرّك علامات القص عند كل زاوية لأغراض الإنتاج الطباعي. ويعطي ملف PDF كل صفحة TrimBox وBleedBox؛ وملف [PDF/X](https://postext.dev/ar/docs/configuration-fonts-colors-viewers.md#pdfx-1a-وpdfx-4) يحملهما حتى من غير علامات القص. وتُضبط في Sandbox من **التصدير › التجهيز للطباعة**.

| الخاصية | النوع | القيمة الافتراضية | الوصف |
| --- | --- | --- | --- |
| `enabled` | `boolean` | `false` | هل تُوسَّع اللوحة بمساحة النزف وتُرسم علامات القص. |
| `bleed` | `Dimension` | `3 mm` | مساحة إضافية حول الصفحة تُستخدم للنزف الطباعي. |
| `markLength` | `Dimension` | `5 mm` | طول كل علامة قص. |
| `markOffset` | `Dimension` | `3 mm` | الفجوة بين حدّ القص وبداية كل علامة قص. لا تبدأ العلامة أبدًا داخل النزف: حين يكون `bleed` أعرض، تبدأ العلامة عند حافة النزف. |
| `markWidth` | `Dimension` | `0.25 pt` | سماكة علامات القص. |
| `color` | `ColorValue` | `#000000` | لون علامات القص في Canvas (المعاينة على الشاشة). أما ملف PDF فيطليها دائمًا بلون التسجيل (registration colour) (انظر أدناه). |

تكبر الورقة بمقدار `bleed + markOffset + markLength` من كل جانب، وتقع الصفحة المقصوصة في وسطها. تحصل كل زاوية من زوايا حدّ القص على علامتين طول كل منهما `markLength`، كل منهما على امتداد إحدى الحافتين اللتين تلتقيان عندها. تبدأ العلامة على مسافة `markOffset` خارج حدّ القص، أو عند حافة النزف حين يكون `bleed` هو الأعرض بينهما، فلا تقع أي علامة فوق رسم يمتد إلى النزف. مع القيم الافتراضية (3 mm من النزف وإزاحة 3 mm) تمتد العلامات من 3 إلى 8 mm خارج حدّ القص، ويدور حول الورقة خارجها شريط فارغ عرضه 3 mm. تعيد `cropMarkSegments(page, doc.config.page, doc.trimOffset)` علامات الصفحة الثماني ببكسلات الصفحة، وهي التي يرسمها مُخرِجا Canvas وPDF. الوسيط الثالث هو موضع حدّ القص داخل الورقة، وهو القيمة التي يُكتب منها `TrimBox` في ملف PDF؛ وإن أُغفل، يُحسب من `cutLines` بالطريقة نفسها.

لا يُطبع خارج النزف شيء سوى العلامات. كل ما ترسمه الصفحة، بما في ذلك عناصر التصميم المثبّتة إلى `'page'` أو `'bleed'`، يُقصّ عند صندوق النزف في Canvas وفي PDF وفي مخرجات HTML، كما يقصّه التصدير من برامج النشر المكتبي (DTP): الشريط أو الصورة الموضوعة عمدًا خارج النزف تُقطع عند حافة النزف، حيث كانت آلة القص ستزيلها على أي حال. وحتى الإصدار postext 1.4 كان مثل هذا العنصر يمتد فوق العلامات إلى حافة الورقة.

في PDF (`postext-pdf`) يكون MediaBox لكل صفحة هو الورقة كلها. وتحمل الصفحة أيضًا TrimBox، أي الصفحة المقصوصة، وBleedBox، أي حدّ القص مضافًا إليه النزف، وهما ما تقرؤه أدوات الترتيب الطباعي (imposition) والفحص قبل الطباعة (preflight). وتُطلى العلامات بلون التسجيل، أي الفصل اللوني `/All`، فتُطبع على كل لوح. ويصحّ ذلك أيًّا كان نظام الألوان الذي يُكتب به ملف PDF (RGB أو التدرّج الرمادي أو CMYK): فالأسود العادي يصل إلى المطبعة أسود غنيًّا أو على لوح الأسود وحده. ولا يُطبَّق `color` إلا على Canvas.

### ترقيم الصفحات

يتحكم القسم `page.pageNumbering` في طريقة تنسيق تسميات الصفحات وفي القيمة التي يبدأ منها العدّاد. وهو لا يعرّف إلا القيمة الافتراضية على مستوى المستند كله؛ ولإعادة بدء الترقيم في منتصف المستند (مثل صفحات تمهيدية بأرقام رومانية تتحول إلى فصول بأرقام عشرية تبدأ من 1)، استخدم التوجيه `:::numbering` (انظر **صيغة المستند › التوجيهات**).

| الخاصية | النوع | القيمة الافتراضية | الوصف |
| --- | --- | --- | --- |
| `format` | `'decimal' \| 'lower-roman' \| 'upper-roman' \| 'lower-alpha' \| 'upper-alpha'`، أو أحد أنماط شرق آسيا | `'decimal'` | النمط العددي المستخدم في رسم تسميات الصفحات. أنماط شرق آسيا (`'trad-chinese-informal'` يرقّم الصفحات 一، 二، 三) مذكورة في [صيغ كتابة أنماط الترقيم](https://postext.dev/ar/docs/configuration-page-layout.md#صيغ-كتابة-أنماط-الترقيم). |
| `startAt` | `number` | `1` | القيمة العددية المسندة إلى الصفحة الأولى أيًا كان التنسيق. `format: 'lower-roman', startAt: 1` تعطي `i, ii, iii, …`؛ و`format: 'decimal', startAt: 17` تعطي `17, 18, 19, …`. |

تُخزَّن التسمية المحسوبة في كل `VDTPage` باسم `pageLabel`، وهي ما يُحسم إليه العنصر النائب `{pageNumber}` في الترويسة والتذييل. وتُصدر ملفات PDF شجرة أرقام `/PageLabels` فيطابق مؤشر الصفحة في Preview / Acrobat والتنقل عبر «الانتقال إلى الصفحة» التسمياتِ المطبوعة تمامًا. والنمط الذي لا يملك له PDF رمزًا (الأرقام الصينية والأرقام داخل دوائر والأرقام كاملة العرض) يُكتب صفحةً صفحة، فيعرض القارئ 一، 二، 三 أيضًا.

#### صيغ كتابة أنماط الترقيم

ثلاثة إعدادات تختار تنسيقًا للترقيم، ولكل منها صيغة كتابة نشأت معه: تسميات الصفحات (`page.pageNumbering.format` و`:::numbering{format=…}`) تقول `lower-roman`، والقوائم المرقّمة (`orderedLists.numberFormat`) تقول `arabic` للعشري، وأنواع الموارد (`counterFormat`) تقول `roman-lower`. يقبل كل منها جميع الصيغ أدناه، فالتنسيق المنسوخ من إعداد يعمل في الإعدادين الآخرين. لا تميّز الأسماء بين الأحرف الكبيرة والصغيرة؛ أما الصيغ ذات الحرف الواحد فتميّز (`i` و`I` مختلفان).

| التنسيق | يطبع | الصيغ المقبولة |
| --- | --- | --- |
| عشري | `1, 2, 3` | `decimal`، `arabic`، `1` |
| روماني بأحرف صغيرة | `i, ii, iii` | `lower-roman`، `roman-lower`، `i` |
| روماني بأحرف كبيرة | `I, II, III` | `upper-roman`، `roman-upper`، `I` |
| حروف لاتينية صغيرة | `a, b, c` | `lower-alpha`، `alpha-lower`، `lower-latin`، `a` |
| حروف لاتينية كبيرة | `A, B, C` | `upper-alpha`، `alpha-upper`، `upper-latin`، `A` |
| الأعداد الصينية، المبسّطة | 一, 十二, 一百零一 | `simp-chinese-informal`، `一` في مستند بالصينية المبسّطة |
| الأعداد الصينية، التقليدية | 一, 十二, 一萬 | `trad-chinese-informal`، `cjk-ideographic`، `一` في مستند بالصينية التقليدية |
| الأعداد الصينية المالية، المبسّطة | 壹, 壹拾贰, 壹佰贰拾 | `simp-chinese-formal`، `壹` في مستند بالصينية المبسّطة |
| الأعداد الصينية المالية، التقليدية | 壹, 壹拾貳, 壹佰貳拾 | `trad-chinese-formal`، `壹` في مستند بالصينية التقليدية |
| الأرقام الصينية خانةً خانة | 一二〇, 二〇二六 | `cjk-decimal`، `〇` |
| السيقان السماوية | 甲, 乙, 丙 … 癸 | `cjk-heavenly-stem`، `甲` |
| الفروع الأرضية | 子, 丑, 寅 … 亥 | `cjk-earthly-branch`، `子` |
| الأعداد اليابانية | 一, 十二, 百一, 一万一 | `japanese-informal`، `一` في مستند ياباني |
| الأعداد اليابانية الرسمية | 壱, 壱拾弐, 壱百 | `japanese-formal`، `壱` |
| الهيراغانا، بترتيب غوجوون | あ, い, う … ん, ああ | `hiragana`، `あ` |
| الكاتاكانا، بترتيب غوجوون | ア, イ, ウ … ン, アア | `katakana`، `ア` |
| الهيراغانا، بترتيب إيروها | い, ろ, は … す, いい | `hiragana-iroha`، `い` |
| الكاتاكانا، بترتيب إيروها | イ, ロ, ハ … ス, イイ | `katakana-iroha`، `イ` |
| أرقام داخل دوائر | ①, ②, ③ … ㊿ | `circled-decimal`، `①` |
| أرقام كاملة العرض | １, ２, ３ | `fullwidth-decimal`، `１` |
| الأرقام الهندية العربية | ١, ٢, ٣ … ١٠ | `arabic-indic`، `١` |
| الأرقام الفارسية | ۱, ۲, ۳ … ۱۰ | `persian`، `urdu`، `۱` |
| الحروف العربية، بترتيب أبجد | أ, ب, ج, د, هـ … غ, أأ | `abjad`، `أبجد` |
| الحروف العربية، بالترتيب الهجائي | أ, ب, ت, ث … ي, أأ | `hijai`، `arabic-alpha`، `arabic-alphabetic`، `أبتث` |
| الأعداد الأبجدية (حساب الجُمَّل) | ا, ب … يا (11), غتمو (1446) | `arabic-abjad` |
| الأعداد الأبجدية، بالقيم المغربية | ص (60), ض (90), ش (1000) | `arabic-abjad-maghrebi`، `maghrebi-abjad` |

تحتفظ أنماط شرق آسيا بأسمائها في [CSS Counter Styles](https://www.w3.org/TR/css-counter-styles-3/#limited-chinese) في الإعدادات الثلاثة كلها. تكتب الأعداد الصينية غير الرسمية 十 للأعداد من 10 إلى 19 دون 一 في أولها (十二، ولكن 一百一十)، و零 واحدة لكل سلسلة أصفار داخل العدد (一百零一، 一千零五十)، و万 أو 萬 للعشرة آلاف، و亿 أو 億 للمئة مليون (一万零一十). وحده `cjk-decimal` يستخدم 〇، خانةً خانة، على طريقة كتابة السنوات (二〇二六، GB/T 15835—2011). تتوقف السيقان عند 10، والفروع عند 12، والأرقام داخل الدوائر عند 50؛ وبعدها يُطبع العدد بالأرقام. ويتبع `一` و`壹` نظامَ كتابة `locale` الخاص بالمستند: التقليدي لـ `zh-Hant` أو `zh-TW` أو `zh-HK`، والمبسّط في غير ذلك. بعض الطبعات القديمة تكتب 101 على هيئة 一百一 دون 零؛ ولا يطبع Postext هذه الصيغة.

وتتبع الأنماط اليابانية (منذ postext 1.16) CSS Counter Styles أيضًا. يكتب `japanese-informal` 十 دون 一 في أولها ودون 零 للخانة الفارغة (百一، 千十)، ويكتب `japanese-formal` الأعداد الكبيرة (大字) 壱 弐 参 拾 百 阡 مع إبقاء 壱 قبل كل وحدة (壱拾، 壱百). ويوقف CSS كليهما عند 9 999؛ أما Postext فيستمر بمجموعات من أربعة أرقام مع 万 億 兆 (وفي الرسمي 萬 億 兆)، وتحتفظ كل مجموعة بـ 一 قبل الوحدة: 一万一 هي 10 001، و一億一万 هي 100 010 000. وفي المستند الياباني (`ja`، `ja-JP`…) يعني `一` الأسلوب `japanese-informal`، فيطبع `第{1:一}章` 第百一章 هناك و第一百零一章 في المستند الصيني؛ ويبقى `壹` الأعداد الصينية الرسمية. وسلاسل الكانا هي قوائم CSS: 48 حرف كانا بترتيب غوجوون (منها ゐ وゑ) و47 بترتيب قصيدة إيروها؛ وبعد الحرف الأخير تستمر بحرفين (ああ، いい)، ولا صفر فيها، فالعنصر المرقّم 0 يطبع `0`. والأرقام الموضعية بالكانجي (二〇二六)، صيغة السنوات وأرقام الصفحات، هي `cjk-decimal`.

تحتفظ الأنماط العربية بأسماء CSS حيث يوجد لها اسم في CSS (`arabic-indic` و`persian`؛ ويُقرأ `urdu` و`maghrebi-abjad` المأخوذان من مذكرة W3C *Ready-made Counter Styles* على أنهما `persian` و`arabic-abjad-maghrebi`). ويحتفظ `arabic` بمعناه القديم، أي الأرقام الأوروبية. يكتب `arabic-abjad` الأعداد الأبجدية الجمعية في العربية التراثية وفي ترقيم أوراق المخطوطات، بدءًا بالقيمة الأعلى: 11 هي يا، و1446 هي غتمو، وعدد الآلاف يأتي قبل غ (2000 بغ، 1002 غب)؛ وبعد 999 999 يُطبع العدد بالأرقام. تستخدم مذكرة W3C هذا الاسم لسلسلة من 28 حرفًا تكون فيها 11 هي ك؛ ويسمّي Postext تلك السلسلة `abjad`، أي ترقيم عناصر القوائم بالحروف بترتيب أبجد (أ، ب، ج، د، هـ)، ويسمّي `hijai` الترتيب الهجائي (أ، ب، ت، ث). كلاهما يكتب الحرف الأول بهمزته (أ)، والهاء التي تقف منفردة على هيئة هـ بالتطويل، فلا يُقرأ أي منهما على أنه الرقمان ١ و٥؛ وبعد 28 تتضاعف الحروف، كما في `lower-alpha` (أأ, أب). وتتبع القيم المغربية العبارة التذكيرية صعفض قرست ثخذ ظغش (ص 60، ض 90)؛ وتبدّل قائمة W3C بين ص وض. ولا يكفي حرف أ وحده للتمييز بين السلسلتين، فرمزاهما هما أحرفهما الأربعة الأولى: `{1:أبجد}` و`{1:أبتث}`. أما أرقام المستند نفسه فتُضبط بالإعداد [`numerals`](https://postext.dev/ar/docs/configuration-text.md#أرقام-المستند).

الصيغ الأخرى مخصّصة للإعدادات التي لا يتحقق أحد من أنواعها: الإعدادات المسبقة بصيغة JSON وJavaScript العادية. ما تزال أنواع TypeScript لا تسمّي إلا الصيغة الخاصة بكل إعداد، أي التي يكتبها Sandbox ويعيدها `resolveAllConfig`، بما فيها أسماء شرق آسيا، فيلتزم بها `PostextConfig` المحدّد النوع، وتحتاج أي صيغة أخرى إلى تحويل نوع (cast).

```js
// JavaScript or a JSON preset (in TypeScript, each setting's own spelling)
orderedLists: { numberFormat: 'decimal' },          // same as 'arabic'
page: { pageNumbering: { format: 'roman-lower' } }, // same as 'lower-roman'
resourceTypes: [{ id: 'plate', counterFormat: 'upper-roman', … }], // same as 'roman-upper'
```

يحوّل `resolveAllConfig` تنسيقات القوائم والصفحات إلى صيغة الإعداد الخاص بكل منها، فتُحسم `'decimal'` إلى `'arabic'` في `orderedLists`، و`'roman-lower'` إلى `'lower-roman'` في `page.pageNumbering`، ويُسقط `stripConfigDefaults` أي صيغة تساوي القيمة الافتراضية. تعرض لوحات Sandbox كل إعداد من الإعدادات الثلاثة بصيغته الخاصة، أيًا كانت الصيغة المستخدمة في الإعدادات. وأي قيمة أخرى، مثل `roman` أو `01` أو خطأ إملائي، ترقّم بالأرقام العشرية بدلًا من طباعة `undefined`، ويُبلَّغ عنها [تحذيرًا في الإعدادات](https://postext.dev/ar/docs/configuration-fonts-colors-viewers.md#تحذيرات-الإعدادات). وتقبل قوالب ترقيم العناوين الأسماء نفسها بعد النقطتين (`{1:roman-upper}` هو `{1:I}`)، إلى جانب صيغتها الخاصة ذات الأصفار البادئة `{1:01}`.

## التخطيط

تتحكم الخاصية `layout` في ترتيب الأعمدة داخل مساحة المحتوى.

> **شكل: الأعمدة والفاصل والهامش**
> صفحة مقسّمة إلى ثلاثة أعمدة: كل عمود هو مساحة المحتوى المخصّصة للنص، والفواصل هي الفجوات العمودية بين الأعمدة، والهامش هو الحافة الفارغة بين حدّ الصفحة والعمود الأول.
>
> *الأعمدة تحمل النص. الفواصل تفصل بينها. الهوامش تؤطّر المحتوى.*

> **شكل: نظام الهوامش**
> صفحة لها هوامش مستقلة في الأعلى واليمين والأسفل واليسار تحيط بمساحة المحتوى.
>
> *يمكن أن يكون لكل جانب من الصفحة هامشه الخاص.*

| الخاصية | النوع | القيمة الافتراضية | الوصف |
| --- | --- | --- | --- |
| `layoutType` | `'single' \| 'double' \| 'oneAndHalf' \| 'multiple'` | `'double'` | ترتيب الأعمدة. انظر أدناه لتفاصيل كل نوع. |
| `columnCount` | `number` | `3` | عدد الأعمدة المتساوية التي يقسم إليها تخطيط `'multiple'` المتن: عدد صحيح من 3 إلى 8. القيمة الواقعة خارج هذا المدى، أو غير الصحيحة، تُقيَّد ويُبلَّغ عنها (انظر [أنواع التخطيط](https://postext.dev/ar/docs/configuration-page-layout.md#أنواع-التخطيط)). وتخطيط `'multiple'` الخاص بنمط عنوان يأخذ عدد أعمدة المستند ما لم يضبط عدده. منذ postext 1.18. |
| `gutterWidth` | `Dimension` | `0.75 cm` | المسافة الأفقية بين الأعمدة. لا تنطبق إلا على التخطيطات متعددة الأعمدة. |
| `sideColumnPercent` | `number` | `33` | عرض العمود الجانبي نسبةً مئوية من مساحة المحتوى. تُستخدم كما كُتبت أي قيمة تترك لكلا العمودين شيئًا من العرض؛ أما القيمة التي لا تفعل ذلك فتُقيَّد، ويبلّغ البناء عنها (انظر [أنواع التخطيط](https://postext.dev/ar/docs/configuration-page-layout.md#أنواع-التخطيط)). لا تنطبق إلا على التخطيط `'oneAndHalf'`. |
| `sideColumnRole` | `'text' \| 'floats'` | `'text'` | ما يحمله العمود الجانبي: نص المتن (يتدفق إليه بعد العمود الرئيسي)، أو الموارد والإطارات الموضوعة بـ `span: 'side'` فقط، أي عمود هامشي للعناصر العائمة وحدها. لـ `'oneAndHalf'` فقط. مع `'text'`، تُعاد قسمة أسطر الفقرة التي تمتد من عمود إلى آخر على عرض العمود الذي تتابع فيه؛ وحتى postext 1.4 كانت تحتفظ بأسطر العمود الذي بدأت فيه، فكان السطر المنضّد لعرض العمود الرئيسي يتجاوز العمود الجانبي، فيُقصّ. |
| `sideColumnSide` | `'right' \| 'left' \| 'outer' \| 'inner'` | `'right'` | حافة مساحة المحتوى التي يقع عندها العمود الجانبي. تتبع `'outer'` / `'inner'` زوجية الصفحة حين تكون الهوامش متناظرة (الحافة الخارجية لوجه الورقة هي حافته اليمنى، ولظهرها حافته اليسرى). لـ `'oneAndHalf'` فقط. |
| `columnRule` | `ColumnRuleConfig` | معطّل | خط مرئي اختياري يُرسم بين الأعمدة. انظر أدناه. |
| `fitFiguresToPage` | `boolean` | `false` | يصغّر الشكل (صورة نقطية أو SVG) الذي تكون صورته وتعليقه وملاحظته معًا أطول من مساحة المحتوى حتى يتسع لها (والصورة ذات المنطقة الآمنة، `Resource.safeArea`، تُقصّ أولًا داخلها بكامل عرضها، ولا تُصغَّر إلا إذا بقيت لا تتسع)، ويصغّر الشكل المدرج في سياق النص الذي يزيد قليلًا على المساحة الباقية في عموده (حتى نصف عرضه، مع احتفاظ التعليق بعرض العمود) فيبقى مع نصه. وتقع الصورة المصغّرة في خانتها وفق `placement.align`. يفعّله عارض HTML، لأن صفحاته لا تزيد طولًا على الشاشة؛ أما الصفحات المطبوعة فمقاسها يناسب أشكالها. |
| `bitmapResolution` | `'document' \| 'file' \| number` | `'document'` | كيف تأخذ الصورة النقطية التي ليس لها `bitmap.resolution` خاص بها مقاسَ طباعتها الطبيعي. `'document'` تقرأ بكسلاتها بقيمة `page.dpi`؛ والرقم هو دقة كل صورة من هذا النوع بالـppi (`300`: الصورة ذات 2400 px عرضها 203.2 mm أيًّا كانت دقة الصفحة)؛ و`'file'` تستخدم الدقة التي يذكرها ملفها (`bitmap.fileResolution`)، وتُعدّ فيها 72 و96 غير محددتين، وإلا فـ`page.dpi`. يظل العمود يحدّ الصورة، ولا تُكبَّر الصورة الأصغر أبدًا. انظر [صيغة المستند › مقاس الصورة النقطية](https://postext.dev/ar/docs/document-format.md#مقاس-الصورة-النقطية). منذ postext 1.24. |
| `floatShrink` | `FloatShrinkConfig` | `mode: 'never'` | القيمة الافتراضية للمستند لـ`placement.shrink` (`mode`: `'never'` أو `'page'` أو `'slot'`) و`placement.minScale` (`minScale`، 0.7 إن لم يُضبط) في الصور العائمة: تصغير الصورة، مع حفظ نِسَبها، إلى حيّز موضعها بدل نقلها إلى ما بعده (انظر [تنسيق المستند › الموضع](https://postext.dev/ar/docs/document-format.md#الموضع)). ويتقدّم عليها موضعُ المورد نفسه، ثم `defaultPlacement` لنوعه. `fitFiguresToPage` يحدّ كل شكل بمساحة المحتوى؛ أما `floatShrink` فينظر في الشريط الذي سيشغله العنصر العائم فعلًا: تحت افتتاحية، أو بجانب أشكال عائمة أخرى، أو فوق الحواشي. منذ postext 1.24. |
| `wrap` | `TextWrapConfig` | `minTextWidth: 12em`, `minLinesBeside: 2`, `defaultWidth: 0.45` | النص المصفوف بجانب صورة أو صندوق أضيق من عموده (`placement.wrap`، و`wrap` الصندوق): `gap` المسافة بين العنصر والنص (سطر واحد من المتن إن لم تُحدَّد)؛ `minTextWidth` أضيق عرض يأخذه النص المجاور، طولًا أو حصةً من العمود (إذا كان أضيق يأخذ العنصر الشريط كله مع تحذير `textWrap`)؛ `minLinesBeside` أقل عدد من الأسطر يستحق الصفّ بجانبه؛ `defaultWidth` حصة العمود التي يأخذها العنصر الملتف حين لا يحدد `width`. انظر [تنسيق المستند › التفاف النص](https://postext.dev/ar/docs/document-format.md#التفاف-النص). منذ postext 1.24. |
| `floatsAtCitingPage` | `boolean` | `false` | القيمة الافتراضية للمستند لـ`placement.citingPage`: يمكن للشكل العائم `'top'` أو `'auto'` أن يحتل رأس الصفحة (شكل عائم بعرض الصفحة) أو رأس العمود (شكل عائم بعرض العمود) حيث يقع السطر الذي يشير إليه أول مرة، بدلًا من أول موضع شاغر بعد ذلك السطر، وينزل النص الذي فوق الإحالة تحته (انظر [تنسيق المستند › الموضع](https://postext.dev/ar/docs/document-format.md#الموضع)). يتقدم عليها موضع المورد نفسه، ثم `defaultPlacement` لنوعه. منذ postext 1.25. |
| `maxTopFraction` | `number` | `0.7` | أكبر نسبة من ارتفاع العمود، من 0 إلى 1، يجوز أن يأخذها شكل عائم في رأس الصفحة أو العمود الذي يشير إليه، مع الأشكال العائمة الموجودة هناك، لتبقى في الصفحة مساحة لنصها (`\topfraction` في LaTeX). الشكل الذي يحتاج أكثر من ذلك يذهب إلى موضعه المعتاد. منذ postext 1.25. |
| `hugClosingFloats` | `boolean` | `true` | في الصفحة الختامية من الفصل (ومن المستند)، ترتفع الأشكال والجداول الممتدة بعرض الصفحة الموضوعة تحت آخر شريط من النص لتستقر على مسافة فجوة واحدة من فجوات العناصر العائمة تحته، مكدّسة بترتيبها: لا شيء يليها هناك. تتركها `false` حيث وضعها موضعها المحدّد، فينتهي العنصر العائم ذو `position: 'bottom'` عند أسفل الصفحة في الصفحة الختامية كما في كل صفحة أخرى، كما في نشرة بيانات ينتهي مخططها عند الارتفاع نفسه في كل صفحة مثلًا. والصفحات التي فيها عمود جانبي لا تحرّكها أبدًا. |
| `inlineResourceGap` | `'around' \| 'above'` | `'around'` | الموضع الذي يحتفظ فيه المورد المدرج في سياق النص (`placement.position: 'here'`، المضمَّن بـ `::resource`) بفجوة العناصر العائمة، وهي سطر واحد. تحتفظ `'around'` بها فوق المورد وتحته، ويعود النص الذي يليه إلى شبكة خطوط الأساس تحت تلك الفجوة؛ والعنوان أو القائمة أو الإطار أو المورد المدرج الآخر الذي يليه مباشرة يتقاسم الفجوة السفلية مع مسافته العلوية الخاصة، فتُطبَّق الكبرى بينهما. تحتفظ `'above'` بها فوقه فقط: يستأنف النص الذي يلي المورد عند خط الشبكة التالي مهما كان قريبًا، بين لا شيء وسطر كامل، كما كان حتى postext 1.4. والإعدادات التي خزّنتها إصدارات سابقة وتضمّن فصولُها موردًا تُقرأ بالقيمة `'above'`، فلا تتحرك صفحاتها (انظر [الحزم المكتوبة بالإصدار postext 1.4 أو أقدم](https://postext.dev/ar/docs/configuration-programmatic-usage.md#الحزم-التي-كتبها-postext-14-أو-ما-قبله)). والإعدادات المكتوبة في الشيفرة للإصدار 1.4 تحتفظ بالتباعد القديم بضبط `'above'` بنفسها، أو عبر `pinLegacyInlineGap` من `postext/bundle`. |
| `inlineResourceGapInBoxes` | `boolean` | `true` | هل يحتفظ المورد المدرج داخل إطار (`:::callout`) بالفجوة التي يضبطها `inlineResourceGap`، وهي سطر من نص الإطار نفسه: فوق المورد، وتحته أيضًا مع `'around'`، فتُطبَّق الكبرى بينها وبين المسافة الخاصة بالكتلة التالية. في أعلى الإطار أو أسفله، أو في أعلى جزء من إطار مقسوم أو أسفله، تتولى الحشوة فصل المورد ولا تُضاف فجوة. تضع `false` المورد مباشرة تحت النص الذي قبله، والنص الذي بعده مباشرة تحت المورد، كما كان حتى postext 1.4. والإعدادات التي خزّنتها إصدارات سابقة وتضمّن فصولها موردًا داخل إطار تُقرأ بالقيمة `false` (انظر [الحزم المكتوبة بالإصدار postext 1.4 أو أقدم](https://postext.dev/ar/docs/configuration-programmatic-usage.md#الحزم-التي-كتبها-postext-14-أو-ما-قبله))؛ وفي الشيفرة، يفعل `pinLegacyBoxResourceGap` من `postext/bundle` الشيء نفسه. |
| `boxChildSplitMinLines` | `number` | `2` | أقل عدد من أسطر الفقرة أو عنصر القائمة يتركه القطع داخلها على كل جانب حين ينقسم الإطار (أما `splitMinLines`، في [أنماط الإطارات](https://postext.dev/ar/docs/configuration-styles.md#أنماط-الإطارات)، فما يزال يعدّ كل أسطر الإطار على كل جانب من القطع). عدد صحيح، 1 على الأقل. مع القيمة الافتراضية لا يترك القطع أبدًا سطرًا منفردًا من فقرة أو عنصر في أسفل عمود أو في رأس العمود التالي؛ ونمط الإطار الذي تكون فيه `splitMinLines` أقل يحدّد الحدّ بدلًا من ذلك. تسمح `1` للقطع بأن يترك سطرًا واحدًا من الفقرة أو العنصر على أحد الجانبين، كما كان حتى postext 1.4. والإعدادات التي خزّنتها إصدارات سابقة وتحتوي فصولها على `:::callout` تُقرأ بالقيمة `1` (انظر [الحزم المكتوبة بالإصدار postext 1.4 أو أقدم](https://postext.dev/ar/docs/configuration-programmatic-usage.md#الحزم-التي-كتبها-postext-14-أو-ما-قبله))؛ وفي الشيفرة، يفعل `pinLegacyBoxChildCut` من `postext/bundle` الشيء نفسه. |
| `flowColumns` | `boolean` | `true` | سياج `:::columns` خارج الإطار يُخرج كتله في أعمدة فرعية داخل عمود النص (أو على عرض الصفحة مع `span="page"`)، والمجموعة، في إطار كانت أو في النص، تُقطع بين أعمدتها الفرعية حين لا تتسع، وتستمر في العمود أو الصفحة التالية (انظر [صيغة المستند › `:::columns`](https://postext.dev/ar/docs/document-format.md#columns)). تتجاهل `false` السياج الواقع خارج الإطار ولا تقطع أبدًا داخل مجموعة، كما كان حتى postext 1.24؛ والإعدادات التي خزّنتها إصدارات سابقة وتحتوي فصولها على سياج `:::columns` تُقرأ بالقيمة `false`؛ وفي الشيفرة، يفعل `pinLegacyFlowColumns` من `postext/bundle` الشيء نفسه. والقسم ذو النمط يحتفظ بقيمة المستند. منذ postext 1.25. |
| `floatsUnderOpener` | `boolean` | `true` | تحت افتتاح بعرض الصفحة (مستوى عنوان أو نمط عنوان فيه `span: 'page'`) مضبوط فوق عمودين من النص أو أكثر، يكون رأس عمود الافتتاح نفسه، تحت شريطه مباشرة، موضعًا لعنصر عائم `'top'` أو `'auto'`، على مستوى رؤوس الأعمدة الأخرى: الإطار العائم الموضوع بعد الافتتاح مباشرة، أو المورد المضمَّن هناك، يقف تحت الافتتاح في العمود الأول (وعلى عدة أعمدة ابتداءً منه مع `columns`)، ويبدأ نص العمود تحته. أما العنصر العائم المُحال إليه في النص فيبقى بعد السطر الذي يشير إليه. لا تتيح `false` هذا الموضع، فيقع العنصر العائم ابتداءً من العمود الثاني، كما كان حتى postext 1.24؛ والإعدادات التي خزّنتها إصدارات سابقة وتحدّد عنوانًا بعرض الصفحة تُقرأ بالقيمة `false`؛ وفي الشيفرة، يفعل `pinLegacyOpenerHeadFloats` من `postext/bundle` الشيء نفسه. والقسم ذو النمط يحتفظ بقيمة المستند. منذ postext 1.25. |
| `writingMode` | `'horizontal-tb' \| 'vertical-rl'` | `'horizontal-tb'` | اتجاه جريان الأسطر. تنضّد `'vertical-rl'` النص الصيني والياباني عموديًا: الحروف من الأعلى إلى الأسفل، وكل سطر على يسار السطر الذي قبله. يرثها `layout` الخاص بنمط العنوان ما لم يضبط قيمته الخاصة، فيمكن أن يلي ملحقٌ أفقي كتابًا عموديًا. انظر [الكتابة العمودية](https://postext.dev/ar/docs/configuration-page-layout.md#الكتابة-العمودية). |

### الكتابة العمودية

مع `writingMode: 'vertical-rl'` تُخرَج الصفحة كأنها صفحة أفقية أُديرت ربع دورة باتجاه عقارب الساعة. يُنضَّد التدفق في إطار عرضه يساوي طول الورقة؛ وأسطره هي أعمدة النص العمودي، تُقرأ من اليمين، وكل ما يفعله المحرّك بالأسطر (الكسر وضبط الأسطر والعناصر العائمة والحواشي السفلية وقواعد إبقاء العناصر معًا) يعمل في ذلك الإطار. وعليه، على الورقة:

- عمود التخطيط هو **طبقة** (tier، 栏): يعطي `layoutType: 'double'` طبقتين مكدّستين من الأعلى إلى الأسفل، تُملآن بدءًا من أعلى اليمين؛ و`gutterWidth` هو الفجوة بينهما، والخط الفاصل بين الأعمدة خطٌّ أفقي بينهما. لا تُوازَن الطبقات في نهاية الفصل ([clreq §7.1.3.4](https://www.w3.org/TR/clreq/#x7-1-3-4-handling-of-spaces-just-before-the-new-recto-page-breaks-and-new-edges)): موازنة الأعمدة معطّلة في المستند العمودي ما لم يُضبط `headings.balancing.enabled`.
- ما يسمّيه التدفق «الأعلى» هو الحافة **اليمنى** للورقة، حيث تبدأ القراءة: العنصر العائم في الأعلى يقع على يمين الصفحة، والعائم في الأسفل على يسارها، وشريط صفحة الافتتاح الممتد على الصفحة شريطٌ ينزل على الحافة اليمنى، والحواشي السفلية تقع عند الطرف الأيسر لكل طبقة. وعنصر التصميم المثبّت إلى أعلى الصفحة (تصميم عنوان، إطار ثابت) مثبّت إلى الحافة اليمنى. القيمة `'left'` للإعداد `sideColumnSide` هي الطبقة العليا، و`'right'` الطبقة السفلى؛ وتُقرأ `'outer'` و`'inner'` على أنهما `'right'` و`'left'`.
- هوامش التدفق هي هوامش الورقة مُدارة: الهامش الأيمن هو أعلى التدفق، والهامش العلوي يساره. وتحتفظ `page.margins` بأسمائها على الورقة.
- تبقى الترويسات وأرقام الصفحات وعلامات القص وخلفية الصفحة على الورقة، منضّدة أفقيًا، كما تصف clreq للكتب العمودية.
- **تقف الأشكال والجداول قائمة.** يملأ الشكل ارتفاع طبقته بقدر ما يسمح تعليقه، على ألا يزيد عرضه على عرض الصفحة؛ والعرض الذي يأخذه هو المساحة التي يشغلها في التدفق. يُنضَّد تعليقه أفقيًا تحته، وكذلك خلايا الجدول: كلاهما يُقاس نصًا أفقيًا. يُنضَّد الجدول قائمًا عبر الصفحة، وتُقطع صفوفه على قدر الطبقة حين يكون أطول منها. يضع `placement.align` الشكل في أعلى طبقته (`'left'`) أو وسطها أو أسفلها. لا يُطبَّق `placement.rotate` حيث يُشار إلى الشكل أول مرة في نص عمودي: يبلّغ البناء عن تحذير المحتوى `rotateIgnoredVertical`. أما القسم الأفقي من الكتاب (نمط عنوان يضبط `layout` فيه `'horizontal-tb'`) فيدير أشكاله كما طُلب.
- صورة التصميم (رسم صفحة افتتاح، أو رسم صفحة جزء) تقف قائمة أيضًا. يُحسب مقاس صندوقها في التدفق بعد تبديل عرض الصورة وارتفاعها، فيكون `size.width` هو المسافة التي تمتد فيها الصورة نزولًا في العمود، ويُستنتج عرضها على الورقة من تناسب أبعادها.
- الحروف: تقف حروف الهان والكانا والصيغ كاملة العرض قائمة، كلٌّ منها بعرض em واحد؛ وتُدار الكلمات اللاتينية والأرقام جانبيًا بعروضها الأفقية؛ وتأخذ علامات الترقيم الصيغةَ العمودية من الخط. لا تُدار علامات الوقف والتوقف أبدًا: يضع خط البر الرئيسي 、。，． في الزاوية العليا اليمنى من الخانة و！？：； في نصفها الأيمن، ويوسّطها خطُّ تايوان أو هونغ كونغ (`cjk.region`). تأخذ الأقواس صيغها العمودية، وتُقرأ “ ” ‘ ’ في نصوص البر الرئيسي على هيئة 『』「」. وتأخذ الشرطات وعلامات الحذف وشرطة الموجة الصيغةَ العمودية من الخط حيث يملكها (يربط Noto CJK صيغة — بـ `vert` مع `fwid`: خطٌّ ينزل في وسط الخانة)، وإلا فتُدار مع توسيط حبرها على محور العمود. والـ 破折号 (——) في النص الصيني خطٌّ واحد ينزل في العمود: صيغه العمودية تترك فراغًا عند طرفي كل خانة، فتُدار كل شرطة مع السطر وتُمدّ كما في النص الأفقي (انظر [عروض علامات الترقيم](https://postext.dev/ar/docs/configuration-east-asian.md#عروض-علامات-الترقيم)). والعدد الذي لا يزيد على رقمين يقف في خانة قائمة واحدة، ما لم يقع في جملة لاتينية فيتبع كلماتها (انظر [الأرقام في النص العمودي](https://postext.dev/ar/docs/configuration-east-asian.md#الأرقام-في-النص-العمودي)). وتأخذ النقطة الوسطى (·) نصف خانة في نصوص البر الرئيسي وخانة كاملة في نصوص تايوان وهونغ كونغ. والعلامات التي يجعلها Unicode قائمةً (× © ± § ℃ ① وما شابهها) تقف في خانة خاصة بها، حتى داخل عدد: `3×4` هو 3 و4 مُداران جانبيًا وبينهما × قائمة. والفاصلة العليا أو النقطة الوسطى بين حرفين من كلمة لاتينية (`don’t`، `l·l`) تبقى في الكلمة، مُدارة جانبيًا. وتتبع الفقرة اللاتينية في تدفق عمودي القواعد نفسها. أما الصيغ الرياضية المدرجة في السطر والشارات (chips) وعيّنات الألوان (swatches) فتُدار جانبيًا مع السطر.
- يُقاس كل حرف كما يُرسم: الخانة تتقدّم بمقدار خانتها على امتداد السطر، والمقطع المُدار جانبيًا بعرضه الأفقي. والنص الذي يبقى أفقيًا على الورقة (الترويسات وأرقام الصفحات والتعليقات وخلايا الجداول) يُقاس أفقيًا.
- تنطبق [عروض علامات الترقيم](https://postext.dev/ar/docs/configuration-east-asian.md#عروض-علامات-الترقيم) و[تعليق علامات الترقيم](https://postext.dev/ar/docs/configuration-east-asian.md#علامات-الترقيم-المتدلّية) و[المسافة بين حروف الهان والحروف اللاتينية](https://postext.dev/ar/docs/configuration-east-asian.md#المسافة-بين-الهان-واللاتيني) على امتداد السطر نزولًا كما تنطبق عليه أفقيًا. الفراغ الذي يسبق الحرف يكون فوقه والفراغ الذي يليه تحته: تأخذ 、 بنمط Kaiming نصف خانة، وتنضغط `」「` إلى خانة ونصف، ويبدأ القوس الافتتاحي المقصوص في رأس السطر أعلى بنصف خانة، وتقع 。 المعلّقة تحت أسفل سطرها، والمسافة بين الهان واللاتينية ربع em من العمود فوق الكلمة المُدارة جانبيًا وتحتها. وتحتفظ `：；？！` بخانة كاملة في النص العمودي في كل المناطق.
- تَعُدّ [شبكة الحروف](https://postext.dev/ar/docs/configuration-east-asian.md#شبكة-الحروف) الحروفَ نزولًا على السطر والأسطرَ عبر الصفحة: يحدّد `charsPerLine` طول الطبقة، و`linesPerPage` عدد الأسطر التي تتسع لها الصفحة، ويعطي `layoutType: 'double'` طبقتين من حروف كاملة بينهما فاصل من وحدات em كاملة.

وللمضيفين الذين يقرؤون الإخراج: تحمل الصفحة العمودية `VDTPage.flow`. تكون `contentArea` والأعمدة والكتل والأسطر والعناصر العائمة ومساحات الحواشي وشريط صفحة الافتتاح وطبقات تصميم الكتل بإحداثيات التدفق؛ أما `width` و`height` و`header` و`footer` فعلى الورقة. تحوّل `flowToPage` و`pageToFlow` و`flowRectToPage` و`pageRectToFlow` بين النظامين، وتخبر `verticalOrientation(char, region)` كيف يقف الحرف. يعطي `flow.centralBaselines`، لكل عائلة خط، المحور الذي وسّط عليه الإخراجُ الحروفَ القائمة: مركز حبر 中، الذي يمتد شُقّه الطويل على ارتفاع صندوق em كله (0.38 em فوق خط الأساس في Noto Serif وNoto Sans، بنسختيهما SC وTC على السواء)، والموجود في كل خط صيني وياباني وكوري. يُوسَّط كل سطر على ذلك المحور: يقع خط أساس السطر العمودي تحت أعلى صندوق سطره بمقدار نصف ارتفاع سطره مضافًا إليه خط الأساس المركزي للعائلة (أما خط أساس السطر الأفقي فيقع على 0.8 من ارتفاع سطره نزولًا)، فيقف عمود الحروف في منتصف خطوته (pitch)، ويقع الخط المرسوم بين عمودين على مسافة خطوة كاملة في منتصف المسافة بينهما. ويُنضَّد نص التصميم العمودي بالطريقة نفسها في أسطره الخاصة. يرسم Canvas الصفحة العمودية بنفسه؛ ولرسم علامات الترقيم بالصيغ العمودية للخط نفسه، يحمّل المضيف في المتصفح، مرة واحدة لكل عائلة، وجهًا توأمًا تكون فيه تلك الصيغ مفعّلة: `loadVerticalAlternates(family, faces)`، حيث `faces` هي مصادر العائلة (عناوين URL أو بايتات) وواصفاتها. ولا يُحتفظ بالتوأم إلا حيث يطبّق المتصفح الخاصية على نص Canvas (Chrome 140 وما بعده): يرسم 「（《 بالتوأم وبنسخة من الوجوه نفسها محمّلة دون الخاصية، بوزن الوجوه المعطاة وأسلوبها، ويحتفظ بالتوأم حين يختلف حبرهما. والاستدعاء اللاحق لوجوه أخرى من عائلة توأمها قيد الاستخدام (العريض بعد العادي) يضيفها إليه. يفعل Sandbox ذلك لكل عائلة في مستند عمودي. ودون توأم، تُدار الأقواس حول صندوق em الخاص بها، وتُنقل علامات الوقف والتوقف في نصوص البر الرئيسي داخل خانتها إلى حيث تضعها الصيغ العمودية للخط: 、。，． إلى الزاوية العليا اليمنى (في حدود 0.07 em من الصيغ العمودية في Noto Serif SC)، و！？：； نصف em إلى اليمين وقليلًا إلى الأعلى (في حدود 0.02 em). ويُنضّد PDF وHTML الصفحة نفسها: انظر [النص العمودي في PDF](https://postext.dev/ar/docs/configuration-programmatic-usage.md#النص-العمودي-في-ملف-pdf) والجدول في [كيف يختلف إخراج HTML عن Canvas وPDF](https://postext.dev/ar/docs/configuration-programmatic-usage.md#كيف-يختلف-إخراج-html-عن-canvas-وpdf). وبالمقارنة خانةً خانة مع HarfBuzz (تخطيط عمودي مع `vert`) في Noto Serif TC وSC، يقف كل حرف من 「賈雨村」云云，宜乎？故曰！；：、。“引”‘單’…… في حدود 0.02 em منه في Canvas وفي PDF، وفي حدود 0.05 em في HTML (يوسّط Chrome الحرف المُدار على منتصف الصعود والنزول في الخط، وهو في Noto أعلى من مركز صندوق em بمقدار 0.05 em). يعطي `flow.dashAdvances`، لكل عائلة، التقدّم الأفقي بوحدات em لكل شرطة تمدّها الصفحة لتملأ خانتها (— – ― ⸺ ⸻ －)، للمُخرِج الذي لا يملك مقاييس خطوط خاصة به: يمدّ HTML الشرطة بها، كما يفعل Canvas وPDF من مقاييسهما. ويمكن تنضيد الترويسات وأرقام الصفحات عموديًا أيضًا: انظر [عناصر النص العمودي](https://postext.dev/ar/docs/configuration-page-layout.md#عناصر-النص-العمودي).

### الخط الفاصل بين الأعمدة

يرسم خطًا عموديًا رفيعًا في الفاصل بين الأعمدة للفصل بينها بصريًا.

| الخاصية | النوع | القيمة الافتراضية | الوصف |
| --- | --- | --- | --- |
| `enabled` | `boolean` | `false` | هل يُرسم الخط الفاصل بين الأعمدة. |
| `color` | `ColorValue` | `#cccccc` | لون الخط. |
| `lineWidth` | `Dimension` | `0.5 pt` | سماكة الخط. |

تحت عنوان ممتد على الصفحة (`span: 'page'`) يبدأ الخط حيث يبدأ نص الأعمدة، تحت شريط العنوان، سواء رسم الشريطَ تصميمُ الافتتاح الافتراضي أم تصميمٌ خاص بالعنوان. وحتى postext 1.4 كان يمتد من أعلى كتلة النص، عبر الشريط.

يمكن لنمط العنوان أن يضبط خطًا فاصلًا خاصًا به في `layout` الخاص به (انظر [أنماط العناوين](https://postext.dev/ar/docs/configuration-styles.md#أنماط-العناوين))، فترسمه صفحات قسمه. والحقل الذي يتركه النمط دون ضبط يأخذ قيمة المستند، فالقسم الذي لا يغيّر إلا أعمدته يحتفظ بالخط الفاصل الخاص بالمستند. وحتى postext 1.4 لم يكن خط النمط يُرسم أبدًا: كانت كل صفحة ترسم خط المستند.

### أنواع التخطيط

- **`'single'`** — عمود واحد يمتد على كامل عرض المحتوى. الأنسب للصفحات الضيقة أو للمحتوى الغالب عليه النص ذي الفقرات الطويلة.

- **`'double'`** — عمودان متساويان في العرض. التخطيط التحريري الكلاسيكي، يُبقي طول السطر ضمن المدى الأمثل من 40 إلى 50 حرفًا لقراءة مريحة.

- **`'oneAndHalf'`** — تخطيط غير متماثل فيه عمود رئيسي وعمود جانبي أضيق. العمود الجانبي (يتحكم فيه `sideColumnPercent`) مناسب لملاحظات الهامش والأشكال الصغيرة والمحتوى المساند. تعمل القيم بين 25 و40% جيدًا، ويأخذ مسارٌ ضيق لأرقام الأسطر أو العلامات الهامشية نحو 10–15%. يساوي العمود الجانبي `sideColumnPercent` % من عرض المحتوى، والعمود الرئيسي هو ما يتبقى بعد الفاصل، فعند 50% يكون العمود الجانبي أعرض من الرئيسي بمقدار فاصل واحد. تُخرَج أي قيمة كما كُتبت ما دام كل عمود يحتفظ بـ 1% على الأقل من عرض المحتوى؛ أما القيمة التي تترك أيًا منهما أضيق من ذلك، أي 0 أو أقل، أو قيمة كبيرة إلى حدّ أن يختفي العمود الرئيسي خلف الفاصل، فتُقيَّد إلى أقرب قيمة تحفظ العمودين، والقيمة التي ليست عددًا تأخذ القيمة الافتراضية، 33. وعندئذ تحمل `configWarnings` الخاصة بالمستند `{ kind: 'sideColumnPercentClamped', path: 'layout.sideColumnPercent', value, used }`، ويسمّي مسارُ `layout` الخاص بنمط عنوان ذلك النمطَ، كما في `headingStyles[2].layout.sideColumnPercent`، ويُقاس على هوامش ذلك النمط، ويعرض Sandbox هذه التحذيرات في لوحة **الفحوص** (Checks)؛ وتعيد `collectConfigWarnings(config)` القائمة نفسها دون إخراج أي شيء. والتخطيط الذي ليس `'oneAndHalf'` لا يقرأ القيمة أبدًا، ولا يبلّغ عنها أبدًا. مع `sideColumnRole: 'floats'` لا يدخل نص المتن العمود الجانبي أبدًا: يصبح مسارًا للأشكال والجداول والإطارات الموضوعة بـ `span: 'side'`. يتكدّس الشكل أو الجدول الجانبي بدءًا من رأس المسار في الصفحة التي تستشهد به أولًا، فالشكل الهامشي في الكتاب المدرسي يقع في أعلى صفحته حتى حين يستشهد به النص في موضع أدنى؛ والذي لا يتسع له باقي المسار ينتظر مسار الصفحة التالية. ويتكدّس الإطار الجانبي بجوار النص الذي يقطعه، وحين لا يتسع له باقي المسار هناك ينزلق إلى الأعلى إلى أدنى موضع ما يزال يتسع له (أسفله على أسفل المسار)، أو ينتظر الصفحة التالية. وحين يستمر النص الذي يلي علامة إغلاق الإطار (fence) في الصفحة التالية (العمود ممتلئ، أو قواعد الكسر تنقل ذلك النص)، يبقى الإطار عند علامة إغلاقه، بجوار النص الذي قبله؛ أما النمط الذي فيه `sideAtColumnEnd: 'after'` فيضعه بمحاذاة السطر الأول من النص الذي يلي علامة الإغلاق بدلًا من ذلك، في مسار الصفحة التالية، كما تحتاج أرقام الأسطر والعناوين الهامشية المكتوبة قبل سطرها. وعنصر تصميم العنوان الذي يقف في المسار، كرقم فصل مثبّت في الهامش الخارجي، يُبعَد عنه التكدّس أيضًا (انظر [الارتفاع المحجوز](https://postext.dev/ar/docs/configuration-text.md#الارتفاع-المحجوز)). وما تزال العناصر العائمة والإطارات ذات `span: 'page'` تعبر العمودين، والعنصر العائم في العمود ذو `placement.captionSide` يضع تعليقه في المسار، بمحاذاة الشكل. ومع الهوامش المتناظرة و`sideColumnSide: 'outer'`، يقع المسار عند الحافة الخارجية لكل صفحة: العمود الهامشي في الكتاب المدرسي.

- **`'multiple'`** — من ثلاثة إلى ثمانية أعمدة متساوية، بالعدد الذي يحدّده `columnCount` (3 افتراضيًا): شبكة الصحف وكثير من المجلات (منذ postext 1.18). عرض كل عمود `(عرض المحتوى − (n − 1) × gutterWidth) / n`. يجري النص من عمود إلى الذي يليه كما في تخطيط العمودين؛ ويُرسم الخط الفاصل في كل فاصل بين عمودين، وتسوّي موازنة الأعمدة بينها جميعًا في الصفحة الأخيرة من الفصل وقبل الإطار الممتد بعرض الصفحة، وتعمل الحواشي في كل عمود، وتعبر الأشكال والإطارات والعناوين الممتدة بعرض الصفحة الصفحةَ كلها. ويمكن لشكل أو لإطار عائم أن يشغل بعض الأعمدة فقط: `placement.columns` (انظر [أنواع الموارد](https://postext.dev/ar/docs/configuration-resources.md#أنواع-الموارد)) و`columns` في نمط الإطار. وقيمة `columnCount` الواقعة خارج 3–8 أو غير الصحيحة تُقرَّب وتُقيَّد بأقرب عدد صالح (والقيمة التي ليست عددًا تأخذ 3)، وتحمل `configWarnings` في المستند `{ kind: 'columnCountClamped', path: 'layout.columnCount', value, used }` (ومسار `layout` الخاص بنمط عنوان يسمّي النمط، كما في `headingStyles[1].layout.columnCount`). ولا يقرأ تخطيطٌ من نوع آخر هذه القيمة أبدًا. ونمط العنوان الذي `layout` فيه `'multiple'` يأخذ `columnCount` المستند ما لم يضبط عدده، فتستطيع جريدة من خمسة أعمدة أن تنضّد صفحات الرأي في أربعة.

## رؤوس الصفحات وتذييلاتها

تتحكّم الخاصيتان `header` و`footer` في خانتَي رأس الصفحة وتذييلها في كل صفحة. يُرسم رأس الصفحة وتذييلها **داخل هوامش الصفحة القائمة**: فلا يحجزان مساحة إضافية ولا يُقلّصان مساحة المحتوى.

**إطار الحاوية.** يوضع العنصر المثبّت إلى `'container'` في شريط الهامش الواقع بين المتن وحدّ القص، ممتدًا بعرض مساحة المحتوى. تمتد حاوية رأس الصفحة من **حدّ القص العلوي** نزولًا إلى أعلى المتن، وحاوية التذييل من أسفل المتن نزولًا إلى **حدّ القص السفلي**. لذلك تُقاس مراسي `top-*` في رأس الصفحة ومراسي `bottom-*` في التذييل من حدّ القص، بينما تُقاس مراسي `bottom-*` في رأس الصفحة ومراسي `top-*` في التذييل من حافة المتن. لا تشمل الحاوية النزف ولا شريط علامات القص أبدًا، فيقع رأس الصفحة أو التذييل في الموضع نفسه من الصفحة المقصوصة سواء كان `page.cutLines` مفعّلًا أم معطّلًا. ثبّت العنصر إلى `'page'` (صندوق القص) أو إلى `'bleed'` ليتجاوز عرض مساحة المحتوى أو يبلغ النزف.

تستخدم الخانات نموذج **خانة التصميم** الموحّد: لكل عنصر `placement` فيه `anchor` (مرساة إلى الحاوية أو إلى عنصر آخر عبر `#id`)، و`offset` اختياري، و`size` اختياري. لا تزال الحقول المسطّحة القديمة `align` و`marginFromBody` و`marginFromEdge` و`width: 'full'` مقبولة في الإدخال، وتُرحَّل إلى الشكل الجديد تلقائيًا؛ والوصف المكافئ بالشكل الجديد موثّق أدناه.

تحمل كل خانة قائمة من عناصر **النص** و**الخط الفاصل** و**الصندوق**. ترتيب المصفوفة هو ترتيب الرسم (يُرسم العنصر الأول أولًا، ويُرسم الأخير فوق الجميع). ويصحّ هذا أيًّا كانت المراسي: قد يُثبَّت عنصر إلى عنصر يرد بعده في القائمة (`anchor.to: '#ttl'`)، فيمكن أن يأتي صندوق الخلفية أولًا ويظل موضعه محسوبًا بالنسبة إلى النص الذي يقع خلفه.

**القيم الافتراضية المدمجة.** حين يكون `header` أو `footer` بقيمة `undefined`، يطبّق postext قيمة افتراضية مدمجة معقولة بدلًا من خانة فارغة:

- **رأس الصفحة الافتراضي:** `{title}` بمحاذاة اليمين في الصفحات الفردية، و`{chapterTitle}` بمحاذاة اليسار في الصفحات الزوجية، وخط فاصل بالعرض الكامل، وكلها باللون الرئيسي للوحة الألوان، بخط Open Sans 8pt/600، و`marginFromBody` بقيمة `16pt` (للنص) / `13pt` (للخط الفاصل).
- **التذييل الافتراضي:** `{pageNumber}` في الوسط في كل صفحة باللون الرئيسي للوحة الألوان، بخط Open Sans 8pt/600، و`marginFromBody` بقيمة `16pt`.

للاستغناء عن القيم الافتراضية المدمجة، اضبط `header: { elements: [] }` (أو `footer: { elements: [] }`). تُحفظ المصفوفة `elements` الفارغة الصريحة على أنها «بلا عناصر»؛ ووحدها القيمة `undefined` تستدعي القيم الافتراضية.

| الخاصية | النوع | القيمة الافتراضية | الوصف |
| --- | --- | --- | --- |
| `elements` | `HeaderFooterElement[]` | القيم الافتراضية المدمجة حين تكون `undefined`؛ و`[]` يعطّلها | قائمة مرتّبة من عناصر النص والخطوط الفاصلة. |

### عناصر النص

ترسم عناصر النص سلسلة قالب بعد استبدال العناصر النائبة (placeholders) فيها. تُكتب العناصر النائبة بالصيغة `{name}`؛ ويُخرج `{{` و`}}` قوسين معقوفين حرفيين.

القيم الافتراضية في الجدول أدناه هي قيم عنصر نص تضيفه بنفسك. أما رأس الصفحة والتذييل المدمجان الموصوفان تحت **القيم الافتراضية المدمجة** أعلاه فهما عنصران جاهزان لهما قيمهما الخاصة (Open Sans 8pt/600 باللون الرئيسي للوحة الألوان)، وليسا القيم الافتراضية للعنصر.

| الخاصية | النوع | القيمة الافتراضية | الوصف |
| --- | --- | --- | --- |
| `kind` | `'text'` | — | المميِّز (discriminator). |
| `id` | `string` | — | معرّف ثابت، فريد داخل الخانة. تُثبَّت إليه العناصر الأخرى بـ`anchor.to: '#id'`. يعيّن Sandbox معرّفًا عند الإنشاء. |
| `content` | `string` | `''` | سلسلة القالب. تدعم العناصر النائبة المدرجة أدناه، إضافة إلى `{attr.<key>}`: سمة مكتوبة في سطر H1 للفصل الحالي (`# Title {author="I. Zango"}`). تتحوّل السمة الغائبة إلى سلسلة فارغة دون تحذير. السطر الجديد، أو الحرفان `\n` مكتوبَين في القالب أو في قيمة سمة، يبدأ دائمًا سطرًا جديدًا أيًّا كانت قيمة `overflow`. أما النص الذي ينسخه عنصر نائب من المستند (عنوان، أو حقل من البيانات التمهيدية) فيُطبع كما كُتب: لا يبدأ فيه سطرًا جديدًا إلا فاصل أسطر حقيقي، مثل فاصل داخل عنوان. |
| `align` | `'left' \| 'center' \| 'right' \| 'justify' \| 'start' \| 'end'` | `'center'` | المحاذاة الأفقية للأسطر داخل صندوق العنصر. تمدّ `'justify'` المسافات بين الكلمات في كل سطر ملفوف عدا الأخير من كل فقرة حتى يملأ السطر الصندوق؛ وتملأ الأسطر المجاورة لحرف استهلالي المساحة المجاورة له. ومع `hyphenate`، تُقطع أيضًا الكلمة التي لا تتسع لبقية سطر مضبوط عند حدّ مقطع لملئه. يُصفّ بمحاذاة اليسار السطرُ الأخير من الفقرة، والسطر الذي لا مسافة فيه تُمدّ، والنص الذي لا يلتف. يُخرَج النص المضبوط فقرةً فقرة، فتُعدّ الأسطر الفارغة بين الفقرات سطرًا واحدًا. تضع Canvas وPDF كل كلمة حيث وضعها الإخراج؛ أما HTML فيوسّع المسافات بـ`word-spacing`. تتبع `'start'` و`'end'` قيمة `direction` للنص: فهما يمين النص ويساره إذا كان من اليمين إلى اليسار. أما `'left'` و`'right'` فهما جانبا الصندوق نفسه؛ وفي تصميم مُخرَج ضمن تدفّق صفحة من اليمين إلى اليسار (شريط صفحة افتتاح، تصميم عنوان) يكون التدفق معكوسًا، فيصيران بدايته ونهايته، كما في نص المتن. |
| `direction` | `'ltr' \| 'rtl' \| 'auto'` | قيمة المستند | الاتجاه الأساسي للنص: أين تذهب محارفه المحايدة، وترتيب مقاطعه في السطر، وما يعنيه الجانبان `'start'` و`'end'`. تقرأ `'auto'` أول حرف قوي الاتجاه في النص المحسوم، وتعود عند غيابه إلى [`direction`](https://postext.dev/ar/docs/configuration-text.md#اتجاه-النص) المستند. تُقرأ مقاطع العربية والعبرية من اليمين إلى اليسار أيًّا كان الاتجاه الأساسي. النص الذي يحوي حرفًا عربيًا لا يُطبَّق عليه تباعد الحروف أبدًا (يُتجاهل `letterSpacing` للنص كله)، ولا تُقطع كلماته أبدًا عند اللف أو الاقتطاع؛ والكلمة الأعرض من الصندوق تفيض ويُبلَّغ عنها بـ`unbreakableWordOverflow`. |
| `parity` | `'all' \| 'odd' \| 'even'` | `'all'` | الصفحات التي يظهر فيها العنصر (بحسب زوجية رقم الصفحة أو فرديته: الصفحة 1 فردية). |
| `pages` | `'all' \| 'body' \| 'opener' \| 'part' \| 'blank'` | `'all'` | *أدوار* الصفحات التي يظهر فيها العنصر، مقترنةً بـ`parity`. بعد التوزيع تُصنَّف كل صفحة على أنها `'blank'` (حشو للزوجية أو للفاصل، أو بلا محتوى)، أو `'part'` (صفحة فاصلة لجزء)، أو `'opener'` (أول كتلة فيها عنوان يمتد مستواه على الصفحة أو يفرض فاصل صفحة قبله: الصفحة الأولى من فصل)، أو `'body'` (كل ما عدا ذلك). يُخفي `pages: 'body'` الترويسة في صفحات افتتاح الفصول؛ ويُظهر `pages: 'opener'` رقم الصفحة هناك فقط. |
| `fontFamily` | `string` | `'EB Garamond'` | عائلة الخط. |
| `fontSize` | `Dimension` | `8 pt` | حجم الخط. |
| `fontWeight` | `number` | `400` | وزن الخط (100–900). |
| `italic` | `boolean` | `false` | هل يُرسم النص بخط مائل. |
| `color` | `ColorValue` | `#000000` | لون النص. |
| `overflow` | `'wrap' \| 'ellipsis-start' \| 'ellipsis-middle' \| 'ellipsis-end' \| 'clip'` | `'wrap'` في تصاميم العناوين والأجزاء، وإلا `'ellipsis-end'` | كيف يعالج المحرّك النص الذي يتجاوز العرض المتاح للعنصر. تكسر `'wrap'` السطر إلى أسطر عدة؛ وتُبقي صيغ علامة الحذف كل سطر في سطر واحد وتقتطعه بـ`…` في بدايته أو وسطه أو نهايته؛ وتقصّ `'clip'` النص قصًّا حادًّا عند الصندوق المحيط بالعنصر دون إدراج أي محرف. تنطبق فواصل الأسطر الموجودة في المحتوى في كل الأنماط: تقتطع أنماط الحذف والقص كل سطر على حدة. العنصر الذي يُغفل `overflow` يأخذ القيمة الافتراضية لموضعه: يلتف في تصميم العنوان (`advancedDesign.slot`) وفي صفحة الجزء (`parts.design`، `parts.versoDesign`)، وينتهي بـ`…` في ترويسة الصفحة والترقيم وسطر الجزء في الفهرس (`toc.parts.design`، سطر ثابت الارتفاع). اضبط `'wrap'` على ترويسة قد تمتد إلى أسطر عدة (عنوان بريدي)، أو علامة حذف على عبارة تمهيدية يجب أن تبقى في سطر واحد في افتتاحية. والسطر الذي اقتطعته علامة الحذف، أو قُصّ حبره خارج الصندوق، يُبلَّغ عنه بتنبيه المحتوى `designTextTruncated`، مرة لكل عنصر وصفحة (ولترويسة الصفحة أو الترقيم مرة لكل عنصر وفصل). والإعداد المحفوظ قبل postext 1.24 (`configVersion` 9 أو أقدم) يُقرأ بقيمة `'ellipsis-end'` على كل نص عنوان أو جزء لا يضبطها، فلا تتحرك صفحاته. النص الذي له `dropCap` يلتف أيًّا كانت هذه القيمة؛ ومع `'clip'` تظل أسطره تُقص عند حافة الصندوق الثابت الارتفاع. تقطع `'ellipsis-end'` و`'ellipsis-start'` عند حدّ كلمة، *The history of…* لا *The history of th…*، ولا تلاصق علامةَ الحذف أيُّ مسافة أو علامة ترقيم رابطة (فاصلة، نقطتان، شرطة، شرطة مائلة، قوس افتتاحي). ولا تُقطع كلمة حيث يلزم إلا حين يُبقي حدّ الكلمة، بعد إسقاط تلك العلامة، أقل من نصف ما يتسع: كلمة واحدة طويلة، أو عنوان URL (*http://exampl…*، لا *http…*). المسافة غير القاطعة والواصلة غير القاطعة (U+2011، كما في *MS‑DOS*) ليستا حدّ كلمة؛ أما `'ellipsis-middle'` فتقطع في أي موضع لكنها تُسقط المسافات المجاورة لها. حتى postext 1.4 كانت كل الأنماط تقطع عند آخر محرف يتسع، بما في ذلك المسافات. |
| `verticalAlign` | `'top' \| 'middle' \| 'bottom'` | `'middle'` | موضع النص داخل صندوق أطول من أسطره: `placement.size.height` ثابت، أو صندوق مدّه عنصر مجاور مثبّت. حين تكون الأسطر أطول من الصندوق (رقم كبير في صندوق ثابت الارتفاع، أو `lineHeight` ضيّق)، تفيض من الجهة التي تتركها المحاذاة حرّة، كما تفعل محاذاة CSS flex: تُبقي `'bottom'` أسفل صندوق السطر الأخير على أسفل الصندوق وتفيض من الأعلى، وتفيض `'middle'` بالتساوي من الطرفين، و`'top'` من الأسفل. حتى postext 1.4 كانت هذه الأسطر تتدلى دائمًا من الأعلى أيًّا كانت المحاذاة. يتحرك `dropCap` مع أسطره (حتى postext 1.4 كان يبقى في أعلى صندوق أنزلت `'middle'` أو `'bottom'` أسطره فيه). |
| `lineHeight` | `number \| Dimension` | `1.2` | تباعد أسطر العنصر. العدد مضاعف لـ`fontSize`. ويُقبل `Dimension` أيضًا، على النحو الذي يُكتب به كل تباعد أسطر آخر في الإعدادات: `em` / `rem` هو المضاعف نفسه، والطول المطلق (`pt`، `mm`، `px`…) هو المسافة بين خطوط الأساس: `{ value: 15.5, unit: 'pt' }` يضبط تباعدًا قدره 15.5 pt أيًّا كان الحجم. وأي قيمة أخرى (صفر، أو عدد سالب، أو بُعد مشوّه) تأخذ القيمة الافتراضية. حتى postext 1.4 كان `Dimension` هنا يجعل ارتفاع التصميم غير قابل للقياس: فلم تكن صفحة الافتتاح تحجز أي مساحة، ولا حتى `minHeight`، وكان المتن يجري تحت العنوان. |
| `letterSpacing` | `Dimension` | `0` | التتبّع (tracking): مسافة إضافية بعد كل محرف، بما في ذلك المسافات، تمامًا كما يفعل `letter-spacing` في CSS. تزداد العروض المقيسة معه، فيبقى الصندوق التلقائي العرض محكمًا. يُستبعد التتبّع الذي يلي آخر محرف في السطر من محاذاته ومن الصندوق التلقائي العرض، فيتوسّط العنوانُ المتتبَّع الموسَّط على حروفه، وينتهي العنوان المحاذى لليمين عند الحافة، ويبلغ آخر حرف في السطر المضبوط الحافة (حتى postext 1.4 كانت تقع على بعد نصف وحدة تتبّع، أو وحدة كاملة، إلى اليسار، وكان العنصر المثبّت إلى يمين عنصر متتبَّع يبتعد عنه وحدة تتبّع إضافية). القيمة السالبة تُقرّب الحروف، فعنوان العرض بحجم 36 pt يأخذ غالبًا `{ value: -0.3, unit: 'pt' }`، وتنكمش العروض بالطريقة نفسها؛ وترسمه Canvas وHTML وPDF على النحو نفسه (حتى postext 1.4 كانت القيمة السالبة تُضبط على `0` دون تحذير). |
| `textTransform` | `'none' \| 'uppercase'` | `'none'` | تحويل حالة الحروف المطبّق على النص المحسوم، بما فيه العناصر النائبة: عنوان جزء مكتوب بالحروف الكبيرة في جدول المحتويات مثلًا. |
| `box` | `ElementBoxStyle` | — | خلفية وحدّ اختياريان يُرسمان خلف النص: `backgroundColor` و`borderColor` و`borderWidth` و`borderRadius`، و`padding` لكل جانب يوسّع الصندوق أبعد من النص (انظر [عناصر الصندوق](https://postext.dev/ar/docs/configuration-page-layout.md#عناصر-الصندوق) للاطلاع على الحقول). |
| `dropCap` | `{ lines, fontFamily, fontWeight, fontSize, color, gap }` | — | الحرف الاستهلالي: الحرف الأول مكتوبًا بحجم كبير بجوار أول `lines` أسطر (الافتراضي 2)، بخطه ووزنه ولونه الخاصة به، وعلى مسافة `gap` من النص. يقف الحرف على خط أساس آخر سطر يمتد عليه، ويكون `fontSize` افتراضيًا الحجمَ الذي يجعل أعلاه في مستوى الحروف الكبيرة للسطر الأول: حجم النص مضافًا إليه `lines` − 1 من تباعدات الأسطر، مع اعتبار الحروف الكبيرة 0.72 من حجم الحرف (والخط الذي تكون حروفه الكبيرة أطول من ذلك أو أقصر كثيرًا يحتاج إلى `fontSize` خاص به). النص الذي له حرف استهلالي يلتف أيًّا كانت قيمة `overflow`؛ ومع `'clip'` تظل أسطره تُقص عند حافة الصندوق الثابت الارتفاع. يتبع `color` المرتبط بلوحة الألوان لوحاتِ ألوان الأجزاء والأقسام كبقية التصميم. وفي تصميم العنوان لا يحجز الحرف مساحة تحت النص: فالجزء من صندوق سطره الواقع تحت خط أساسه لا يدفع المتن إلى الأسفل. لذا قد يمتد الحرف الذي ينزل تحت خط أساسه (Q أو J في كثير من الخطوط) إلى المساحة الواقعة تحت التصميم: أعطِ العنوان `marginBottom` لذلك. حتى postext 1.4 كان الحجم الافتراضي يجعل الحرف بطول كل صناديق الأسطر التي يمتد عليها، فيعلو أعلاه فوق السطر الأول؛ وكانت أي قيمة لـ`overflow` غير `'wrap'` تُسقط الحرف دون تحذير؛ وكانت لوحة ألوان القسم أو الجزء تترك لونه كما هو؛ وكان الحرف الذي يبلغ عمقُه عمقَ النص المجاور له قد يدفع المتن خط شبكة إلى الأسفل. الإعدادات المحفوظة قبل ذلك تحتفظ بحجم الإصدار 1.4، مكتوبًا في `fontSize` (انظر [الحزم التي كتبها postext 1.4 أو أقدم](https://postext.dev/ar/docs/configuration-programmatic-usage.md#الحزم-التي-كتبها-postext-14-أو-ما-قبله)). أما الحرف الاستهلالي في النص الجاري فتضبطه أنماط الفقرات والعناوين (انظر [الحروف الاستهلالية](https://postext.dev/ar/docs/configuration-text.md#الحروف-الاستهلالية))، وتُقاس ارتفاعات حروفه الكبيرة من الخطوط نفسها. |
| `paragraphIndent` | `Dimension` | `0` | إزاحة السطر الأول لكل فقرة بعد الأولى. يفصل بين الفقرات سطرٌ جديد في المحتوى، أو الحرفان `\n` في النص الآتي من قيمة سمة؛ وتُعدّ الأسطر الجديدة المتتالية سطرًا واحدًا. |
| `hyphenate` | `boolean` | `false` | حين تكون `true` ويلتف النص (`overflow: 'wrap'`، أو `dropCap` الذي يلتف دائمًا)، تُقسَّم الكلمات الطويلة التي تظل تفيض بعد كسر السطر العادي عند حدود المقاطع (باستخدام لغة تقسيم الكلمات النشطة في المستند) مع واصلة مرنة عند موضع القطع. وفي النص المضبوط (`align: 'justify'`) تُقطع أيضًا الكلمة التي لا تتسع لبقية السطر عند آخر حدّ مقطع يتسع، لملء السطر. |
| `inlineMarks` | `boolean` | `false` | يقرأ النص المحسوم، بما فيه قيم العناصر النائبة، على أنه Markdown مضمّن: `**bold**` و`*italic*` و`^superscript^` و`~subscript~`. وحين يكون معطّلًا تُطبع العلامات كما كُتبت. وفي تصميم العنوان يحتفظ `{titleText}` عندئذ بمقاطع العنوان نفسه العريضة والمائلة والعلوية والسفلية (`*Pneumocystis*`، `CO~2~`)، وتُهرَّب بقية محارفه لتُطبع كما كُتبت (منذ postext 1.19). انظر [العلامات المضمّنة والخطوط المحيطية](https://postext.dev/ar/docs/configuration-page-layout.md#العلامات-المضمّنة-والخطوط-المحيطية). |
| `stroke` | `{ width, color?, hollow? }` | — | خط محيطي يُرسم حول الحروف: `width` (قيمة `Dimension` متمركزة على حواف الحروف)، و`color` (الافتراضي: لون النص؛ والحرف الاستهلالي يأخذ لونه الخاص)، و`hollow` (`true` يرسم الخط المحيطي وحده). انظر [العلامات المضمّنة والخطوط المحيطية](https://postext.dev/ar/docs/configuration-page-layout.md#العلامات-المضمّنة-والخطوط-المحيطية). |
| `writingMode` | `'horizontal-tb' \| 'vertical-rl'` | `'horizontal-tb'` | يكتب `'vertical-rl'` النص من الأعلى إلى الأسفل، والأسطر من اليمين إلى اليسار، والمحارف قائمة: ترويسة تنزل على الحافة الأمامية، أو عنوان عمودي بجوار فصل أفقي. انظر [عناصر النص العمودي](https://postext.dev/ar/docs/configuration-page-layout.md#عناصر-النص-العمودي). |
| `reserve` | `boolean` | `true` | لتصاميم العناوين فقط: هل يُحتسب العنصر ضمن الارتفاع الذي يحجزه العنوان في تدفق النص. `false` للزخرفة التي قد تقع تحت النص (ختم في أسفل الصفحة، أو إطار، أو شريط جانبي). انظر [الارتفاع المحجوز](https://postext.dev/ar/docs/configuration-text.md#الارتفاع-المحجوز). تتجاهله تصاميم رأس الصفحة والتذييل والأجزاء. |
| `marginFromBody` | `Dimension` | `6 pt` | المسافة المطلقة بين حافة العنصر المواجهة للمتن وحافة المتن. مستقلة عن العناصر الأخرى. تُرحَّل إلى `placement.offset.y`. |
| `marginFromEdge` | `Dimension` | `0 pt` | إزاحة أفقية من حافة المحتوى التي يحاذى إليها العنصر. لا تنطبق إلا حين يكون `align` بقيمة `'left'` أو `'right'`. تُرحَّل إلى `placement.offset.x`. |
| `placement` | `ElementPlacement` | مشتقة من `align` + `marginFromBody` + `marginFromEdge` | تموضع متقدم (انظر أدناه). حين يُضبط، تكون له الأولوية على الحقول المسطّحة القديمة. |

العناصر النائبة المتاحة:

- `{pageNumber}`: رقم الصفحة الحالية، بدءًا من 1.
- `{totalPages}`: العدد الإجمالي لصفحات المستند. في كتاب مُخرَج فصلًا فصلًا (Sandbox، و`buildBundle`) يكون كل فصل مستندًا، فيكون هذا عدد صفحات الفصل نفسه.
- `{bookTotalPages}`: العدد الإجمالي لصفحات الكتاب كله: كل الفصول، بما فيها الصفحات الفارغة. وفي مستند مُخرَج وحده يساوي `{totalPages}`. انظر [عدد صفحات الكتاب](https://postext.dev/ar/docs/configuration-page-layout.md#عدد-صفحات-الكتاب) أدناه.
- `{title}`، `{subtitle}`، `{author}`، `{publishDate}`: قيم تُقرأ من `content.metadata`. البيانات الوصفية المجهولة أو الفارغة تُرسم سلسلةً فارغة (وتثير تحذيرًا في Sandbox).
- `{chapterTitle}`: نص آخر H1 في الصفحة الحالية أو قبلها. يُتخطّى H1 الذي يضبط [نمط عنوانه](https://postext.dev/ar/docs/configuration-styles.md#أنماط-العناوين) `runningChapter: false` (لوحة مصوّرة، أو خريطة).
- `{chapterTitleAtTop}`، `{chapterNumberAtTop}`: عنوان الفصل الساري في أعلى الصفحة ورقمه، ويختلفان عن `{chapterTitle}` و`{chapterNumber}` في صفحة يبدأ فيها فصل جديد تحت نص آخر. انظر [الفصل في أعلى الصفحة](https://postext.dev/ar/docs/configuration-page-layout.md#الفصل-في-أعلى-الصفحة) أدناه.
- `{partTitle}`، `{partNumber}`: عنوان الجزء الحالي ورقمه (آخر صفحة `:::part` في الصفحة الحالية أو قبلها؛ والصفحات الفارغة المضافة للزوجية قبل صفحة الجزء مباشرةً تنتمي إليه). فارغان قبل الجزء الأول.
- `{firstMark.<key>}`، `{lastMark.<key>}`: الكلمة الدليلية الأولى والأخيرة في الصفحة: عنوان من مستوى ما (`h1`–`h6`) أو مدخل من نمط فقرة. انظر [الكلمات الدليلية](https://postext.dev/ar/docs/configuration-page-layout.md#الكلمات-الدليلية-العلامة-الأولى-والأخيرة) أدناه.

#### عدد صفحات الكتاب

يطبع `{bookTotalPages}` عدد صفحات الكتاب كله، وهو العدد الذي يراه القارئ في «الصفحة 12 من 348». يعدّ الصفحات المادية، بما فيها الفارغة، مثل `{totalPages}`، لكن عبر كل الفصول:

- **المستند المُخرَج وحده** (`buildDocument` بلا `continuation`) هو الكتاب كله: `{bookTotalPages}` يساوي `{totalPages}`.
- **`buildBundle`** يُخرج الكتاب، ويجمع صفحات كل الفصول، ثم يُخرجه مرة أخرى بذلك المجموع، فيطبع كل فصل العدد نفسه. لا يحرّك العدد أي فاصل صفحة أبدًا، فتكفي جولة إضافية واحدة لاستقراره؛ والإعدادات التي لا تطبع `{bookTotalPages}` لا تكلّف شيئًا.
- **Sandbox** يسلّم كل فصل المجموعَ حالما تُعرف صفحات كل الفصول. وحتى ذلك الحين يطبع الفصل عدد الصفحات حتى نهايته هو. ويعدّ تصدير الكتاب كاملًا في تبويب PDF الصفحاتِ التي يُخرجها: فإذا طبع فصلٌ عددًا آخر، لأن صفحاته لم تكن معروفة بعد، أخرج الكتاب مرة أخرى بالعدد الذي بلغته الفصول.
- **المضيف الذي يُخرج الفصول بنفسه** يمرّر المجموع في `continuation.bookPageCount` (للفصل الأول أيضًا). ومن دونه يعدّ `{bookTotalPages}` الصفحات حتى نهاية المستند (`continuation.pageIndexOffset` مضافًا إليه صفحاته)، وهذا صحيح للفصل الأخير فقط.

```ts
footer: {
  elements: [{
    kind: 'text', id: 'folio', content: '{pageNumber} / {bookTotalPages}',
    fontSize: { value: 8, unit: 'pt' },
    placement: { anchor: { to: 'container', edge: 'top' }, size: { width: 'auto', height: 'auto' } },
  }],
}
```

تخبر `configUsesPlaceholder(config, 'bookTotalPages')` المضيفَ هل يستحق العدد أن يُحسب.

#### الكلمات الدليلية: العلامة الأولى والأخيرة

يطبع القاموس في ترويسة كل صفحة أول مدخل فيها وآخر مدخل («Aback – Anchor»)؛ ويطبع الكتاب المرجعي أول قسم وآخره. يطبعهما `{firstMark.<key>}` و`{lastMark.<key>}`. ويحدّد المفتاح ما يُعلِّم الصفحة:

- **من `h1` إلى `h6`**: عنوان من ذلك المستوى. العلامة نصّه، دون رقمه.
- **معرّف نمط فقرة** (`entry`): فقرة في حاوية `:::paragraphs{style="entry"}`. العلامة هي المقطع الغامق الذي تبدأ به الفقرة، أي المدخل، دون علامة الترقيم الختامية: `**Aback.** Said of…` تُعلِّم `Aback`. والفقرة التي لا تبدأ بنص غامق لا تضع علامة.

`{firstMark.<key>}` هي أول علامة تبدأ في الصفحة، و`{lastMark.<key>}` آخرها. الصفحة التي لا تبدأ فيها أي علامة (مدخل طويل مستمر) تطبع العلامة السارية، أي آخر علامة قبلها، في الحالتين. والصفحات التي تسبق أول علامة لا تطبع شيئًا؛ وفي كتاب مُخرَج فصلًا فصلًا يعني ذلك ما قبل أول علامة في الفصل، إذ لا تنتقل العلامات من فصل إلى الذي يليه. العنوان أو الفقرة المقسومة بين صفحات تُعلِّم الصفحة التي تبدأ فيها فقط. يُكتب المفتاح بعد النقطة من حروف وأرقام و`_` و`-`، ويبدأ بحرف أو بـ`_`؛ والمفتاح المجهول لا يطبع شيئًا.

```md
:::paragraphs{style="entry"}
**Aback.** Said of the sails when pressed back against the mast.

**Abaft.** Towards the stern, or behind a given point.
:::
```

```ts
header: {
  elements: [{
    kind: 'text', id: 'guide', content: '{firstMark.entry} – {lastMark.entry}',
    fontSize: { value: 8, unit: 'pt' },
    placement: { anchor: { to: 'container', edge: 'bottom' }, size: { width: 'auto', height: 'auto' } },
  }],
}
```

الكلمات الدليلية ترويسات: تُحسم في خانات رأس الصفحة والتذييل (بما فيها `header` و`footer` لنمط العنوان) ولا تطبع شيئًا في تصاميم العناوين والأجزاء وجدول المحتويات؛ وفي تصاميم العناوين والأجزاء تشير إليها لوحة الفحوص بوصفها عناصر نائبة مجهولة. لإظهار أول مدخل في الصفحات الزوجية وآخر مدخل في الفردية، أعطِ عنصرين `parity: 'even'` و`parity: 'odd'`. وعنوان H1 الذي يضبط نمطُ عنوانه `runningChapter: false` لا يضع علامة `h1`.

#### الفصل في أعلى الصفحة

يسمّي `{chapterTitle}` و`{chapterNumber}` آخر فصل بدأ في الصفحة أو قبلها. وفي كتاب تتوالى فصوله دون فاصل صفحة بينها، تحمل الصفحة التي تُنهي فصلًا وتبدأ التالي قرب أسفلها عنوانَ الفصل الجديد فوق نص لا يزال ينتمي إلى القديم. أما `{chapterTitleAtTop}` و`{chapterNumberAtTop}` فيسمّيان الفصل الساري في أعلى الصفحة، كما تفعل الروايات ذات الفصول المتوالية وكثير من الكتب المرجعية:

- الصفحة التي أول كتلة فيها عنوان H1 لفصل تسمّي ذلك الفصل؛
- أي صفحة أخرى تسمّي الفصل الذي تستمر منه، حتى حين يبدأ فصل جديد في أسفلها؛
- الصفحة الفارغة المضافة للزوجية تتبع الصفحة التي بعدها، وفاصل أنماط `always-*` يتبع الصفحة التي قبله (انظر [ملكية الصفحات الفارغة](https://postext.dev/ar/docs/configuration-text.md#تبعية-الصفحات-الفارغة))؛ وحين تبدأ الصفحة التي تلي صفحة فارغة للزوجية بنهاية فصل، لا بعنوان H1 له، تحتفظ الصفحة الفارغة بذلك الفصل أيضًا؛
- يُتخطّى عنوان H1 الذي له `runningChapter: false`.

```ts
header: {
  elements: [{
    kind: 'text', id: 'chapter', content: '{chapterTitleAtTop}', parity: 'odd', pages: 'body',
    fontSize: { value: 8, unit: 'pt' },
    placement: { anchor: { to: 'container', edge: 'bottom-right' }, size: { width: 'auto', height: 'auto' } },
  }],
}
```

وكالكلمات الدليلية، كلاهما ترويسة: يُحسمان في خانات رأس الصفحة والتذييل ولا يطبعان شيئًا في تصاميم العناوين والأجزاء وجدول المحتويات. أما `{attr.<key>}` فيقرأ دائمًا آخر فصل بدأ.

#### المحاذاة المستنتجة من الحافة

حين يشير `placement.anchor.to` لعنصر نص إلى عنصر آخر عبر `#id`، تستتبع حافة المرساة محاذاةً افتراضية للنص في الأسطر الملفوفة:

- `right-of` و`align-left` تستتبعان محاذاة النص `align: 'left'`: تتدفق الأسطر الملفوفة نحو اليمين بدءًا من المرساة.
- `left-of` و`align-right` تستتبعان `align: 'right'`: تلتصق الأسطر الملفوفة بالجانب الأقرب إلى العنصر المستهدف.

يطبّق محرّر العناوين في Sandbox هذه المحاذاة المستنتجة تلقائيًا حين تغيّر حافة المرساة أو هدفها. وهي تُبقي النص الملفوف على أسطر عدة مثبّتًا بصريًا إلى العنصر الذي يتصل به (فمثلًا يصطفّ حرف «P» من كلمة «Postext» الملفوفة عموديًا تحت حرف «I» من «Introduction»).

#### العلامات المضمّنة والخطوط المحيطية

يكتب عنصر النص نصّه بخط واحد افتراضيًا: تُطبع `**` و`^` وسائر علامات Markdown كما كُتبت. ومع `inlineMarks: true` يُقرأ النص المحسوم على أنه Markdown مضمّن، بالعلامات نفسها التي يقبلها نص المتن (انظر **صيغة المستند › التنسيق المضمّن**):

- يضبط `**bold**` الوزن 700 (أو `fontWeight` الخاص بالعنصر إذا كان أثقل)؛ ويعكس `*italic*` ميل العنصر، فيخرج التوكيد داخل عنصر مائل قائمًا؛ ويفعل `***both***` الأمرين. وتعمل صيغ الشرطة السفلية (`__bold__`، `_italic_`) أيضًا.
- يُكتب `^superscript^` و`~subscript~` بنسبة 58% من الحجم، مع رفع النص العلوي بمقدار ثلثه وخفض النص السفلي بمقدار 0.15 منه؛ والنص السفلي والعلوي المتلاصقان (`T~0~^2^`) يُرصّان أحدهما فوق الآخر، كما في المتن.
- تكتب الشرطة المائلة العكسية محرف العلامة نفسه (`\*`، `\_`، `\^`، `\~`). يحتفظ الرابط بنصه؛ وتُحذف علامات الشيفرة (backticks).

تُقرأ العلامات بعد ملء العناصر النائبة، فيمكن أن تحملها القيمة نفسها: سطر المؤلفين في سمة عنوان يحصل على أرقام الانتساب بوصفها نصوصًا علوية. يعمل اللف والضبط وأنماط الحذف و`dropCap` و`paragraphIndent` كلها على النص المعلَّم؛ ويحتفظ كل مقطع بلون العنصر.

```json
{ "kind": "text", "id": "authors", "content": "{attr.authors}", "inlineMarks": true, "overflow": "wrap",
  "fontSize": { "value": 11, "unit": "pt" },
  "placement": { "anchor": { "to": "#title", "edge": "below" }, "offset": { "y": { "value": 6, "unit": "pt" } } } }
```

```md
# Snow cover and river flow {authors="Ana Ruiz^1^, Luis Gil^2^ and Marta Sanz^1,3^"}
```

يرسم `stroke` خطًا محيطيًا حول الحروف: `width` هو عرض الخط، متمركزًا على حواف الحروف (نصفه داخل الحروف ونصفه خارجها؛ ولا يتغير عرض النص المقيس)، و`color` قيمته الافتراضية لون النص، و`hollow: true` يترك الحروف بلا تعبئة فلا يظهر إلا الخط المحيطي: رقم عرض مفرّغ، أو عنوان يبرز فوق صورة فوتوغرافية. يُرسم الخط المحيطي فوق التعبئة، بالطريقة نفسها في Canvas، وفي HTML (`-webkit-text-stroke`)، وفي PDF (نمط رسم النص 2، أو 1 عند التفريغ).

```json
{ "kind": "text", "id": "year", "content": "1863", "fontFamily": "Bitter", "fontSize": { "value": 120, "unit": "pt" }, "fontWeight": 700,
  "color": { "hex": "#1d3557", "model": "hex" },
  "stroke": { "width": { "value": 1.5, "unit": "pt" }, "hollow": true },
  "placement": { "anchor": { "to": "page", "edge": "bottom-right" }, "offset": { "x": { "value": -15, "unit": "mm" }, "y": { "value": -20, "unit": "mm" } } } }
```

في PDF، تُضمِّن مقاطعُ الغامق والمائل الخطوطَ المطابقة من عائلة خط العنصر، فيجب أن يوفّرها مزوّد الخطوط.

#### القيم الافتراضية للنص ومزالق التثبيت

يبدأ عنصر النص الذي تكتبه بنفسك من هذه القيم، وبعضها مفاجئ:

- **`overflow` يتبع الموضع.** في تصميم العنوان وصفحة الجزء يلتف العنوان الطويل على أسطر أكثر؛ وفي ترويسة الصفحة والترقيم وسطر الجزء في الفهرس يُقتطع النص الأعرض من مساحته إلى سطر واحد بـ`…`. اضبط `overflow: 'wrap'` على ترويسة قد تطول (عنوان بريدي، سطر مؤلف)، وراجع تنبيهات `designTextTruncated` للنصوص المقتطعة. فاصل الأسطر في المحتوى (سطر جديد، أو `\n` في القالب أو في قيمة سمة) يبدأ سطرًا جديدًا في كل الأنماط؛ وتقتطع أنماط الحذف كل سطر على حدة.
- **`align` قيمته `'center'` و`verticalAlign` قيمته `'middle'`.** العنصر التلقائي العرض يأخذ عرض أطول أسطره، فتتوسط أسطره بعضها بالنسبة إلى بعض؛ اضبط `align: 'left'` لكتلة بمحاذاة اليسار (العنصر التلقائي العرض المثبّت إلى عنصر آخر يحاذي أسطره من جهة مرساته من تلقاء نفسه، انظر أعلاه).
- **الخط EB Garamond بحجم 8 pt، أسود، و`lineHeight` قيمته 1.2**، أيًّا كان ما يستخدمه نص المتن. وخلافًا لتباعدات الأسطر الأخرى في الإعدادات، يكون `lineHeight` لنص التصميم عادةً مضاعفًا بسيطًا (`1.2`)؛ ويعمل `Dimension` أيضًا (انظر أعلاه).

العنصر الذي ليس له `placement.size.width` (أو قيمته `'auto'`) يحدّد حجمه وفق نصه، لكن فقط ضمن المساحة الواقعة بين نقطة مرساته وحافة الحاوية التي ينمو نحوها، وهي في مرساة `top` أو `bottom` ضعف المسافة إلى الحافة الأقرب. ويُحتسب `offset` الخاص به. الإزاحة بعيدًا عن تلك الحافة لا تكلّف شيئًا: ترويسة مثبّتة عند `top-left` مع `x` سالبة (متدلّية في الهامش الأيسر) لا تخسر أي مساحة، لأنها تنمو نحو اليمين. أما الإزاحة نحو تلك الحافة فتقلّص المساحة بالمقدار نفسه (وبضعفه في مرساة `top` أو `bottom`)، والإزاحة التي تدفع المرساة إلى ما بعد الحافة لا تُبقي شيئًا: مرساة `top-right` تقل قيمة `x` فيها عن سالب عرض الحاوية، أو مرساة `top` أُزيحت جانبيًا بأكثر من نصف ذلك العرض. وحين لا تبقى مساحة، لا يطبع نمط الحذف شيئًا ويرصّ `'wrap'` محرفًا واحدًا في كل سطر. ثلاثة مخارج:

- أعطِ العنصر `size.width` ثابتًا، فالعروض الثابتة لا تُقيَّد أبدًا؛
- ثبّته إلى `'page'` أو `'bleed'`، فتصير الصفحة (أو النزف) إطار مساحته؛
- ثبّته إلى الحافة المقابلة من الحاوية.

تمتد حاوية رأس الصفحة من حدّ القص العلوي نزولًا إلى المتن، وحاوية التذييل من المتن نزولًا إلى حدّ القص السفلي: في رأس الصفحة تُقاس مراسي `top-*` من حدّ القص ومراسي `bottom-*` من المتن، والعكس في التذييل (انظر **إطار الحاوية** أعلاه). لا يحرّك رأس الصفحة أو التذييل نص المتن أبدًا، ويُرسم فوقه، فالعنصر المدفوع إلى منطقة المتن يغطي النص. أما شريط صفحة الافتتاح فيُرسم على العكس تحت نص المتن؛ والمساحة التي يأخذها في التدفق موصوفة تحت [الارتفاع المحجوز](https://postext.dev/ar/docs/configuration-text.md#الارتفاع-المحجوز).

### عناصر النص العمودي

عنصر النص الذي له `writingMode: 'vertical-rl'` يُكتب عموديًا في خانة نصها أفقي: ترويسات أي كتاب وأرقام صفحاته، وهي تبقى على الورقة، وكل تصميم في صفحة أفقية. ويُخرَج نصًّا أفقيًا في إطاره الخاص المُدار ربع دورة باتجاه عقارب الساعة، ثم يُعاد تدويره إلى الصفحة:

- يبقى صندوقه حيث يضعه التموضع. ارتفاعه هو طول السطر: يضبطه `size.height` (أو `'auto'`، أي طول النص؛ أو `'fill'`، أي حتى حافة الحاوية)، ويضبط `size.width` عدد الأسطر التي تتسع عرضًا، ويحدّ `size.maxWidth` طول السطر.
- يضع `align` الأسطر على امتداد الصندوق (`'left'` في الأعلى)، و`verticalAlign` عبره (`'top'` في اليمين، حيث يقف السطر الأول)، وتبقى حشوة الصندوق في الجانب الذي كُتبت له.
- تُقاس المحارف وتُرسم كما في صفحة عمودية: محارف Han قائمة بعرض em واحد لكل منها، وعلامات الترقيم بصيغتها العمودية، والكلمات اللاتينية مُدارة جانبيًا، والأعداد القصيرة في خلية واحدة (`cjk.uprightDigits`). وتضعه Canvas وPDF وHTML في المستطيل نفسه.
- مع `inlineMarks: true` تميّز علامات الاتجاه مقطعًا كما في المتن: `第:tcy[3.0]回` يضع 3.0 في خلية واحدة، و`:upright[GDP]` يُقيم الحروف واحدًا تحت الآخر، و`:sideways[…]` يُدير مقطعًا؛ ولا ينكسر السطر داخل أيٍّ منها أبدًا. والعنصر الأفقي يتجاهلها.
- لا يُضبط حرف استهلالي في عنصر عمودي.
- في تدفق صفحة عمودية (صفحة افتتاح، أو صفحة جزء، أو عنوان إطار) يجري النص نزولًا أصلًا، ولا يغيّر `writingMode` شيئًا هناك.

تضع الكتب الصينية العمودية ترويساتها وأرقام صفحاتها في واحد من ثلاثة مواضع ([clreq §7.2](https://www.w3.org/TR/clreq/#x7-2-page-headers-footers-etc)؛ و[JLREQ §2.6](https://www.w3.org/TR/jlreq/#running_heads_and_page_numbers) لليابانية):

| العُرف | الموضع | طريقة ضبطه |
| --- | --- | --- |
| رأس وتذييل أفقيان | فوق منطقة النص وتحتها، كما في الكتب الأفقية؛ وهو الأكثر شيوعًا. | رأس الصفحة والتذييل كما هما. |
| الحافة الأمامية (أسلوب 中缝، وفي تايوان 邊峰) | نزولًا على الهامش الخارجي: عنوان الفصل أو الكتاب بدءًا من نحو أربعة محارف تحت رأس منطقة النص، ورقم الصفحة منتهيًا نحو خمسة محارف فوق أسفلها، بالأرقام الصينية، وبنحو 80 % من حجم المتن. | عنصران عموديان مثبّتان إلى `'outer'`، كما أدناه. |
| الزاوية الخارجية السفلى | رقم الصفحة في أسفل الصفحة، في الزاوية الخارجية (قواعد تايوان لكتب 中式). | عنصر أفقي في التذييل عند `'bottom-left'` مع `parity: 'odd'` وآخر عند `'bottom-right'` مع `parity: 'even'` في كتاب مجلّد من اليمين (والعكس في كتاب مجلّد من اليسار). |

ترويسات الحافة الأمامية كما يضيفها Sandbox (**الترويسة › ترويسات الحافة الخارجية (عمودية)**)، هنا لمتن بحجم 10 pt (يضبطها Sandbox بنسبة 80 % من حجم المتن):

```json
{
  "page": { "pageNumbering": { "format": "trad-chinese-informal" } },
  "header": { "elements": [
    { "kind": "text", "id": "head", "content": "{chapterTitle}", "writingMode": "vertical-rl",
      "fontSize": { "value": 8, "unit": "pt" }, "overflow": "clip", "align": "left",
      "placement": { "anchor": { "to": "outer", "edge": "top" }, "offset": { "y": { "value": 4, "unit": "em" } } } },
    { "kind": "text", "id": "folio", "content": "{pageNumber}", "writingMode": "vertical-rl",
      "fontSize": { "value": 8, "unit": "pt" }, "overflow": "clip", "align": "left",
      "placement": { "anchor": { "to": "outer", "edge": "bottom" }, "offset": { "y": { "value": -5, "unit": "em" } } } }
  ] }
}
```

`anchor.to: 'outer'` (انظر [تموضع العناصر](https://postext.dev/ar/docs/configuration-page-layout.md#تموضع-العناصر)) هو الهامش الخارجي لكل صفحة، فيجري العنصران نزولًا على الحافة اليسرى للصفحة الفردية والحافة اليمنى للصفحة الزوجية في كتاب مجلّد من اليمين (`page.binding`). ويُطبع `{pageNumber}` بصيغة ترقيم الصفحات: `trad-chinese-informal` يعطي 一百零三 في الصفحة 103، و`cjk-decimal` يعطي 一〇三. وتظل قواعد كل خانة سارية: `pages: 'body'` يُبعد الترويسة عن صفحات افتتاح الفصول. والزخرفة القصيرة بين الترويسة ورقم الصفحة (ذيل سمكة ︻، أو خط فاصل) عنصر عادي مثبّت إلى الإطار نفسه.

في VDT تحمل الكتلة العمودية `vertical` (`VDTDesignTextBlock.vertical`: المنطقة، والأرقام القائمة، والمحور المركزي لكل عائلة خط)؛ وأسطرها في إطار الكتلة المُدار الخاص بها، `xOffset` نزولًا من أعلى الصندوق، و`baselineY` نحو اليسار من حافته اليمنى. ويحمل مقطع السطر المعلَّم `tcy` أو `orientation`، كما يحملهما مقطع في المتن.

### عناصر الخط الفاصل

ترسم عناصر الخط الفاصل خطًا: أفقيًا عبر الخانة، أو عموديًا نزولًا فيها.

| الخاصية | النوع | القيمة الافتراضية | الوصف |
| --- | --- | --- | --- |
| `kind` | `'rule'` | — | المميِّز. |
| `id` | `string` | — | معرّف ثابت، فريد داخل الخانة، للإشارات `anchor.to: '#id'`. |
| `direction` | `'horizontal' \| 'vertical'` | `'horizontal'` | يمتد الخط الأفقي على طول `placement.size.width` (`'fill'` = حتى حافة الحاوية) ويكون ارتفاعه `thickness`. ويمتد الخط العمودي نزولًا على طول `placement.size.height` (`'fill'` أو بلا قيمة = حتى حافة الحاوية) ويكون عرضه `thickness`: فاصل بين ترويسة ورقم صفحة مثلًا. |
| `color` | `ColorValue` | `#000000` | لون الخط. |
| `thickness` | `Dimension` | `0.5 pt` | سماكة الخط. الخط الفاصل الذي يُغفلها يُرسم بالقيمة الافتراضية (حتى postext 1.4 لم يكن يرسم شيئًا). |
| `width` | `Dimension \| 'full'` | `'full'` | `'full'` يمتد على مساحة المحتوى؛ وقيمة Dimension تقيّد الخط بطول ثابت يحدّد `align` موضعه. |
| `align` | `'left' \| 'center' \| 'right'` | `'center'` | المحاذاة حين لا يكون `width` بقيمة `'full'`. |
| `marginFromBody` | `Dimension` | `6 pt` | المسافة المطلقة بين حافة الخط المواجهة للمتن وحافة المتن. مستقلة عن العناصر الأخرى. |
| `marginFromEdge` | `Dimension` | `0 pt` | إزاحة أفقية من حافة المحتوى التي يحاذى إليها الخط. لا تنطبق إلا حين يكون `width` قيمة `Dimension` ثابتة و`align` بقيمة `'left'` أو `'right'`. |
| `parity` | `'all' \| 'odd' \| 'even'` | `'all'` | الصفحات التي يظهر فيها الخط. |
| `pages` | `'all' \| 'body' \| 'opener' \| 'part' \| 'blank'` | `'all'` | أدوار الصفحات التي يظهر فيها الخط (انظر الحقل `pages` لعنصر النص). |
| `reserve` | `boolean` | `true` | لتصاميم العناوين فقط: هل يُحتسب الخط ضمن الارتفاع الذي يحجزه العنوان في تدفق النص (انظر [الارتفاع المحجوز](https://postext.dev/ar/docs/configuration-text.md#الارتفاع-المحجوز)). |
| `placement` | `ElementPlacement` | مشتقة من `align` + `marginFromBody` + `marginFromEdge` | تموضع متقدم (انظر [تموضع العناصر](https://postext.dev/ar/docs/configuration-page-layout.md#تموضع-العناصر)). يضبط `size.width` / `size.height` طول الخط؛ و`width: 'fill'` هو `'full'` القديم. |

### عناصر الصندوق

ترسم عناصر الصندوق مستطيلًا مستدير الزوايا داخل الخانة، وهو مفيد خلفيةً للنص في صفحات افتتاح الفصول أو الأشرطة الجانبية أو التذييلات. تُموضَع عناصر الصندوق حصرًا عبر الحقل `placement`؛ وليس لها اختصار مسطّح قديم. وتقع التعبئة والحدّ ونصف قطر الزوايا في الكائن المتداخل `style` (`ElementBoxStyle`)، كما في مثال JSON تحت «تموضع العناصر».

| الخاصية | النوع | القيمة الافتراضية | الوصف |
| --- | --- | --- | --- |
| `kind` | `'box'` | — | المميِّز. |
| `id` | `string` | — | معرّف ثابت، فريد داخل الخانة. تُثبَّت إليه العناصر الشقيقة بـ`anchor.to: '#id'`. يعيّن Sandbox معرّفًا عند الإنشاء. |
| `style.backgroundColor` | `ColorValue` | `transparent` | لون التعبئة. اضبطه على `transparent` لصندوق بحدّ فقط. |
| `style.borderColor` | `ColorValue` | `transparent` | لون الحدّ. |
| `style.borderWidth` | `Dimension` | `0 pt` | عرض الحدّ. يُرسم الحدّ داخل المستطيل المحيط بالصندوق فتبقى الأبعاد الخارجية ثابتة: تجري الحافة الخارجية للحدّ على حافة الصندوق، ويحتفظ الصندوق المستدير بنصف قطره الخارجي. والحدّ الذي يساوي عرض الصندوق يملؤه. ترسمه Canvas وHTML وPDF على النحو نفسه (حتى postext 1.4 كانت Canvas وPDF تُمركزان الحدّ على الحافة، فيقع نصفه خارج الصندوق). |
| `style.borderRadius` | `Dimension` | `0 pt` | نصف قطر الزاوية. يُقيَّد عند الرسم بنصف الضلع الأقصر. |
| `placement` | `ElementPlacement` | — | إلزامي. انظر «تموضع العناصر» أدناه. |
| `parity` | `'all' \| 'odd' \| 'even'` | `'all'` | الصفحات التي يظهر فيها الصندوق. |
| `pages` | `'all' \| 'body' \| 'opener' \| 'part' \| 'blank'` | `'all'` | أدوار الصفحات التي يظهر فيها الصندوق (انظر الحقل `pages` لعنصر النص). |
| `reserve` | `boolean` | `true` | لتصاميم العناوين فقط: هل يُحتسب الصندوق ضمن الارتفاع الذي يحجزه العنوان في تدفق النص (انظر [الارتفاع المحجوز](https://postext.dev/ar/docs/configuration-text.md#الارتفاع-المحجوز)). |

### عناصر الصورة

يرسم عنصر `image` موردًا نقطيًا (bitmap) أو SVG من المستند: شعار ناشر في صفحة العنوان، أو علامة في ترويسة. يتحدد حجمه بـ`placement.size`: إذا تُرك أحد البعدين `width` / `height` بقيمة `'auto'` (الافتراضية) تبع البعد الآخر نسبة أبعاد الصورة؛ وإذا ضُبط الاثنان، تُلاءم الصورة داخل الصندوق وتُوسَّط. والمورد الغائب أو الذي ليس صورة لا يرسم شيئًا.

```ts
{
  kind: 'image', id: 'logo', resourceId: 'logo-publisher',
  placement: { anchor: { to: 'page', edge: 'top-left' }, offset: { x: { value: 64, unit: 'mm' }, y: { value: 233, unit: 'mm' } }, size: { width: { value: 83, unit: 'mm' }, height: 'auto' } },
}
```

يقبل `resourceId` العناصر النائبة التي يقبلها `content` لعنصر النص، فيرسم تصميم واحد صورة مختلفة لكل عنوان. مع `resourceId: '{attr.vignette}'` في نمط عنوان، يرسم `# Chapter I {style="opener" vignette="log"}` المورد `log` ويرسم `# Chapter II {style="opener" vignette="wig"}` المورد `wig`: فتتشارك الفصول النمط بدلًا من نسخة منه لكل صورة. يقرأ رأس الصفحة أو التذييل سمات فصل الصفحة، كما يفعل `{attr.<key>}` في الترويسة، وتعمل العناصر النائبة الأخرى أيضًا (`'map-{chapterNumber}'`). والمعرّف الذي يخرج فارغًا، كما في عنوان بلا السمة، لا يرسم شيئًا. متاح منذ postext 1.8.

| الخاصية | النوع | القيمة الافتراضية | الوصف |
| --- | --- | --- | --- |
| `id` | `string` | — | معرّف ثابت؛ يمكن أن تُثبَّت إليه العناصر الأخرى بـ`#id`. |
| `resourceId` | `string` | — | معرّف `Resource` نقطي أو SVG في المستند. قد يحوي عناصر نائبة، منها `{attr.<key>}`، تُملأ لكل عنوان أو جزء أو صفحة. |
| `decorative` | `boolean` | `false` | الصورة زخرفية فقط (حلية، أو شريط): لا تعطي المخرجاتِ نصًا بديلًا حتى حين يكون لموردها نص بديل (انظر أدناه). |
| `placement` | `ElementPlacement` | — | المرساة والإزاحة والحجم (انظر [تموضع العناصر](https://postext.dev/ar/docs/configuration-page-layout.md#تموضع-العناصر)). الجانب الذي قيمته `'fill'` يمتد حتى حافة الحاوية. |
| `parity`, `pages` | كما سبق | `'all'` | الصفحات التي تظهر فيها الصورة. |
| `reserve` | `boolean` | `true` | لتصاميم العناوين فقط: هل تُحتسب الصورة ضمن الارتفاع الذي يحجزه العنوان في تدفق النص (انظر [الارتفاع المحجوز](https://postext.dev/ar/docs/configuration-text.md#الارتفاع-المحجوز)). |

يُضمّن مُخرِج PDF المورد كما يُضمّن الشكل (ويستخدم SVG الذي له نسخة طباعة رئيسية تلك النسخة)؛ ويحسمه عارض HTML عبر `resourceImageUrl`.

الصورة التي يرسمها تصميم تُعدّ محتوى حين يصفها موردها: يدخل `altText` المورد، وإلا فتعليقه نصًّا عاديًا (الشارة تُقرأ بتسميتها، و`:ref` بنصه `text` إن كان له)، إلى VDT (`VDTDesignImageBlock.altText`)، ويصير `alt` لعنصر `<img>` الخاص بها في HTML، و`Figure` مع `/Alt` في PDF موسوم، ويُقرأ مباشرةً بعد نص تصميمها (لوحة الفصل بعد عنوان الفصل). أما الصورة التي ليس لموردها أيٌّ منهما، والصورة المعلَّمة `decorative`، فزخرفة: `alt=""` مع `role="presentation"`، وعنصر زخرفي (artifact) في PDF. وصورة الترويسة أو التذييل تتكرر في كل صفحة، فهي من أثاث الصفحة أيًّا كان ما يقوله موردها: لا `altText` في VDT، و`alt=""` مع `role="presentation"` في HTML، وعنصر زخرفي للصفحة في PDF.

### تموضع العناصر

`ElementPlacement` هو نموذج التموضع الموحّد الذي يستخدمه كل نوع من العناصر (نص، وخط فاصل، وصندوق) داخل أي خانة تصميم: رأس الصفحة، أو تذييلها، أو خانة التصميم المتقدم لمستوى عنوان. وتصف التموضعَ ثلاثُ قطع من الحالة:

```ts
interface ElementPlacement {
  /** What this element anchors to and which edge of that target. */
  anchor: {
    to: 'container' | 'page' | 'bleed' | 'outer' | `#${string}`; // container = the slot; page = trim box; bleed = trim box + bleed; outer = the outer margin (header, footer); #id = another element
    edge: AnchorEdge;
  };
  /** Distance from the anchor point. */
  offset?: { x?: Dimension; y?: Dimension };
  /** Optional fixed width / height. Width also accepts 'fill' (span the slot).
   *  `maxWidth` caps an 'auto' width (text): the element still shrink-wraps its
   *  content, so elements anchored to it stay attached, but a long text wraps or
   *  ellipsizes there — a running head can reserve room for the label hanging
   *  off it instead of squeezing that label out. */
  size?: { width?: Dimension | 'fill' | 'auto'; height?: Dimension | 'fill' | 'auto'; maxWidth?: Dimension };
}
```

يقبل `AnchorEdge`:

- **حواف الحاوية** (حين يكون `anchor.to` بقيمة `'container'` أو `'page'` أو `'bleed'`): `top`، `top-left`، `top-right`، `bottom`، `bottom-left`، `bottom-right`، `left`، `right`.
- **الحواف النسبية إلى عنصر** (حين يكون `anchor.to === '#someId'`): `right-of`، `left-of`، `below`، `above`، `align-top`، `align-bottom`، `align-left`، `align-right`.

تضع كل حافة نسبية زاويةً من زوايا العنصر على زاوية من زوايا العنصر الذي يُثبَّت إليه، ثم يحرّكه `offset` من هناك:

- `right-of`: زاويته العليا اليسرى على الزاوية العليا اليمنى للهدف (بجواره، وأعلاهما في مستوى واحد)؛ `left-of`: زاويته العليا اليمنى على الزاوية العليا اليسرى للهدف؛
- `below`: زاويته العليا اليسرى على الزاوية السفلى اليسرى للهدف (تحته، وحافتاهما اليسريان في مستوى واحد)؛ `above`: زاويته السفلى اليسرى على الزاوية العليا اليسرى للهدف؛
- `align-top` و`align-left`: زاويته العليا اليسرى على الزاوية العليا اليسرى للهدف. يعطي الاسمان التموضع نفسه: تصطف الحافتان العليا واليسرى كلتاهما؛
- `align-bottom`: زاويته السفلى اليسرى على الزاوية السفلى اليسرى للهدف؛
- `align-right`: زاويته العليا اليمنى على الزاوية العليا اليمنى للهدف.

الحافة النسبية إلى عنصر المستخدمة مع `'container'` أو `'page'` أو `'bleed'`، وحافة الحاوية المستخدمة مع `'#id'`، تُقرآن على أنهما الزاوية العليا اليسرى.

يثبّت `anchor.to: 'page'` العنصر إلى **صندوق القص** (الصفحة المادية بعد القص)، ويثبّته `'bleed'` إلى صندوق القص موسّعًا بمقدار `cutLines.bleed` من كل جانب (وهو مطابق لصندوق القص ما دامت خطوط القص معطّلة). ويصير الإطاران أيضًا المرجع لـ`size: 'fill'` وللتقييد التلقائي للعرض، فيمكن أن يمتد شريط ملوّن من حافة إلى حافة بصرف النظر عن هوامش الصفحة:

```json
{ "kind": "box", "id": "band", "placement": { "anchor": { "to": "bleed", "edge": "top-left" }, "size": { "width": "fill", "height": { "value": 6, "unit": "cm" } } }, "style": { "backgroundColor": { "hex": "#1d3557", "model": "hex" } } }
```

مع تفعيل خطوط القص، يُقص كل ما يرسمه عنصر خارج صندوق النزف (انظر [خطوط القص](https://postext.dev/ar/docs/configuration-page-layout.md#خطوط-القص)).

يثبّت `anchor.to: 'outer'` (في خانتي رأس الصفحة والتذييل) العنصر إلى **الهامش الخارجي** للصفحة: من حافة منطقة النص إلى حدّ القص في الجهة البعيدة عن الكعب، ومن رأس منطقة النص إلى أسفلها. ويقع على يمين الصفحة الفردية ويسار الزوجية في كتاب مجلّد من اليسار، والعكس في كتاب مجلّد من اليمين (`page.binding`)، فيخدم عنصر واحد الصفحتين المتقابلتين كلتيهما: ترويسة تنزل على الحافة الأمامية (انظر [عناصر النص العمودي](https://postext.dev/ar/docs/configuration-page-layout.md#عناصر-النص-العمودي)). وفي أي خانة أخرى يُقرأ على أنه `'container'`. ويمكن أن يُكتب `offset` لعنصر نص بوحدة `em`، أي بوحدات em من `fontSize` الخاص به: أربعة محارف تحت رأس منطقة النص هي `{ "y": { "value": 4, "unit": "em" } }`.

داخل خانة التصميم المتقدم لعنوان، لا تزيد العناصر المثبّتة إلى الصفحة أو النزف الارتفاعَ المحجوز للعنوان إلا إذا امتدت تحت الحافة العليا للعنوان (الشريط الممتد عبر أعلى الصفحة يقع خلف صفحة الافتتاح؛ والشريط الذي يبلغ ما تحت العنوان يدفع نص المتن إلى الأسفل). استخدم `advancedDesign.minHeight` لحجز ارتفاع ثابت لصفحة الافتتاح في كل الأحوال، و`reserve: false` في العنصر الذي لا ينبغي أن يدفع النص أبدًا. القواعد الكاملة تحت [الارتفاع المحجوز](https://postext.dev/ar/docs/configuration-text.md#الارتفاع-المحجوز).

لكل عنصر `id` ثابت (يعيّنه Sandbox تلقائيًا؛ ويمكنك أيضًا ضبطه يدويًا). وتشكّل العناصر المثبّتة إلى عناصر أخرى رسمًا بيانيًا صغيرًا للاعتماديات يحسمه المحرّك قبل القياس، فيمكن أن يتسلسل عنصر من آخر دون إحداثيات يدوية.

يُحلَّل الشكل القديم `align` + `marginFromBody` + `marginFromEdge` عند الإدخال ويُعاد كتابته تموضعًا وقت حسم الإعدادات، فتظل الإعدادات القائمة تعمل دون تغيير.
