# الإعدادات: القصص المصورة

> إعدادات comics: الإطار العام لصفحات القصص المصورة وفواصلها، وأنماط الإطارات، وكتابة الحوار، وأنماط الفقاعات، وقائمة الشخصيات

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

## باختصار

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

## القصص المصورة

تضبط الخاصية `comics` صفحات القصص المصورة (`:::page`) والشرائط المصورة (`:::strip`) والصفحات المزدوجة: الإطار العام والفواصل التي تُقطع منها الإطارات، وأنماط الإطارات، وكتابة الحوار، وأنماط الفقاعات، وقائمة الشخصيات. ولا يقرؤها إلا المستند الذي فيه قصص مصورة؛ فالمستند الذي ليس فيه شيء منها يُخرَج كما كان يُخرَج تمامًا، والمستند الذي فيه قصص مصورة وليس فيه قسم `comics` يأخذ القيم الافتراضية للغته. ويشرح دليل [القصص المصورة](https://postext.dev/ar/docs/comics.md) الترميز وطريقة كتابة حوار الصفحات.

```ts
const config: PostextConfig = {
  comics: {
    readingDirection: 'auto',
    gutter: { horizontal: { value: 5, unit: 'mm' }, vertical: { value: 2.5, unit: 'mm' } },
    panel: { borderWidth: { value: 0.8, unit: 'pt' }, borderStyle: 'rough' },
    panelStyles: [{ id: 'night', background: { hex: '#14142b', model: 'hex' }, borderColor: { hex: '#ffffff', model: 'hex' } }],
    lettering: { fontSize: { value: 8.5, unit: 'pt' }, textTransform: 'uppercase' },
    balloonStyles: [{ id: 'eerie', shape: 'wavy', italic: true }],
    cast: [{ id: 'maya', name: 'مايا' }, { id: 'tomas', name: 'الجد توماس' }],
  },
};
```

| الخاصية | النوع | القيمة الافتراضية | الوصف |
| --- | --- | --- | --- |
| `readingDirection` | `'auto' \| 'ltr' \| 'rtl'` | `'auto'` | ترتيب الإطارات في الصف. `'auto'` يقرأ من اليمين إلى اليسار في المستند المكتوب من اليمين إلى اليسار وفي المستند العمودي وفي اليابانية والصينية التقليدية، وفي اتجاه `artDirection` فيما سواه (ومنه الصينية المبسطة والكورية). وسمة `direction` في الصفحة تتقدّم عليه. ومع `page.binding: 'auto'` يُجلَّد على اليمين الكتاب الذي تُقرأ قصصه المصورة من اليمين إلى اليسار. |
| `artDirection` | `'ltr' \| 'rtl'` | `'ltr'` | اتجاه القراءة الذي رُسمت له الرسوم: `'rtl'` للمانغا. |
| `mirrorArt` | `boolean` | `false` | اقلب رسوم الصفحة التي تُقرأ بعكس اتجاه `artDirection`. ويبقي الإطار رسمه كما رُسم مع `mirror=false`. |
| `frame.margins` | `PageMargins` | هوامش الصفحة | هوامش خاصة بصفحات القصص المصورة (`top` و`bottom` و`left` و`right` و`mirror`). تُقطع الإطارات من الصندوق الذي تتركه؛ وإن لم تُحدَّد فمن منطقة النص في الصفحة. |
| `gutter.horizontal` | `Dimension` | `4mm` | المسافة بين الصفوف. وسمة `gutter` في الصفحة تتقدّم عليها. |
| `gutter.vertical` | `Dimension` | `2mm` | المسافة بين الإطارات المتجاورة في الصف. |
| `panel` | `PanelStyleConfig` | انظر أدناه | نمط الإطار الافتراضي. |
| `panelStyles` | `NamedPanelStyleConfig[]` | `[]` | أنماط إطارات مسمّاة، تُختار بـ `:::page{style=…}` أو `::panel{style=…}`. لكل منها `id`، و`name` اختياري (لواجهات التحرير وحدها)، وحقول نمط الإطار؛ والحقول غير المحددة تتبع `panel`. |
| `lettering` | `LetteringConfig` | انظر أدناه | خط كل فقاعات الكتاب وحجمها وقواعد الدار فيها. |
| `balloonStyles` | `BalloonStyleConfig[]` | الأنماط المدمجة التسعة | أنماط الفقاعات بحسب نوعها. الأنماط المدمجة موجودة دائمًا؛ والمدخل الذي يحمل معرّف أحدها يغيّره، والمدخل الذي يحمل معرّفًا جديدًا يضيف نمطًا يُطبَّق فوق `speech`. |
| `cast` | `ComicCastMember[]` | `[]` | الشخصيات (انظر [الشخصيات](https://postext.dev/ar/docs/configuration-comics.md#الشخصيات)). |
| `runningHeads` | `boolean` | `false` | اطبع الترويسات وأرقام الصفحات في صفحات القصص المصورة. وحين يكون معطّلًا تكون صفحة القصة كلها إطارات، ويظل رقمها محسوبًا. |
| `viewerLeaf` | `ComicViewerLeafConfig` | غير محدد | للمضيفات التي ليست صفحاتها أوراقًا: يُخرج صفحات القصص المصورة على ورقة طباعة (`width` و`height` و`margins`) مصغّرة إلى `fitWidth` px (وبارتفاع لا يزيد على `fitHeight` px) في أعلى الصفحة. يضبطه عارض HTML في Sandbox، ولا يُحفظ أبدًا مع المستند. |

### أنماط إطارات القصص المصورة

`comics.panel` وكل مدخل في `comics.panelStyles`:

| الخاصية | النوع | القيمة الافتراضية | الوصف |
| --- | --- | --- | --- |
| `borderWidth` | `Dimension` | `1pt` | سُمك الحدّ؛ والقيمة `0` لا ترسم حدًّا. ويُخطّ الحدّ على محيط الإطار. |
| `borderColor` | `ColorValue` | أسود | لون الحدّ (يمكن ربطه بلوحة الألوان). |
| `borderRadius` | `Dimension` | `0` | نصف قطر زوايا الإطار المستطيل، ولا يتجاوز نصف ضلعه الأقصر. والإطار الذي يقطعه خط مائل تبقى زواياه حادة. |
| `borderStyle` | `'solid' \| 'rough' \| 'none'` | `'solid'` | خط نظيف، أو خط مرسوم باليد يهتز قليلًا (مشتق من الإطار، فيبقى هو نفسه في كل تنضيد)، أو بلا حدّ. |
| `background` | `ColorValue` | أبيض | التعبئة تحت الرسم: لون الإطار الفارغ، ولون الأشرطة حول الرسم المعروض كاملًا. |
| `fit` | `'cover' \| 'contain'` | `'cover'` | `cover` يقصّ الرسم ليملأ الإطار، ولا يقصّ داخل منطقته الآمنة أبدًا؛ و`contain` يعرضه كاملًا. |
| `bleed` | `boolean` | `false` | الإطارات التي بهذا النمط تتجاوز الإطار العام إلى حدّ القصّ ومنطقة النزف من كل جانب يلامسه. |

### كتابة الحوار

يضبط `comics.lettering` كل فقاعات الكتاب. للحوار حجم واحد: يمكن لنمط الفقاعة أن يغيّره بنسبة (`fontScale`)، ولا يُصغَّر النص أبدًا ليتسع في فقاعة.

| الخاصية | النوع | القيمة الافتراضية | الوصف |
| --- | --- | --- | --- |
| `fontFamily` | `string` | حسب اللغة | خط كتابة الحوار. إن لم يُحدَّد: `Comic Neue`؛ و`Zen Antique` في اليابانية، و`Noto Sans SC` في الصينية المبسطة، و`LXGW WenKai TC` في الصينية التقليدية، و`Playpen Sans Arabic` في العربية والفارسية والأردية (`defaultComicFont(locale)`). |
| `fontSize` | `Dimension` | `7.5pt` | حجم نص الفقاعات. ويُكتب حوار القصص المصورة عادةً بحجم 7 إلى 9 نقاط على الصفحة المطبوعة. |
| `lineHeight` | `number` | `1.15` | المسافة بين الأسطر، مضاعفًا للحجم. وإذا تُرك على قيمته الافتراضية أخذت الفقاعات العمودية والصينية واليابانية 1.5، والعربية 1.45. |
| `color` | `ColorValue` | أسود | لون النص. |
| `bold`، `italic` | `boolean` | `false` | اجعل كتابة الحوار كلها عريضة أو مائلة. ولا يُمال حوار الصينية واليابانية والعربية أبدًا. |
| `letterSpacing` | `Dimension` | `0` | مسافة إضافية بين الحروف؛ و`em` نسبةً إلى حجم النص. ولا تُطبَّق على العربية أبدًا. |
| `writingMode` | `'auto' \| 'horizontal' \| 'vertical'` | `'auto'` | `'auto'` يكتب حوار اليابانية والصينية التقليدية، وحوار أي مستند منضَّد بالكتابة العمودية، في أعمدة عمودية، وكل ما سوى ذلك أفقيًا. وتنضّد علامة `vertical` أو `horizontal` في سطر الحوار ذلك السطر على خلاف ذلك (انظر [القصص المصورة › كتابة الحوار](https://postext.dev/ar/docs/comics.md#كتابة-الحوار)). |
| `textTransform` | `'none' \| 'uppercase'` | `'none'` | الأحرف الكبيرة كلها، المظهر التقليدي لكتابة الحوار في القصص الأمريكية والأوروبية. والكتابات التي لا تعرف الأحرف الكبيرة تبقى كما هي. |
| `dropFinalStop` | `'auto' \| boolean` | `'auto'` | احذف النقطة التي تُنهي الفقاعة (`。` في المانغا). `'auto'`: في اليابانية والصينية فقط. |
| `doubleDash` | `boolean` | `false` | اكتب الشرطة الطويلة `--`، وهي عادة في كتابة حوار القصص الأمريكية. |
| `inset` | `Dimension` | `1.5mm` | المسافة المتروكة بين الفقاعة وحدّ إطارها. والتعليق السردي الملاصق للحدّ لا يلتزم بها. |
| `joinSameSpeaker` | `'butt' \| 'connector' \| 'none'` | `'butt'` | فقاعتان متتاليتان للمتحدث نفسه: جسمان مدموجان في محيط واحد، أو موصولان بعنق ضيق، أو منفصلان. ويطلب سطر الحوار ما يريد بـ `join` أو `join=false`. |
| `maxColumnChars` | `number` | `8` | في الكتابة العمودية: أكبر عدد من الحروف في عمود واحد من الفقاعة. والمؤثرات الصوتية تنكسر بعد خمسة. |

### أنماط الفقاعات

كل مدخل في `comics.balloonStyles` يُطبَّق فوق النمط المدمج الذي يحمل المعرّف نفسه (`speech` و`thought` و`whisper` و`shout` و`radio` و`caption` و`inner` و`note` و`sfx`)، أو فوق `speech` إن كان معرّفه جديدًا. والقيم الافتراضية أدناه قيم `speech`؛ وتسرد [صفحة القصص المصورة](https://postext.dev/ar/docs/comics.md#أنماط-الفقاعات) ما يغيّره كل نمط مدمج. والأطوال بوحدة `em` نسبةً إلى حجم نص الفقاعة.

| الخاصية | النوع | القيمة الافتراضية | الوصف |
| --- | --- | --- | --- |
| `id` | `string` | مطلوب | الكلمة التي يسمّي بها سطر الحوار النمط: `ben{whisper}: …` أو `style=whisper`. |
| `name` | `string` | `id` | اسم مقروء، لواجهات التحرير وحدها. |
| `shape` | `'oval' \| 'rounded' \| 'rectangle' \| 'cloud' \| 'burst' \| 'wavy' \| 'electric' \| 'none'` | `'oval'` | المحيط المرسوم حول النص. و`'none'` ينضّد النص على الرسم مباشرة. |
| `fill` | `ColorValue` | أبيض | تعبئة الفقاعة. |
| `stroke` | `ColorValue` | أسود | لون المحيط. |
| `strokeWidth` | `Dimension` | `0.6pt` | سُمك المحيط. |
| `dash` | `boolean` | `false` | محيط متقطّع (الهمس). |
| `double` | `boolean` | `false` | محيط مزدوج. |
| `wobble` | `number` | `0` | اهتزاز المحيط كأنه مرسوم باليد، من 0 إلى 1، مشتق من الفقاعة فلا يتغير أبدًا بين تنضيد وآخر. |
| `roundness` | `number` | `2.2` | أُسّ القطع الناقص الفائق (superellipse) في الشكل البيضاوي: 2 قطع ناقص، والقيم الأعلى أقرب إلى المربع. |
| `burstPoints` | `number` | `14` | عدد رؤوس الانفجار؛ و`0` يحسبها من طول المحيط. |
| `burstDepth` | `number` | `0.22` | عمق رؤوس الانفجار، كسرًا من نصف قطر الجسم. |
| `padding` | `Dimension` | `0.55em` | الهواء بين النص والمحيط. |
| `aspect` | `number` | `1.6` | نسبة العرض إلى الارتفاع التي يسعى إليها تقسيم الأسطر في كتلة النص (الكتابة الأفقية). |
| `tail` | `'curved' \| 'wedge' \| 'bubbles' \| 'zigzag' \| 'none'` | `'curved'` | الذيل. |
| `tailWidth` | `Dimension` | `0.9em` | عرض الذيل حيث يخرج من المحيط. |
| `tailReach` | `number` | `0.55` | مدى امتداد الذيل نحو متحدثه، كسرًا من المسافة بين المحيط والفم. |
| `target` | `'mouth' \| 'head'` | `'mouth'` | ما يتجه إليه الذيل: فم نقطة الارتكاز، أو رأسها (فقاعات التفكير). |
| `position` | `'auto' \| 'top-start' \| 'top-end' \| 'bottom-start' \| 'bottom-end' \| 'top' \| 'bottom'` | `'auto'` | موضع الفقاعة حين لا يثبّتها السطر: تضعها كتابة الحوار، أو في زاوية من الإطار أو عند حافة منه. |
| `butt` | `boolean` | `false` | ألصق فقاعة الزاوية أو الحافة بحدّ الإطار (التعليقات السردية). |
| `fontFamily` | `string` | خط كتابة الحوار | خط هذا النمط. ويأخذ `sfx` افتراضيًا خط المؤثرات الصوتية في اللغة: `Bangers`، و`Dela Gothic One` في اليابانية، و`ZCOOL KuaiLe` في الصينية المبسطة، و`LXGW WenKai TC` في الصينية التقليدية، و`Lalezar` في العربية (`defaultComicSfxFont(locale)`). |
| `fontScale` | `number` | `1` | حجم النص، مضاعفًا لحجم كتابة الحوار. |
| `bold`، `italic` | `boolean` | قيمة كتابة الحوار | نص عريض أو مائل. |
| `color` | `ColorValue` | قيمة كتابة الحوار | لون النص. |
| `textTransform` | `'none' \| 'uppercase'` | قيمة كتابة الحوار | الأحرف الكبيرة كلها لهذا النمط. |
| `letterSpacing` | `Dimension` | قيمة كتابة الحوار | مسافة إضافية بين الحروف. |
| `align` | `'center' \| 'start'` | `'center'` | محاذاة الأسطر داخل الفقاعة. |
| `halo` | `Dimension` | بلا | سُمك خط يُرسم حول الحروف ليُقرأ النص فوق الرسم (المؤثرات الصوتية). |
| `haloColor` | `ColorValue` | أبيض | لون الهالة. |
| `rotate` | `number` | `0` | الدوران بالدرجات، في اتجاه عقارب الساعة. وسمة `rotate` في السطر تتقدّم عليه. |

### الشخصيات

كل مدخل في `comics.cast` يصف شخصية:

| الخاصية | النوع | القيمة الافتراضية | الوصف |
| --- | --- | --- | --- |
| `id` | `string` | مطلوب | مفتاح المتحدث في السيناريو وفي نقاط الارتكاز على الرسوم. |
| `name` | `string` | `id` | الاسم الذي يطبعه مُخرَج HTML وكتاب EPUB المتدفق قبل أسطر الشخصية، وتعرضه واجهات التحرير. |
| `balloonStyle` | `string` | `speech` | نمط أسطر الشخصية التي لا تسمّي نمطًا. |
| `color` | `ColorValue` | قيمة النمط | لون نص فقاعات الشخصية. |
| `fill` | `ColorValue` | قيمة النمط | تعبئة فقاعات الشخصية. |
| `fontFamily` | `string` | قيمة النمط | خط فقاعات الشخصية. |

يتقدّم `color` و`font` في السطر نفسه على قائمة الشخصيات، وتتقدّم قائمة الشخصيات على نمط الفقاعة. ويجوز أن يكون كل لون في القصص المصورة مدخلًا من لوحة الألوان، فيتبعها كأي لون مربوط بها.

```ts
const resolved = resolveComicsConfig(config.comics, 'ja');
// => كل الحقول مملوءة؛ والخطان Zen Antique وDela Gothic One

const minimal = stripComicsDefaults(config.comics, 'ja');
// => undefined حين يكون كل شيء على قيمته الافتراضية

const shout = pickBalloonStyle(resolved, 'shout'); // نمط الصراخ المدمج مع تغييرات الكتاب
const night = pickPanelStyle(resolved, 'night');   // نمط إطار مسمّى، وإلا فالإطار الافتراضي
```
