# الإعدادات: الصفحات المركّبة

> قوالب الصفحات المركّبة: الخانات والمجموعات والزخرفة والوراثة ومتغيّرات الصفحة الفردية والزوجية، وأنماط تسميات المراسي في الصور، والتحذيرات التي قد يصدرها القالب

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

## باختصار

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

## قوالب الصفحات

الصفحة المركّبة صفحة تأتي هيئتها من **قالب** في الإعدادات، ويأتي محتواها من نص Markdown داخل السياج `::::page{template="…"}`. يسمّي القالب مستطيلات تُدعى **الخانات**، ويرسل Markdown كل قطعة من المحتوى إلى خانة باسمها (اسم موضعها، أي slot). فلا تظهر الأبعاد والمواضع في Markdown أبدًا، ولا يظهر نص المحتوى في القالب أبدًا. وتحمل الخاصية `pageTemplates` قوالب الكتاب:

```ts
const config: PostextConfig = {
  calloutStyles: [{ id: 'caja-azul' }, { id: 'tab-titulo' }],
  pageTemplates: [
    {
      id: 'tema-cajas',
      decoration: {
        elements: [
          { kind: 'image', id: 'fondo', resourceId: '{attr.fondo}', decorative: true,
            placement: { anchor: { to: 'bleed', edge: 'top-left' }, size: { width: 'fill', height: 'fill' } } },
        ],
      },
      frames: [
        { name: 'titulo', takes: 'h1', style: 'tab-titulo' },
        { name: 'texto', flow: true },
        { name: 'dinero', style: 'caja-azul', padding: { right: { value: 62, unit: 'mm' } } },
        { name: 'dinero-fotos', layer: 2, width: { value: 60, unit: 'mm' },
          placement: { anchor: { to: '#dinero', edge: 'top-right' } } },
      ],
      groups: [
        { name: 'pagina', kind: 'stack', gap: { value: 6, unit: 'mm' }, frames: ['titulo', 'texto', 'dinero'] },
      ],
    },
  ],
};
```

القالب الذي لا يحدّد إلا `id` وخانة واحدة صفحةٌ كاملة تملأ فيها تلك الخانة منطقة النص. وكل حقل آخر اختياري:

| الخاصية | النوع | القيمة الافتراضية | الوصف |
| --- | --- | --- | --- |
| `id` | `string` | إلزامي | الاسم الذي يطلبه سياج الصفحة (`template="tema-cajas"`). وهو فريد بين القوالب: يُتجاهل القالب الثاني الذي يحمل المعرّف نفسه. |
| `name` | `string` | المعرّف | الاسم المعروض في Sandbox. ولا يقرؤه الإخراج أبدًا. |
| `extends` | `string` | لا شيء | معرّف القالب الذي يبدأ منه هذا القالب. انظر [الوراثة والمتغيّرات](https://postext.dev/ar/docs/configuration-composed-pages.md#الوراثة-والمتغيّرات). |
| `area` | `'content' \| 'trim' \| 'bleed'` | `'content'` | المستطيل الذي تُقاس منه مواضع الخانات. `'content'` منطقة النص في الصفحة، وتنعكس بين الصفحة اليسرى واليمنى كما ينعكس النص الجاري؛ و`'trim'` الصفحة بعد القص؛ و`'bleed'` الصفحة مع النزف. |
| `grid` | `{ columns, rows, columnGap?, rowGap? }` | لا شيء | يقسم المنطقة إلى خلايا، فتوضع الخانة أو المجموعة بالخلية (`grid: { col: 2, row: 1, cols: 2 }`، والعدّ من 1) بدلًا من `placement`. والفواصل افتراضيًا `0`. |
| `frames` | `FrameConfig[]` | `[]` | الخانات بترتيب القالب: وهو الترتيب الذي تُقاس به أولًا، والذي يحسم التعادل. انظر [الخانات](https://postext.dev/ar/docs/configuration-composed-pages.md#الخانات). |
| `groups` | `FrameGroupConfig[]` | `[]` | أعمدة وصفوف من الخانات تتقاسم المساحة. انظر [المجموعات](https://postext.dev/ar/docs/configuration-composed-pages.md#المجموعات). |
| `decoration` | `DesignSlot` | لا شيء | صور وخطوط فاصلة وصناديق تُرسم مع الصفحة، بلغة العناصر نفسها المستعملة في [رؤوس الصفحات وتذييلاتها](https://postext.dev/ar/docs/configuration-headers-footers.md#رؤوس-الصفحات-وتذييلاتها). ولا تحمل عناصر النص إلا عناصر نائبة (`{pageNumber}` و`{chapterTitle}` و`{attr.x}` لسمة من سمات سياج الصفحة). ويمكن أن يُثبَّت العنصر إلى خانة أو مجموعة (`'#dinero'`) فيتحرك معها. وتوضع الزخرفة بعد الخانات ولا تدفع النص أبدًا. |
| `header` و`footer` | `DesignSlot \| false` | موروثة | ترويسة الصفحة ورقمها. إن لم تُحدَّدا احتفظت الصفحة بترويسة فصلها ورقمه؛ و`false` تخفيهما. |
| `spread` | `boolean` | `false` | يصف القالب صفحتين متقابلتين تُصفّان ورقةً واحدة. وتبدأ الصفحة المزدوجة دائمًا في صفحة يسرى في الكتاب المكتوب من اليسار إلى اليمين (وفي صفحة يمنى في الكتاب المكتوب من اليمين إلى اليسار)، وتُضاف قبلها صفحة بيضاء عند الحاجة. |
| `gutter` | `Dimension` | `0` | في الصفحة المزدوجة، الشريط المجاور للكعب الذي تبتعد عنه الخانات، إلا إذا حدّدت `crossGutter: true`. |
| `variants` | `{ recto?, verso? }` | لا شيء | تغييرات للصفحة اليمنى (`recto`) أو للصفحة اليسرى (`verso`)، تُكتب كما يُكتب القالب نفسه. والجهة هي الجهة المادية، فيعمل ذلك في الكتب المكتوبة من اليسار إلى اليمين ومن اليمين إلى اليسار على السواء. |
| `overflowTemplate` | `string` | هذا القالب | قالب الصفحات التي تُضاف حين تستمر خانة في الصفحة التالية (`overflow.continueIn: 'next-page'`). وإن لم يُحدَّد استعملت الصفحة المضافة هذا القالب ولم تُملأ فيها إلا الخانات المستمرة. |
| `bodyStyle` | `string` | لا شيء | نمط فقرة لنص الصفحة، كما في أنماط العناوين. |
| `palette` | `string` | لا شيء | تجاوز للوحة الألوان في الصفحة، كما في أنماط العناوين والأجزاء. |
| `role` | `string` | `'composed'` | دور الصفحة الذي تراه عناصر التصميم التي لها مرشّح `pages`. |

### الخانات

الخانة مستطيل له اسم يستقبل محتوى منضَّدًا. والحقل `name` هو اسم الموضع الذي يطلبه Markdown، وهو فريد في قالبه (ولا يجوز أن تأخذ مجموعةٌ اسمَ خانة أيضًا، لأن نقاط التثبيت تسمّي الاثنين بالطريقة نفسها).

توضع الخانة بخلية `grid` حين يكون للقالب شبكة، وإلا فبحقلها `placement` الذي يعمل كتموضع عنصر التصميم: نقطة تثبيت (`'container'` هي المنطقة، أو `'page'`، أو `'bleed'`، أو `'#name'` لخانة أخرى أو مجموعة)، وحافة، وإزاحة، وحجم. والخانة المثبّتة إلى خانة أخرى تتحرك معها. وإن لم يوجد أي منهما بدأت الخانة من الزاوية العليا اليسرى للمنطقة، بعرض المنطقة كله، وبالارتفاع الذي تحدّده قاعدة ارتفاعها. أما كيف يُصبّ المحتوى في الخانات وكيف تُربط بالتسلسل وكيف يُقصّ ما زاد منها فمشروح في [الصفحات المركّبة › كيف تُنضَّد الصفحة](https://postext.dev/ar/docs/composed-pages.md#كيف-تُنضَّد-الصفحة).

| الخاصية | النوع | القيمة الافتراضية | الوصف |
| --- | --- | --- | --- |
| `name` | `string` | إلزامي | اسم الموضع. |
| `placement` | `ElementPlacement` | المنطقة كلها | نقطة التثبيت والحافة والإزاحة والحجم، كما في [تموضع العناصر](https://postext.dev/ar/docs/configuration-headers-footers.md#تموضع-العناصر). ويُتجاهل حين تضع خليةٌ من الشبكة الخانة. |
| `grid` | `{ col, row, cols?, rows? }` | لا شيء | خلية من شبكة القالب، والعدّ من 1، تمتد على `cols` × `rows` من الخلايا (1 افتراضيًا). والخلية الواقعة خارج الشبكة تُعاد إلى داخلها. ويُتجاهل حين لا يكون للقالب شبكة. |
| `width` و`height` | `Dimension \| { percent } \| 'auto' \| 'fill'` | `'fill'` و`'auto'` | طول ثابت، أو نسبة مئوية من المنطقة (من 0 إلى 100)، أو `'auto'` (حجم المحتوى نفسه)، أو `'fill'` (ما يبقى حتى الحافة التي ثُبّتت إليها الخانة). وإن لم يُحدَّد قرأت الخانة `placement.size`، ثم القيمة الافتراضية: العرض كله، والارتفاع بقدر المحتوى. وخانة النص تحتاج إلى عرض سطر، فلا معنى للعرض `'auto'` إلا في خانة تحمل صورة واحدة (عرض الصورة عند ارتفاع الخانة). والقيمة التي لا يستطيع المحرّك استعمالها (طول سالب، أو وحدة غير معروفة) تُقرأ على أنها القيمة الافتراضية. |
| `minWidth` و`maxWidth` و`minHeight` و`maxHeight` | `Dimension` | لا شيء | حدود للحجم `'auto'` أو `'fill'`، وللمساحة التي تعطيها المجموعة أو تأخذها. ويغلب الحدّ الأدنى الحدَّ الأقصى، ويُعاد الحجم الثابت الواقع خارجهما إلى ما بينهما (ويحذّر `frameMinMax` من الحالتين). |
| `style` | `string` | بلا إطار | معرّف [نمط إطار](https://postext.dev/ar/docs/configuration-callouts.md#أنماط-الإطارات): تُرسم الخانات بأنماط الإطارات (الخلفية، والحدّ، والحشو، والشريط الجانبي، والأيقونة، ولسان التسمية، والعنوان). وتأتي كلمات اللسان من Markdown (`:::frame{slot="dinero" label="El dinero"}`). أما إعدادات الإطار التي تحدّد مكان الصندوق في النص الجاري (`placement` و`span` و`columns` و`width` و`fixed`…) فلا تنطبق على الخانة. |
| `padding` | `{ top?, right?, bottom?, left? }` | قيمة النمط | يتجاوز حشو النمط جهةً جهة: لترك مكان للصور الموضوعة فوق صندوق، مثلًا. |
| `layer` | `number` | `1` | ترتيب الرسم. الزخرفة في الطبقة 0، والطبقة السالبة تُرسم تحتها. |
| `rotate` | `number` | `0` | بالدرجات، في اتجاه عقارب الساعة. ويدور الصندوق ومحتواه معًا. |
| `verticalAlign` | `'top' \| 'middle' \| 'bottom' \| 'justify'` | `'top'` | موضع المحتوى في خانة أطول منه. |
| `columns` و`columnGap` | `number` و`Dimension` | `1` وقيمة النمط | الأعمدة داخل الخانة. |
| `exclude` | `'none' \| 'push'` | `'none'` | `'push'`: يلتفّ نص الخانات الأخرى حول مستطيل هذه الخانة. |
| `flow` | `boolean` | `false` | تستقبل الخانة المحتوى الذي لا يسمّي موضعًا. |
| `takes` | `'h1'` … `'h6'` | لا شيء | تستقبل الخانة أول عنوان من ذلك المستوى لا يسمّي موضعًا، فيكفي لعنوان الصفحة أن يُكتب `# Title` في أعلى السياج. |
| `next` | `string` | لا شيء | سلسلة: المحتوى الذي لا يتسع يستمر في الخانة التي تحمل ذلك الاسم، في الصفحة نفسها. |
| `overflow.continueIn` | `string` | لا شيء | أين يستمر المحتوى الذي لا يتسع: `'#frame'` (خانة أخرى في الصفحة، كما في `next`)، أو `'next-page'` (الخانة نفسها في صفحة تُضاف بعد هذه)، أو `'template:<id>'` (صفحة من ذلك القالب). |
| `overflow.mark` | `string \| false` | بحسب اللغة | العلامة في نهاية الجزء المقطوع. وإن لم تُحدَّد فهي كلمة المتابعة في لغة المستند (كما في الجداول المقسومة)؛ و`false` لا تضع شيئًا. |
| `fit.shrinkText` | `boolean` | `true` | حين لا يجعل شيءٌ آخر المحتوى يتسع، يجوز أن يُنضَّد نصه أصغر. |
| `fit.minScale` | `number` | `0.9` | أصغر مقياس للنص، أكبر من 0 ولا يزيد على 1 (والقيمة الأكبر تُقرأ 1). |
| `fit.scaleImages` و`fit.imageMinScale` | `boolean` و`number` | `true` و`0.8` | هل يجوز تصغير الصور التي في الخانة، وإلى أي مقياس. |
| `pin` | `boolean` | `false` | لا تتحرك الخانة ولا يتغيّر حجمها أبدًا، وذلك للصندوق الذي يجب أن يبقى محاذيًا للرسم. وتلتفّ المجموعة حولها. |
| `grow` و`shrink` و`priority` | `number` | `0` | كيف تتقاسم الخانة مساحة مجموعتها: `grow` يأخذ حصة من المساحة الفائضة، و`shrink` يسمح للخانة بأن تتنازل عن مساحة، والخانات ذات `priority` الأدنى تتنازل أولًا. |
| `optional` | `boolean` | `false` | لا يصدر تحذير حين لا يرسل Markdown شيئًا إلى الخانة. |
| `crossGutter` | `boolean` | `false` | في الصفحة المزدوجة، يجوز للخانة أن تعبر شريط الكعب. |
| `writingMode` و`direction` | `'horizontal-tb' \| 'vertical-rl'` و`'ltr' \| 'rtl'` | قيمة الصفحة | صندوق عمودي في صفحة أفقية، أو العكس. |
| `remove` | `boolean` | `false` | في قالب يوسّع قالبًا آخر، أو في متغيّر: يحذف الخانة الموروثة التي تحمل هذا الاسم. |

### المجموعات

المجموعة عمود (من الأعلى إلى الأسفل) أو صف (من البداية إلى النهاية) من الخانات التي تتقاسم المساحة وتتحرك معًا. وداخل المجموعة يُتجاهل موضع الخانات نفسها على امتداد اتجاه المجموعة: فالمجموعة ترصفها بالترتيب، وبين كل اثنتين `gap`. وحين يطول نص إحدى الخانات تتحرك الخانات التي بعدها معها. والمجموعة صندوق يمكن أن تُثبَّت إليه الخانات والزخرفة (`'#pagina'`).

| الخاصية | النوع | القيمة الافتراضية | الوصف |
| --- | --- | --- | --- |
| `name` | `string` | إلزامي | فريد بين خانات القالب ومجموعاته. |
| `kind` | `'stack' \| 'row'` | `'stack'` | من الأعلى إلى الأسفل، أو من البداية إلى النهاية. |
| `frames` | `string[]` | `[]` | خانات المجموعة، بترتيبها في الصفحة. ولا تنتمي الخانة إلى أكثر من مجموعة واحدة؛ ويُتخطّى الاسم الذي ليس خانة في القالب، والخانة التي سبق إدراجها. |
| `gap` | `Dimension` | `0` | المسافة بين خانتين متجاورتين في المجموعة. |
| `placement` و`grid` | كما في الخانات | صندوق خاناتها | صندوق المجموعة نفسها. وإن لم يُحدَّد فهو الصندوق المحيط بالصناديق المصرَّح بها لخاناتها. |
| `align` | `'start' \| 'center' \| 'end' \| 'space-between'` | `'start'` | أين تذهب المساحة الفائضة حين لا تكبر أي خانة في المجموعة. |
| `remove` | `boolean` | `false` | في قالب يوسّع قالبًا آخر، أو في متغيّر: يحذف المجموعة الموروثة. |

### الوراثة والمتغيّرات

القالب الذي له `extends` يبدأ من القالب الذي يسمّيه (وقد يوسّع ذلك القالب بدوره قالبًا آخر)، ولا يغيّر إلا ما يكتبه:

- الحقل مثل `area` أو `header` أو `overflowTemplate` يحلّ محل حقل الأصل. ويُدمج `grid` مفتاحًا مفتاحًا. وتُورث `spread` و`gutter` و`role` أيضًا؛ أما `id` و`name` و`extends` فخاصة بالقالب نفسه.
- تُدمج `frames` و`groups` **بالاسم**: المدخل الذي يحمل اسم مدخل موروث يغيّر الحقول التي يكتبها ويبقي الباقي (تُدمج `fit` و`overflow` و`padding` مفتاحًا مفتاحًا، ويُستبدل `placement` كاملًا)؛ و`remove: true` يحذفه؛ والاسم الجديد يُضاف بعد المداخل الموروثة.
- تُدمج عناصر الزخرفة بالمعرّف `id` بالطريقة نفسها؛ ويُضاف العنصر الذي له معرّف جديد أو لا معرّف له.

يُكتب `variants.recto` و`variants.verso` كما يُكتب القالب، ويُدمجان بالطريقة نفسها، في الصفحة اليمنى أو اليسرى. ويُطبَّقان بعد سلسلة `extends` كلها، ومتغيّر القالب الجذر أولًا. وللصفحة المزدوجة الجهتان معًا، فلا يُطبَّق عليها أي متغيّر.

```ts
pageTemplates: [
  { id: 'tema', frames: [{ name: 'texto', flow: true }, { name: 'margen', width: { value: 30, unit: 'mm' },
      placement: { anchor: { to: 'container', edge: 'top-left' } } }],
    variants: { recto: { frames: [{ name: 'margen', placement: { anchor: { to: 'container', edge: 'top-right' } } }] } } },
  { id: 'tema-sin-margen', extends: 'tema', frames: [{ name: 'margen', remove: true }] },
]
```

حين يحفظ Sandbox قالبًا لا يُسقط أبدًا قيمةً تساوي القيمة الافتراضية: ففي قالب يوسّع قالبًا آخر، أو في متغيّر، تتجاوز تلك القيمة قيمة الأصل.

ومن الشيفرة، تعيد `resolvePageTemplate(config, id, { parity })` قالبًا دُمجت سلسلته، وطُبّق عليه متغيّر الجهة، ومُلئت فيه كل القيم الافتراضية، وحُسمت فيه كل إحالة كما تصف التحذيرات أدناه؛ وتعيد `validatePageTemplates(config)` التحذيرات.

### ما يطبّقه التنضيد

يطبّق التنضيد موضع كل خانة وأحجامها (الشبكة، ونقاط التثبيت، و`min`/`max`، و`verticalAlign`)، ونمطها و`padding` الخاص بها، و`columns` و`layer` و`rotate` و`exclude` و`flow` و`takes` و`next` و`overflow.continueIn: "#frame"`، ويطبّق من القالب `area` و`grid` و`decoration` و`header` و`footer` و`variants`. أما ما يُقرأ ويُفحص ولا يُطبَّق بعد فهو: تقاسم المساحة داخل المجموعة (`grow` و`shrink` و`priority` و`pin`، و`gap` و`align` الخاصّان بالمجموعة؛ وتحتفظ خاناتها بمواضعها الخاصة)، و`fit`، و`overflow.continueIn: "next-page"` و`overflowTemplate`، و`spread` و`crossGutter`، و`writingMode` و`direction` في الخانة، و`bodyStyle` و`palette` في القالب. والعرض `'auto'` يُقرأ على أنه `'fill'`.

## أنماط التسميات

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

```ts
labelStyles: [
  { id: 'mar', fontStyle: 'italic', textTransform: 'uppercase', letterSpacing: 0.12,
    color: { hex: '#2b6ca3', model: 'hex' } },
  { id: 'ciudad', fontWeight: 600, halo: { color: { hex: '#ffffff', model: 'hex' }, width: { value: 0.6, unit: 'pt' } } },
]
```

| الخاصية | النوع | القيمة الافتراضية | الوصف |
| --- | --- | --- | --- |
| `id` | `string` | إلزامي | الاسم الذي تستعمله المراسي والتسميات. |
| `name` | `string` | المعرّف | الاسم المعروض في Sandbox. |
| `paragraphStyle` | `string` | لا شيء | نمط فقرة تستعير التسمية خطّه؛ والحقول أدناه تتجاوزه. |
| `fontFamily` و`fontSize` و`fontWeight` | `string` و`Dimension` و`number` | قيمة نص المتن | خط التسمية وحجمه ووزنه. |
| `fontStyle` | `'normal' \| 'italic'` | `'normal'` | قائم أو مائل. |
| `color` | `ColorValue` | لون نص المتن | لون الحروف. |
| `textTransform` | `'none' \| 'uppercase'` | `'none'` | الحروف الكبيرة، كما تكتب الخرائط أسماء البحار والبلدان في الكتابة اللاتينية. |
| `letterSpacing` | `number` | `0` | مسافة إضافية بين الحروف، بوحدات em. |
| `halo` | `{ color, width }` | لا شيء | حدّ محيط خلف الحروف، لتُقرأ فوق صورة مزدحمة. |
| `background` و`padding` | `ColorValue` و`Dimension` | لا شيء | لوح خلف التسمية، والمسافة حول نصها. |
| `minScale` | `number` | `0.85` | أصغر ما يجوز أن تُنضَّد به التسمية حين لا تتسع لعرضها. |

### حقول التسمية في المرساة

تأخذ مراسي الصورة (`Resource.anchors`، وهي النقاط التي تستعملها القصص المصورة للمتكلمين) بضعة حقول اختيارية للتسميات. وهي نسب من الصورة، فتبقى صحيحة في كل لغة ومع أي قصّ للصورة. وتتجاهلها القصص المصورة.

| الحقل | النوع | القيمة الافتراضية | الوصف |
| --- | --- | --- | --- |
| `width` | `number` | عرض التسمية نفسها | عرض سطر التسمية، نسبةً من عرض الصورة: الاسم الطويل ينكسر داخله على سطرين. |
| `align` | `'start' \| 'center' \| 'end'` | `'center'` | أي جانب من التسمية يقف عند نقطة المرساة. |
| `verticalAlign` | `'top' \| 'middle' \| 'bottom'` | `'middle'` | أي حافة من التسمية تقف عند ارتفاع المرساة. |
| `rotate` | `number` | `0` | بالدرجات، في اتجاه عقارب الساعة، حول نقطة المرساة: كاسم نهر يُكتب على امتداد مجراه. |
| `style` | `string` | لا شيء | معرّف من `labelStyles`. والتسمية التي تسمّي نمطها الخاص تتجاوزه. |

## تحذيرات قوالب الصفحات

في غير هذا الموضع يتجاهل المحرّك المفتاح الذي لا يعرفه. أما قوالب الصفحات وأنماط التسميات فتُفحص، وكل مشكلة فيها تحذير إعدادات يظهر في `postext check` وفي لوحة **الفحوص** في Sandbox. والحقل `path` في هذه التحذيرات مؤشر JSON إلى الحقل المخطئ: `/pageTemplates/3/frames/2/style`، و`/pageTemplates/0/variants/recto/frames/1/next`، و`/resources/4/anchors/0/style`. وحين يكون الحقل موروثًا يسمّي المؤشر القالب الذي كتبه. والتحذير الذي يذكر معرّفًا أو اسمًا غير موجود يقترح أيضًا أقرب معرّف أو اسم موجود.

المفتاح المكتوب خطأً في قالب أو خانة أو مجموعة أو شبكة أو `fit` أو `overflow` أو متغيّر أو نمط تسمية هو `unknownConfigKey`؛ والكلمة الخارجة عن خيارات إعداد ما (`area` و`verticalAlign` و`exclude` و`takes` و`kind` و`align` و`writingMode` و`direction` و`fontStyle` و`textTransform`) هي `unknownConfigValue`، ويحتفظ الإعداد بقيمته الافتراضية. ويُتجاهل القالب الذي لا `id` له، والخانة أو المجموعة التي لا `name` لها، مع `unknownConfigValue` عند ذلك الحقل.

| التحذير | السبب | الحل |
| --- | --- | --- |
| `templateDuplicate` | لقالبين المعرّف `id` نفسه. يُستعمل الأول ويُتجاهل اللاحق. | غيّر اسم أحدهما، أو احذف النسخة. |
| `templateExtendsCycle` | تتبُّع `extends` يعود إلى القالب نفسه (`a → b → a`). فيُسقط كل قالب في الحلقة، وكل قالب يوسّع واحدًا منها: لا تستطيع أي صفحة أن تستعمله. | احذف `extends` من قالب واحد في الحلقة. |
| `templateExtendsUnknown` | يسمّي `extends` معرّفًا لا يحمله أي قالب. فيُستعمل القالب وحده، بلا شيء موروث. | صحّح المعرّف (يقترح التحذير أقربها)، أو أضف القالب الأصل. |
| `frameDuplicate` | لخانتين، أو لمجموعتين، في قائمة واحدة الاسم `name` نفسه، أو لمجموعة اسم خانة. يُتجاهل المدخل اللاحق؛ والتثبيت إلى ذلك الاسم يقرأ الخانة. | أعطِ كل خانة وكل مجموعة اسمًا خاصًا بها. ولتغيير خانة موروثة، اكتب مدخلًا واحدًا باسمها. |
| `frameStyleUnknown` | لا يسمّي `style` في الخانة أي نمط إطار. فتُرسم الخانة بلا صندوق. | صحّح المعرّف، أو أضف النمط إلى `calloutStyles`. |
| `frameAnchorUnknown` | خانة أو مجموعة أو عنصر زخرفة مثبّت إلى `'#name'`، وليس في القالب خانة أو مجموعة أو عنصر بهذا الاسم؛ أو خانات ومجموعات مثبّت بعضها إلى بعض في حلقة (ويشمل ذلك المرور بمجموعة غير مثبّتة إلى شيء من عندها، صندوقها صندوق خاناتها). فتُقرأ نقطة التثبيت على أنها `'container'`، أي المنطقة. | ثبّت إلى خانة أو مجموعة موجودة، أو اكسر الحلقة بتثبيت إحداها إلى المنطقة. |
| `frameMinMax` | الحدّ الأدنى أكبر من الحدّ الأقصى (`minHeight 40mm > maxHeight 30mm`)، أو يقع `width` أو `height` الثابت خارجهما. فيغلب الحدّ الأدنى، ويُعاد الحجم الثابت إلى ما بين الحدّين، ويذكر `used` ما تأخذه الخانة. وتُقارن الأطوال ذات الوحدات المختلفة بدقة الصفحة، ووحدات em بحجم نص المتن. | اجعل الحدّ الأدنى لا يزيد على الحدّ الأقصى، أو احذف الحدّ الذي يناقضه الحجم الثابت. |
| `groupFrameUnknown` | تُدرج `frames` في مجموعة اسمًا ليس خانة في القالب (ربما حذفه قالب فرعي أو متغيّر). فتتخطّاه المجموعة. | صحّح الاسم، أو احذفه من القائمة. |
| `groupFrameTwice` | خانة مُدرجة في مجموعتين، أو مرتين في مجموعة واحدة. ولا تنتمي الخانة إلا إلى مجموعة واحدة: يُتخطّى الإدراج اللاحق. | أبقِ الخانة في المجموعة الواحدة التي تتحرك معها. |
| `frameChainLoop` | خانات يستمر بعضها في بعض في حلقة عبر `next` أو `overflow.continueIn: '#frame'` (`a → b → a`). فيُسقط الرابط الذي يغلق الحلقة، وتنتهي السلسلة عند الخانة التي قبله. | أنهِ السلسلة عند آخر خانة فيها: احذف `next` منها، أو اجعلها تستمر في الصفحة التالية. |
| `overflowTargetUnknown` | `next` لا يسمّي خانة في القالب؛ أو `overflow.continueIn` لا يسمّي خانة (`'#x'`) أو قالبًا (`'template:x'`)، أو لا يأتي على أيّ من الصيغ `'#frame'` و`'next-page'` و`'template:<id>'`؛ أو `overflowTemplate` لا يسمّي قالبًا. فلا يستمر هناك المحتوى الذي لا يتسع. | صحّح الاسم أو المعرّف، أو اكتب إحدى الصيغ الثلاث. |
| `labelStyleUnknown` | تسمّي مرساة في صورة `style` ليس في `labelStyles`. ويذكر التحذير المورد. وتأخذ التسميات عند تلك المرساة الهيئة الافتراضية. | صحّح معرّف النمط في المرساة، أو أضف النمط إلى `labelStyles`. |

إصدار الإعدادات هو 15 منذ قوالب الصفحات (والحزم المكتوبة قبل ذلك تبقى تُحمَّل دون تغيير: لا يتغيّر معنى أي شيء تقوله إعدادات أقدم).
