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

> كيف ينضّد Postext القصص المصورة والمانغا من Markdown: صفحات تقطعها شجرة تقسيم، ورسوم إطارات تُقصّ حول منطقتها الآمنة، وحوار يُكتب آليًا من نص السيناريو (كلام وتفكير وهمس وصراخ ولاسلكي وتعليقات سردية ومؤثرات صوتية)، وأنماط الفقاعات، ونقاط ارتكاز المتحدثين على الرسوم، والشرائط المصورة داخل النص، والصفحات المزدوجة، والقراءة من اليمين إلى اليسار والكتابة العمودية، والترجمات، ومخرجات Canvas وPDF وHTML وEPUB

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

## باختصار

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

**الرسوم هي الإطارات؛ وكل ما يُقال أو يُفكَّر فيه أو يُروى أو يُسمع نصٌّ في ملف Markdown.**

القصة المصورة في Postext مجموعة من الرسوم ونص سيناريو. الرسوم موارد عادية من نوع bitmap أو SVG، مرسومة بلا أي كتابة عليها. أما السيناريو فيسكن في ملف Markdown الخاص بالفصل: تقطع كتلة `:::page` الصفحة إلى إطارات، وتعطي كل إطار رسمه، وتسرد سطرًا سطرًا فقاعات ذلك الإطار وتعليقاته السردية ومؤثراته الصوتية. ويتولى Postext الباقي: يرتّب الإطارات، ويقصّ كل رسم على خانته دون أن يمسّ ما يهمّ فيه، وينضّد النص بخط كتابة الحوار الخاص بالكتاب وبحجم واحد، ويرسم الفقاعة حوله، ويوجّه ذيلها إلى المتحدث، ويضع الفقاعات بترتيب القراءة حيث لا تغطي وجهًا. والترجمة ملف Markdown آخر فيه الإطارات نفسها وكلمات أخرى؛ ويكتب Postext حوارها من أوله، في أعمدة لليابانية ومن اليمين إلى اليسار للعربية.

القصص المصورة اختيارية: المستند الذي ليس فيه `:::page` ولا `:::strip` يُخرَج كما كان يُخرَج من قبل تمامًا. وتقع إعداداتها في [قسم `comics` من الإعدادات](https://postext.dev/ar/docs/configuration.md#القصص-المصورة)، ويلخّص [صيغة المستند › القصص المصورة](https://postext.dev/ar/docs/document-format.md#القصص-المصورة) ترميزها.

## صفحات القصص المصورة

كتلة `:::page` صفحة واحدة من القصة المصورة. تُفتح بسطر `:::page{…}`، وتحوي سطر `::panel` لكل إطار يتبعه سيناريو ذلك الإطار، وتُغلق بسطر فيه `:::` وحدها:

```md
:::page{split="30 [30 | 20 | *] / *" gutter=4mm}
::panel{art=lh-arrive}
caption: كل صيف، كانت مايا تقضي أسبوعًا في المنارة.
maya: جدّي! لقد وصلت!
::panel{art=lh-radio}
tomas: جئتِ في وقتك. المذياع فقد صوته،
tomas: والعاصفة في الطريق.
::panel{art=lh-maya}
maya{thought}: ذلك الصمام يبدو مرتخيًا…
::panel{art=lh-beam bleed}
sfx{rotate=-8}: طراخ
tomas{shout}: تمسّكي بالدرابزين!
:::
```

تبدأ الكتلة دائمًا في صفحة جديدة وتشغلها كلها. والنص الذي يلي سور الإغلاق يبدأ في الصفحة التالية، فكتلتا `:::page` متتاليتان تعطيان صفحتين، ولا يضيف `:::pagebreak` بينهما صفحة. ويقرأ المحرّك متن الكتلة بنفسه، سطرًا سطرًا، كما يقرأ `:::verse`: فلا يتعرّف داخلها على كتل Markdown ولا على الحاويات ولا على التوجيهات الأخرى، ويتجاهل `<!-- comments -->` ولو امتدت على عدة أسطر.

دور الصفحة `'comic'` (`VDTPage.role`). لا تحمل ترويسة ولا رقم صفحة، لأن صفحة القصة المصورة كلها إطارات، لكنها تُحتسب في ترقيم الصفحات؛ ويطبعهما `comics.runningHeads: true`. وتُقطع الإطارات من **الإطار العام**، وهو منطقة النص في الصفحة داخل هوامشها، ما لم يعطِ `comics.frame.margins` صفحات القصص المصورة هوامش خاصة بها.

سمات سطر الافتتاح:

| السمة | الأثر |
| --- | --- |
| `split="…"` | كيف يُقطع الإطار العام إلى خانات (انظر [تقسيم الصفحة](https://postext.dev/ar/docs/comics.md#تقسيم-الصفحة)). إن لم تُحدَّد، تُرصّ الإطارات صفوفًا متساوية الارتفاع. |
| `gutter=4mm`، `gutter="4mm 2mm"` | المسافة بين الصفوف، وبين الإطارات المتجاورة إن أُعطيت قيمة ثانية. والعدد المجرد بالمليمترات. إن لم تُحدَّد: `comics.gutter` (4 mm و2 mm). |
| `style=…` | نمط إطار مسمّى لكل إطارات الصفحة (`comics.panelStyles`). |
| `bleed` | كل إطار يلامس الإطار العام يمتد حتى حد القص وإلى منطقة النزف. |
| `direction=rtl`، `dir=ltr` | اتجاه قراءة هذه الصفحة، أيًّا كان ما تقوله الإعدادات (انظر [اتجاه القراءة](https://postext.dev/ar/docs/comics.md#اتجاه-القراءة)). |
| `spread` | مدّ الصفحة على صفحتين متقابلتين (انظر [الصفحات المزدوجة](https://postext.dev/ar/docs/comics.md#الصفحات-المزدوجة)). |

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

تصف السمة `split` الصفحة شجرةً من القطوع. قائمة أحجام مفصولة بـ `/` ترصّ الخانات من الأعلى إلى الأسفل (صفوفًا)؛ وقائمة مفصولة بـ `|` تضعها جنبًا إلى جنب، بدءًا من الجهة التي تُقرأ منها الصفحة. والحجم الذي تتبعه قائمة بين قوسين معقوفين يقطع تلك الخانة مرة أخرى على المحور الآخر. صفحة المثال السابق، `30 [30 | 20 | *] / *`، صفٌّ ارتفاعه 30% من ارتفاع الإطار العام، مقطوع إلى إطارين عرضهما 30% و20% من عرضه وثالث يأخذ الباقي، فوق صف ثانٍ يأخذ باقي الصفحة:

> **شكل: التقسيم 30 [30 | 20 | *] / ***
> إطار صفحة عام مقطوع بالتقسيم 30 [30 | 20 | *] / *. يأخذ الصف الأول 30 % من الارتفاع ويُقطع إلى ثلاثة إطارات: 30 % من العرض، و20 %، والباقي. ويأخذ صف ثانٍ تحته باقي الصفحة إطارًا واحدًا. وتمتد الفواصل على جانبي خطوط التقسيم. وبجانب الصفحة رُسم التقسيم شجرةً: قائمة صفوف فيها عنصران؛ يحمل الأول قائمة بين قوسين معقوفين من ثلاثة أعمدة. والأوراق هي الإطارات من 1 إلى 4 بترتيب القراءة.
>
> *الأحجام نسب مئوية من الخانة الأم؛ و* تأخذ ما بقي. وتُرقَّم الإطارات بترتيب القراءة، وهو ترتيب الشجرة.*

القواعد كاملة:

```
split := list
list  := item ( "/" item )*  |  item ( "|" item )*
item  := size [ "[" list "]" ]
size  := number ["%"] [ "~" number ["%"] ]  |  "*"  |  (nothing)
```

- **الأحجام** نسب مئوية من الخانة الأم على محور القائمة؛ و`30` و`30%` سواء. ونجمة `*`، أو حجم فارغ، تأخذ حصة متساوية مما تتركه الأحجام المكتوبة. وآخر عنصر في القائمة يمتد دائمًا إلى نهايتها، أيًّا كان حجمه المكتوب.
- **فاصل واحد في كل قائمة.** الخلط بين `/` و`|` في قائمة واحدة، أو قوس `[` لا يُغلق، أو قائمة بين قوسين على محور أمّها نفسه، خطأ في الصياغة (`comicSplitSyntax`): ويُستعمل الجزء المقروء.
- **الزيادة.** الأحجام التي يتجاوز مجموعها 100% تُصغَّر بحيث تحتفظ كل `*` بـ 5%، وتبلغ الصفحة عن `comicSplitOverflow`.
- **ترتيب القراءة** هو ترتيب الشجرة: الصفوف من الأعلى إلى الأسفل، والإطارات داخل الصف من جهة البداية. وتملأ أسطر `::panel` الخانات بهذا الترتيب. والصفحة التي فيها إطارات أكثر من الخانات تُسقط الإطارات الزائدة؛ والتي فيها إطارات أقل تترك آخر الخانات فارغة (`comicPanelCount`، ولا يُبلَّغ عنه إلا حين يُكتب `split`).

أمثلة على التقسيم:

| التقسيم | الصفحة |
| --- | --- |
| `*` | صفحة كاملة (splash): إطار واحد. |
| `33 / 33 / *` | ثلاثة صفوف. |
| `* / * / * / *` | أربعة صفوف متساوية، وهي اليونكوما (yonkoma)، الشريط الفكاهي ذو الإطارات الأربعة. |
| `50 [* \| *] / 50 [* \| * \| *]` | إطاران فوق ثلاثة. |
| `30 / 35 [* \| * \| *] / *` | إطار عريض، ثم ثلاثة في صف، ثم إطار عريض. |
| `60 \| * [50 / *]` | إطار طويل في جهة البداية وإطاران مرصوصان بجانبه. |
| `* [40~55 \| *] / 35` | صف حركة يقطعه خط مائل، فوق صف ارتفاعه 35%. |

### القطوع المائلة

الحجم المكتوب `a~b` يعطي خطًا مائلًا: تمتد الحافة البعيدة للخانة من `a`% في بداية المحور المتعامد إلى `b`% في طرفه الآخر. في الإطارات المتجاورة تكون البداية هي الأعلى، فيرسم `40~55 | *` خطًا من 40% من العرض في الأعلى إلى 55% في الأسفل؛ وفي الصفوف تكون البداية هي الجهة التي تُقرأ منها الصفحة. وتُجمع الأحجام عند كل طرف على حدة، وتبقى الخانات مضلعات محدّبة. ولا تُدوَّر الزوايا إلا في الإطارات المستطيلة؛ أما الإطار المائل فتبقى زواياه حادة.

### الفواصل

يمتد الفاصل على جانبي كل خط تقسيم، نصفه في كل جهة، فالخط المكتوب عند 30% يقع تمامًا عند 30% من خانته. وتحتفظ الخطوط المائلة بفاصل محورها، مقيسًا عرضيًا على الخط. وتتبع القيم الافتراضية الصفحة المعتادة: 4 mm بين الصفوف و2 mm بين إطارات الصف الواحد (`comics.gutter.horizontal` و`vertical`، أو السمة `gutter` في الصفحة).

### النزف

الإطار النازف يتجاوز الإطار العام: كل جانب من جوانبه يلامس الإطار العام يُدفع إلى حد القص، وإلى منطقة النزف وراءه حين تكون للصفحة منطقة نزف (`page.cutLines.bleed`). تجعل السمة `bleed` في الصفحة كل إطار نازفًا؛ وتجعل `bleed` في الإطار نفسه ذلك الإطار وحده نازفًا، و`bleed="top start"` تلك الجوانب وحدها (`top` و`bottom` و`start` و`end` و`left` و`right`)، و`bleed=false` توقفه. ونمط الإطار الذي فيه `bleed: true` يجعل إطاراته نازفة.

### الحشو والإطارات الداخلية

يجعل `pad` الإطار أصغر من خانته: من قيمة إلى أربع قيم بترتيب هوامش CSS مع الجهات المنطقية (الأعلى، والنهاية، والأسفل، والبداية)، كل منها طول أو نسبة مئوية من الخانة. فـ `::panel{art=x pad="0 15%"}` يعطي إطارًا أضيق من صفه، في وسطه.

والإطار الذي فيه `inset="x y w h"` لا يأخذ خانة: يوضع فوق الإطار الذي قبله، في ذلك الموضع وبذلك الحجم، بنسب مئوية من صندوق ذلك الإطار، كصورة شخصية صغيرة في زاوية أو لقطة قريبة فوق لقطة واسعة. ويُكتب حواره داخله.

```md
:::page{split="*"}
::panel{art=storm-wide}
caption{at=bottom-start}: هبّت العاصفة عند منتصف الليل.
::panel{art=maya-window inset="62% 6% 32% 30%"}
maya{whisper}: جدّي؟
:::
```

## الإطارات والرسوم

يبدأ السطر `::panel{…}` إطارًا؛ ويمتد سيناريو الإطار إلى سطر `::panel` التالي أو إلى سور الإغلاق. والإطار الذي لا `art` له يُرسم فارغًا بلون خلفيته، وبهذا يُصنع إطار لا يحمل إلا نصًا. والنص الواقع قبل أول `::panel` يُكتب تعليقًا سرديًا في الإطار الأول ويُبلَّغ عنه بوصفه `comicStrayText`.

| السمة | الأثر |
| --- | --- |
| `art=<id>` | رسم الإطار: معرّف مورد من نوع bitmap أو SVG. والمعرّف غير المعروف يترك الإطار فارغًا ويبلغ عن `comicUnknownArt`. |
| `fit=cover`، `fit=contain` | `cover` يقصّ الرسم ليملأ الخانة، ولا يقصّ أبدًا داخل منطقته الآمنة؛ و`contain` يعرضه كاملًا، مع أشرطة بلون خلفية الإطار. إن لم يُحدَّد: قيمة نمط الإطار (`cover`). |
| `focus="70% 40%"` | النقطة من الرسم التي تبقى في الوسط حيث تترك المنطقة الآمنة مجالًا للاختيار. |
| `style=…` | نمط إطار مسمّى لهذا الإطار. |
| `border=none`، `border=0.5mm` | بلا حدّ، أو حدّ بذلك السُّمك. |
| `bg=#1b1b2f` | خلفية الإطار: لون، أو معرّف في لوحة الألوان، أو `none`. |
| `bleed`، `bleed="top start"`، `bleed=false` | انظر [النزف](https://postext.dev/ar/docs/comics.md#النزف). |
| `pad="…"` | انظر [الحشو والإطارات الداخلية](https://postext.dev/ar/docs/comics.md#الحشو-والإطارات-الداخلية). |
| `inset="x y w h"` | ضع هذا الإطار فوق الإطار السابق بدل أن تعطيه خانة. |
| `pop=<id>` | قطعة مفرّغة تُرسم فوق الحدّ (انظر [الرسوم الخارجة من الإطار](https://postext.dev/ar/docs/comics.md#الرسوم-الخارجة-من-الإطار)). |
| `mirror`، `mirror=false` | اعكس رسم هذا الإطار، أو أبقه كما رُسم حين تعكس الصفحة رسومها (انظر [اتجاه القراءة](https://postext.dev/ar/docs/comics.md#اتجاه-القراءة)). |
| `alt="…"` | البديل النصي للإطار، في PDF الموسوم وHTML وEPUB. إن لم يُحدَّد: `altText` الخاص بالمورد. |
| `id=…` | معرّف للإطار، يستعمله مُخرَجا HTML وEPUB مرساةً. |

### قص الرسم على خانته

يُرسم رسم الإطار دون اعتبار لشكل الخانة التي سيستقر فيها: فقد تُقسَّم الصفحة من جديد، أو يُسحب خط تقسيم، أو تحتاج ترجمةٌ صفًّا أطول. و**المنطقة الآمنة** للرسم (`Resource.safeArea`، انظر [صيغة المستند › المنطقة الآمنة](https://postext.dev/ar/docs/document-format.md#المنطقة-الآمنة)) تحدد ما يجب أن يبقى ظاهرًا، ويُحسب القصّ لكل خانة:

1. مع `fit=cover` تكون للنافذة الظاهرة نسبة أبعاد الخانة، وتكون أكبر ما يسمح به الرسم.
2. وتوضع بحيث تقع المنطقة الآمنة داخلها. وحيث يبقى مجال، تتوسط النافذة النقطة `focus` حين يحددها الإطار؛ وإلا قُصّت الهوامش الواقعة خارج المنطقة الآمنة بنسبة أحجامها، فيبقى الموضوع الواقع يسار المركز يسار المركز.
3. فإن لم تتسع أي نافذة بنسبة أبعاد الخانة للمنطقة الآمنة (خانة عريضة جدًا لموضوع طويل)، عُرض الرسم ومنطقته الآمنة كاملة، ومُلئ باقي الخانة بخلفية الإطار، وبلغت الصفحة عن `comicPanelLetterbox`. وتحتفظ الخانة بالمنطقة الآمنة لرسم أبعاده W × H كاملةً ما دام عرضها مقسومًا على ارتفاعها بين `sw·W/H` و`W/(sh·H)`، حيث `sw` و`sh` عرض المنطقة الآمنة وارتفاعها كسورًا.

الرسم الذي لا منطقة آمنة له يُقصّ حول مركزه، أو حول `focus`. وملف SVG الذي لا حجم ذاتيًا له يملأ الخانة كما هو. وتقصّ أدوات الرسم على مضلع الخانة وترسم الصورة كاملة بحجمها غير المقصوص، فلا يعيد القصّ أبدًا أخذ عينات الصورة.

### أنماط الإطارات

يأتي مظهر الإطار من `comics.panel` (حدّ أسود بسُمك 1 pt، وأرضية بيضاء، و`cover`)، ومن نمط مسمّى في `comics.panelStyles` تختاره الصفحة أو الإطار بـ `style=`، ومن `border` و`bg` الخاصين بالإطار. ويكون الحدّ `solid` أو `none` أو `rough`: خطًا مرسومًا باليد يهتز قليلًا، ويبقى هو نفسه في كل بناء، لأن اهتزازه مأخوذ من بذرة (seed) مشتقة من الإطار. وكل الحقول في [الإعدادات › القصص المصورة](https://postext.dev/ar/docs/configuration.md#القصص-المصورة).

### الرسوم الخارجة من الإطار

الحدّ المكسور، حيث تخرج شخصية أو شيء من إطاره، يحتاج إلى رسمين: رسم الإطار، مقصوصًا على الخانة كالعادة، وقطعة شفافة مفرّغة للجزء الذي يخرج، تُسمّى بـ `pop`. وتُقصّ القطعة المفرّغة وتوضع كما يوضع الرسم تمامًا (فينبغي أن يكون حجمها حجم صورة الرسم نفسه)، وتُرسم بعد الحدّ دون قصّ، فتغطي الحدّ والفاصل.

```md
::panel{art=gull-sky pop=gull-cutout bleed="top"}
sfx{at="70% 20%"}: كاااق
```

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

تحت كل سطر `::panel` يأتي سيناريو الإطار، فقاعة في كل سطر:

```md
key{attributes}: text
```

**المفتاح** معرّف متحدث (حروف وأرقام و`_` و`.` و`-`)، وهو نفسه في كل ترجمة؛ ويطابق نقاط الارتكاز على الرسوم و[الشخصيات](https://postext.dev/ar/docs/comics.md#الشخصيات). وثلاثة مفاتيح محجوزة: `caption` (مربع تعليق سردي)، و`sfx` (مؤثر صوتي، بلا فقاعة)، و`note` (ملاحظة المحرر). ويجوز أن تكون النقطتان الرأسيتان `：` كاملة العرض التي تكتبها طريقة الإدخال الصينية أو اليابانية. والنص Markdown مضمّن: `*emphasis*` و`**strong**` يُطبعان بالعريض المائل، كما جرى العرف في كتابة الحوار (وبالعريض وحده في الكتابات التي لا مائل فيها)، و`:tcy[12]` ينضّد الأرقام أفقيًا عبر العمود العمودي، و`:ruby` ينضّد قراءته بنصف الحجم فوق أساسه (وبجانبه في العمود)، و`:ltr` و`:rtl` يُبقيان مقطعًا على اتجاهه داخل فقاعة اتجاهها معاكس. والسطر المُزاح بمسافتين أو بعلامة جدولة يكمل الفقاعة التي فوقه (يُوصل بمسافة، ولا مسافة بين حرفين صينيين أو يابانيين)؛ والشرطة المائلة العكسية في آخر السطر تكسر نص الفقاعة هناك. وتُتجاهل الأسطر الفارغة، والسطر الذي ليس سطر حوار يُكتب تعليقًا سرديًا ويُبلَّغ عنه بوصفه `comicStrayText`.

```md
::panel{art=lh-radio}
tomas: جئتِ في وقتك.
  المذياع فقد صوته،\
  والعاصفة في الطريق.
biscuit{to="40% 70%"}: مررر؟
note: أجهزة المذياع ذات الصمامات تحتاج إلى دقيقة لتسخن قبل أن تتكلم.
```

سمات سطر الحوار:

| السمة | الأثر |
| --- | --- |
| `{whisper}`، `style=whisper` | نمط الفقاعة. الكلمة المجردة بين القوسين المعقوصين تسمّي نمطًا: `thought`، أو `whisper`، أو `shout`، أو `radio`، أو `inner`، أو أحد أنماط الكتاب الخاصة. والاسم غير المعروف يبلغ عن `comicUnknownBalloonStyle`، ويأخذ السطر نمط مفتاحه. |
| `at="62% 40%"` | ثبّت مركز الفقاعة عند تلك النقطة من رسم الإطار (أو من الخانة حين لا رسم للإطار). والنقطة كسور من الرسم، فتبقى في الموضع نفسه من الرسم مع القصّ وسحب خطوط التقسيم. |
| `at=top-start` | ضع الفقاعة في زاوية الإطار أو عند حافة منه: `top-start`، `top-end`، `bottom-start`، `bottom-end`، `top`، `bottom`. وتُلصق التعليقات السردية والملاحظات بالحدّ. |
| `to="40% 70%"` | وجّه الذيل إلى تلك النقطة من الرسم بدل نقطة ارتكاز المتحدث. يلتفت الذيل نحوها ويتوقف قبل أن يبلغها، كما يتوقف قبل الفم. |
| `tail=none`، `tail=start` | بلا ذيل، أو ذيل نحو متحدث خارج الإطار في تلك الجهة (`top`، `bottom`، `start`، `end`). والقيمة الافتراضية `tail=auto`. |
| `join`، `join=false` | صِل هذه الفقاعة بالفقاعة السابقة للمتحدث نفسه، أو أبقها منفصلة، أيًّا كان ما يقوله `comics.lettering.joinSameSpeaker`. |
| `break` | اسمح للفقاعة بأن تعبر حدّ الإطار إلى الفاصل أو إلى الإطار المجاور. ولا يُبلَّغ عن هذا العبور بوصفه فيضًا لأنه مطلوب؛ أما ما تغطيه الفقاعة في الجهة الأخرى (وجه، أو فقاعة إطار آخر) فيُبلَّغ عنه، ويبقى مركزها داخل إطارها. |
| `rotate=-8` | أدِر الفقاعة أو المؤثر الصوتي، بالدرجات، في اتجاه عقارب الساعة. |
| `skew=-8` | أمِل الحروف بهذا العدد من الدرجات (الموجب إلى الأمام كالخط المائل، والسالب إلى الخلف)، قبل أي دوران: لنص مكتوب على شيء يُرى من منظور، كعنوان على غلاف كتاب أو لافتة. ومع `rotate` يتبع الحرف الحافة العليا للشيء وجانبيه معًا. ويحدده نمط الفقاعة لكل أسطره بـ`skew`. |
| `size=1.5` | كبّر حروف المؤثر الصوتي أو صغّرها. |
| `color=#c0392b` | لون الكتابة: لون ست عشري أو معرّف في لوحة الألوان. |
| `font="…"` | خط هذا السطر. |
| `vertical`، `horizontal`، `mode=vertical` | اتجاه كتابة هذا السطر، مقدَّمًا على اتجاه الكتاب: `vertical` ينضّده في عمود في طبعة أفقية (`ドン` غير مترجمة)، و`horizontal` في سطر أفقي في طبعة عمودية (لافتة مكتوبة بالعرض). والعمود في كتاب بلغة أخرى يتبع قواعد نصه هو (قواعد اليابانية إن كان فيه كانا)، ويأخذ المسافة بين الأسطر التي للكتابة العمودية. وفي الكتاب العمودي يُنضَّد السطر الذي لا حروف صينية أو يابانية فيه أفقيًا على كل حال، إلا إذا قال `vertical`. |

### كيف تصنع الفقاعة

تتبع كتابة الحوار عادات كتّاب الحوار في القصص المصورة لا عادات إطار النص:

- **حجم واحد للكتاب.** تُنضَّد كل فقاعة بالخط `comics.lettering.fontFamily` وبالحجم `comics.lettering.fontSize` (7.5 pt افتراضيًا)، ولا يغيّره إلا `fontScale` في نمطها (الهمس 0.9، والصراخ 1.15). ولا يُصغَّر النص أبدًا ليتسع: الفقاعة التي لا تتسع يتغير شكلها، أو تتحرك، أو تعبر الحدّ، أو يُبلَّغ عنها.
- **النص أولًا، ثم الفقاعة.** تُكسر الكلمات أسطرًا أولًا، طلبًا لشكل المعيَّن: أسطر قصيرة في الأعلى والأسفل، وأطولها في الوسط، ولا سطر أخير أقصر كثيرًا من غيره، ولا سطر ينتهي بأداة تعريف أو حرف جر حين يكون كسر آخر بجودته. ثم يُرسم المحيط حول الأسطر، مع ترك الهواء نفسه من كل الجهات.
- **قواعد الدار.** تصير النقاط الثلاث علامة حذف (…)؛ وينضّد `textTransform: 'uppercase'` النص بالأحرف الكبيرة (وتُترك الكتابات التي لا حالة لأحرفها كما هي، وتصير ß الألمانية SS)؛ وفي اليابانية والصينية تُحذف النقطة التي تنهي الفقاعة (`dropFinalStop`)، وتصير `!` و`?` من ASCII صيغتيهما كاملتي العرض في الأعمدة، واثنتان منهما في خانة واحدة (`!?` تصير ⁉)؛ ويكتب `doubleDash` الشَّرطة الطويلة `--`، كما تفعل القصص الأمريكية.
- **الموضع.** توضع فقاعات الإطار بترتيب القراءة داخله، على بعد `comics.lettering.inset` من حدّه (1.5 mm). وتقع الأولى نحو الأعلى في جهة البداية، ولا ينبغي أن تعلو كل فقاعة تالية على التي قبلها إلا إذا تقدمت عليها في اتجاه القراءة. وتبتعد الفقاعات عن الوجوه ومناطق التجنّب التي تعلّمها الرسوم، وعن أفواه المتحدثين، وبعضها عن بعض، وتقع فوق متحدثها أو بجانبه لا تحته، ولا ينبغي أن تتقاطع ذيولها. وتوضع أولًا التعليقات السردية والملاحظات التي لها زاوية، ثم الفقاعات المثبَّتة، ثم الباقي. والموضع حتمي: الصفحة نفسها تعطي دائمًا الفقاعات نفسها.
- **داخل الورقة.** لا تتجاوز كتابة الحوار حدّ القص أبدًا. وفي الإطار النازف تبقى الفقاعات في الجزء من الإطار الواقع داخل الإطار العام، حيث لا يبلغها القص؛ ولا يدخل منطقة النزف بجانب إطاره إلا مؤثر صوتي مثبَّت بـ `at=` أو موسوم بـ `break`.
- **حين لا تتسع.** الفقاعة التي لا يمكن وضعها وضعًا نظيفًا يجوز لها أولًا أن تعبر الحدّ (مع `break` فقط)، ثم أن تغطي منطقة تجنّب (ولا تغطي وجهًا أبدًا)، ثم أن تأخذ شكلًا أعرض أو أضيق. والسطر الطويل في خانة ضيقة يُنضَّد بعرض الخانة تقريبًا ويطلّ على الفاصل، بدل أن يقف عمودًا رفيعًا فوق وجه المتحدث. فإن بقيت تتداخل مع شيء وُضعت حيث يكون ضررها أقل، وبلغت الصفحة عن `comicBalloonOverflow`، مسمّيةً الإطار وما تغطيه الفقاعة. والعبور المطلوب، بـ `break` أو بتثبيت `at=`، ليس من هذه الأخطاء: فلا يسمّي التحذير حينئذ إلا ما تغطيه الفقاعة. ويحلّ المشكلةَ سطرٌ أقصر، أو إطار أكبر، أو تثبيت بـ `at=`.

### الذيول

ذيل فقاعة الكلام يتجه إلى فم المتحدث، وفقاعات ذيل فقاعة التفكير تتجه إلى رأسه (انظر [المتحدثون ونقاط الارتكاز](https://postext.dev/ar/docs/comics.md#المتحدثون-ونقاط-الارتكاز)). يخرج الذيل من المحيط في الجهة المقابلة للمتحدث، وينحني قليلًا، ويتوقف قبل الفم. وحين تقع نقطة ارتكاز المتحدث خارج الإطار بعد القصّ، أو لا يعلّم الرسم نقطة لذلك المتحدث، يتجه الذيل إلى خارج الإطار، نحو نقطة الارتكاز أو نحو أقرب حدّ، وينتهي عند الحدّ. وتقع هذه الفقاعة بجانب الحدّ الذي يأتي منه الصوت، بذيل قصير: فالذيل الممتد عبر الإطار كله يُقرأ سهمًا، ولذلك تتحرك الفقاعة بدل أن يطول الذيل. ويوجّه `to="x% y%"` الذيل إلى نقطة أخرى من الرسم، و`tail=start` (أو `top` أو `bottom` أو `end`) إلى متحدث خارج الإطار من تلك الجهة. ولا ذيل للتعليقات السردية ولا للملاحظات ولا للمؤثرات الصوتية.

### الفقاعات الموصولة

السطران المتتاليان للمتحدث نفسه يُوصلان، كما تُكتب وقفة المتحدث: مع `joinSameSpeaker: 'butt'` (الافتراضي) يتداخل الجسمان ويتشاركان محيطًا واحدًا؛ ومع `'connector'` يصل بينهما عنق ضيق؛ ومع `'none'` تبقيان فقاعتين بذيلين. ولا ذيل إلا للفقاعة الأولى من المجموعة. ويمكن لسطر أن يطلب ما يريد بـ `join` أو `join=false`.

### المؤثرات الصوتية

لا فقاعة لسطر `sfx`: يُنضَّد نصه كبيرًا (2.4 ضعف حجم كتابة الحوار)، عريضًا، بخط المؤثرات الصوتية الخاص بلغة المستند، مع هالة بيضاء حول الحروف ليُقرأ فوق الرسم. ويوضع قرب نقطة `sfx` في الإطار حين يعلّم الرسم واحدة (نقطة ارتكاز معرّفها `sfx`)، وإلا فحيث لا يغطي وجهًا. ويغيّره `rotate` و`size` و`color` و`font`، ويثبّته `at`. وفي الكتابة العمودية يُنضَّد في عمود لا يزيد على خمسة حروف. وتُرسم المؤثرات الصوتية بعد كل فقاعات الصفحة.

ويمكن للسطر أن يحدد اتجاه كتابته بنفسه. فالطبعة الأفقية من مانغا تُبقي مؤثرًا صوتيًا باليابانية تنضّده في عمود:

```md
sfx{vertical size=2.6 font="Dela Gothic One"}: ドン
```

### إعدادات كتابة الحوار

يحمل `comics.lettering` الخط والحجم والمسافة بين الأسطر واللون وقواعد الدار للكتاب كله. ويتبع الخط افتراضيًا لغة المستند، وكذلك خط المؤثرات الصوتية:

| اللغة | كتابة الحوار | المؤثرات الصوتية |
| --- | --- | --- |
| اللاتينية واليونانية والسيريلية وسائر الكتابات | Comic Neue | Bangers |
| اليابانية | Zen Antique | Dela Gothic One |
| الصينية المبسطة | Noto Sans SC | ZCOOL KuaiLe |
| الصينية التقليدية | LXGW WenKai TC | LXGW WenKai TC |
| العربية والفارسية والأردية | Playpen Sans Arabic | Lalezar |

كلها في Google Fonts وتُحمَّل باسمها كأي خط آخر. ومع ارتفاع السطر الافتراضي، تُنضَّد الفقاعات العمودية والصينية واليابانية بمسافة 1.5 بين الأسطر، والعربية بمسافة 1.45. ولا تُمال كتابة الحوار اليابانية والصينية والعربية أبدًا، أيًّا كان ما يقوله النمط، ولا يُباعَد بين حروف العربية أبدًا.

### الشخصيات

يسرد `comics.cast` الشخصيات: معرّف (مفتاح المتحدث)، و`name`، واختياريًا نمط الفقاعة الذي تتكلم به (`balloonStyle`، كروبوت يتكلم دائمًا بـ `radio`)، ولون النص `color` وتعبئة الفقاعة `fill` اللذين يميزانها، و`fontFamily`. والاسم هو ما تعلنه المخرجات: يطبع عارض HTML وكتاب EPUB المتدفق «الاسم: الكلمات» لكل سطر. والمتحدث الموجود في قائمة الشخصيات لا يُبلَّغ عنه أبدًا بأنه غير معروف.

```ts
comics: {
  cast: [
    { id: 'maya', name: 'مايا' },
    { id: 'tomas', name: 'الجد توماس' },
    { id: 'beacon', name: 'المنارة', balloonStyle: 'radio', fill: { hex: '#e8f4ff', model: 'hex' } },
  ],
}
```

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

نمط الفقاعة نوعٌ من الفقاعات: محيطها وذيلها وكتابتها. وفي Postext تسعة أنماط مدمجة، ويسمّي سطر الحوار أحدها بكلمة مجردة بين قوسين معقوصين (`ben{whisper}: …`). وتأخذ المفاتيح المحجوزة أنماطها من أسمائها (`caption:` و`sfx:` و`note:`)، وكل سطر آخر يأخذ `speech`، أو `balloonStyle` الخاص بمتحدثه في قائمة الشخصيات.

| النمط | المحيط | الذيل | سوى ذلك |
| --- | --- | --- | --- |
| `speech` | بيضاوي | منحنٍ | أساس كل الأنماط: تعبئة بيضاء، ومحيط أسود بسُمك 0.6 pt، وهواء 0.55 em. |
| `thought` | سحابة | فقاعات | تتجه الفقاعات إلى الرأس لا إلى الفم. |
| `whisper` | بيضاوي متقطّع | منحنٍ | النص بحجم 0.9. |
| `shout` | انفجار | إسفين | النص بحجم 1.15، عريضًا؛ والمحيط 0.8 pt. |
| `radio` | كهربائي (متعرّج) | متعرّج | صوت من مذياع أو هاتف أو آلة. |
| `caption` | مستطيل | بلا | أصفر شاحب، ملاصق لزاوية أعلى البداية، ونصه محاذى إلى البداية. |
| `inner` | صندوق مدوّر الزوايا | بلا | تعبئة رمادية، مائل: الصوت الداخلي للشخصية. |
| `note` | مستطيل | بلا | ملاصق لزاوية أسفل النهاية، والنص بحجم 0.8. |
| `sfx` | بلا | بلا | النص بحجم 2.4، عريضًا، بخط المؤثرات الصوتية، مع هالة بيضاء بسُمك 1.5 pt. |

يغيّرها `comics.balloonStyles` ويضيف إليها. فالمدخل الذي يحمل معرّف نمط مدمج يُطبَّق فوق ذلك النمط؛ والمدخل الذي يحمل معرّفًا جديدًا يبدأ من `speech`:

```ts
comics: {
  balloonStyles: [
    { id: 'caption', fill: { hex: '#ffffff', model: 'hex' }, textTransform: 'uppercase' },
    { id: 'shout', burstPoints: 18, burstDepth: 0.3 },
    { id: 'eerie', shape: 'wavy', stroke: { hex: '#5b4a8a', model: 'hex' }, italic: true },
    { id: 'writing', shape: 'none', tail: 'none', fontFamily: 'Caveat', color: { hex: '#3b2a1a', model: 'hex' } },
  ],
}
```

```md
ghost{eerie}: غادروا هذا البيت…
caption{at=bottom-end}: على بعد ثلاثة شوارع.
```

المحيطات هي `oval` (قطع ناقص فائق (superellipse) يُلاءَم مع الأسطر، `roundness` قيمته 2.2)، و`rounded`، و`rectangle`، و`cloud` (أقواس تُحسب من المحيط)، و`burst` (رؤوس عددها `burstPoints` وعمقها `burstDepth`)، و`wavy`، و`electric`، و`none`. ويرسم `dash` محيطًا متقطّعًا، و`double` محيطًا مزدوجًا، و`wobble` (من 0 إلى 1) يهزّه كأنه مرسوم باليد، بالطريقة نفسها دائمًا للفقاعة نفسها. والذيول هي `curved` و`wedge` و`bubbles` و`zigzag` و`none`. وكل حقل بقيمته الافتراضية موجود في [الإعدادات › القصص المصورة](https://postext.dev/ar/docs/configuration.md#القصص-المصورة).

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

## المتحدثون ونقاط الارتكاز

تتجه الذيول إلى الأشخاص وتبتعد الفقاعات عن الوجوه لأن الرسوم تقول أين هؤلاء الأشخاص. فيمكن لمورد من نوع bitmap أو SVG أن يحمل **نقاط ارتكاز**: نقطة لكل متحدث، تُكتب مرة واحدة، بكسور من الرسم (من 0 إلى 1 من زاويته العليا اليسرى)، كالمنطقة الآمنة.

```ts
const arrive: Resource = {
  id: 'lh-arrive', typeId: 'figure', kind: 'bitmap', createdAt: 0, updatedAt: 0,
  bitmap: { fileId: 'lh-arrive.jpg', format: 'jpeg', width: 1100, height: 733 },
  altText: 'فتاة بمعطف مطر أصفر تصعد دربًا ساحليًا نحو منارة.',
  safeArea: { x: 0.2, y: 0.08, width: 0.42, height: 0.82 },
  anchors: [
    { id: 'maya', x: 0.29, y: 0.52, head: { x: 0.27, y: 0.47 }, face: { x: 0.22, y: 0.42, width: 0.12, height: 0.16 } },
    { id: 'biscuit', x: 0.4, y: 0.68 },
  ],
  avoid: [{ x: 0.51, y: 0.09, width: 0.1, height: 0.43 }], // المنارة
};
```

- `id` هو مفتاح المتحدث الذي يستعمله السيناريو (`maya: …`). ونقطة الارتكاز التي معرّفها `sfx` تحدد موضع المؤثرات الصوتية في الإطار.
- `x` و`y` هما الفم، حيث يتجه ذيل فقاعة الكلام.
- `head` هو حيث تتجه فقاعات ذيل فقاعة التفكير. إن لم يُحدَّد: الفم.
- `face` مستطيل لا تغطيه أي فقاعة. ونقطة الارتكاز التي ليس لها وجه تأخذ صندوق حماية بمقدار بضعة em فوق الفم وحوله، فتبقى الفقاعات بعيدة عن وجه لم يُحدَّد.
- `avoid` (في المورد) يسرد مستطيلات أخرى لا تغطيها أي فقاعة: يد، أو شيء أساسي في المشهد، أو لافتة. وتحت الضغط يجوز للفقاعة أن تغطي منطقة تجنّب، ولا يجوز أبدًا أن تغطي وجهًا.

ولأن نقاط الارتكاز كسور من الرسم، فهي تتحرك مع القصّ: يحوّل المحرّك كل نقطة عبر قصّ الإطار وانعكاسه إلى الصفحة، فلا يُبعد سحبُ خط تقسيم أو تقسيمٌ آخر أو ترجمةٌ ذيلًا عن متحدثه أبدًا. ونقطة الارتكاز التي يتركها القصّ خارج الإطار تجعل الذيل يتجه إلى خارج الإطار نحوها. والمنطقة الآمنة تحمي نقاط الارتكاز من ذلك: فالنقطة الواقعة خارجها يُبلَّغ عنها بوصفها `comicAnchorOutsideSafeArea`، وهو تنبيه للمؤلف، لأن القصّ قد يقطعها. ومفتاح المتحدث الذي لا يعلّمه أي رسم في الصفحة ولا يسمّيه أي مدخل في قائمة الشخصيات يُبلَّغ عنه بوصفه `comicUnknownSpeaker`، وهذا يكشف عادةً معرّفًا أخطأ كاتبه في تهجئته؛ أما الصفحات التي لا تعلّم رسومها أي نقطة ارتكاز فلا يُبلَّغ عنها بشيء، فيمكن كتابة حوار قصة مصورة دون نقاط ارتكاز.

نقاط الارتكاز ومناطق التجنّب تنتمي إلى الرسم، وهي واحدة في كل لغة. وفي Sandbox تُعلَّم في محرّر الصورة في [لوحة الموارد](https://postext.dev/ar/docs/sandbox.md#لوحة-الموارد): يفتح الحقل **المنطقة الآمنة وكتابة الحوار** نافذة فيها ثلاثة أوضاع: المنطقة الآمنة، والشخصيات، ومناطق التجنّب. النقر على الرسم يضيف متحدثًا هناك؛ ويُسحب فمه ورأسه ووجهه إلى مواضعها ويُكتب معرّفه بجانبه؛ والسحب على جزء فارغ من الرسم يرسم منطقة تجنّب. ويمكن تحريك كل علامة بمفاتيح الأسهم (ومع Shift بخطوات أكبر) وحذفها بـ Delete، وللنافذة سجلّ تراجع خاص بها.

## الشرائط المصورة

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

```md
:::strip{split="* | * | * | *" aspect=4 span=page placement=top}
::panel{art=pip-1}
pip: أوتو، الجليد يذوب.
::panel{art=pip-2}
otto{thought}: ليس المخبز…
::panel{art=pip-3}
::panel{art=pip-4}
sfx: بلااااش
:::
```

| السمة | الأثر |
| --- | --- |
| `span=column`، `span=page` | يمتد على العمود الذي يقع فيه (الافتراضي) أو على منطقة النص. |
| `placement=here` | الافتراضي: يُنضَّد في النص حيث كُتب. لا ينقسم الشريط أبدًا؛ والشريط الذي لا يتسع ينتقل كاملًا إلى العمود أو الصفحة التالية، آخذًا معه العنوان الذي فوقه مباشرة. والشريط بعرض الصفحة المكتوب `here` في صفحة من عدة أعمدة يقطع الأعمدة حيث يقع، كما يفعل الصندوق الممتد بعرض الصفحة: ينتهي النص الذي فوقه على ارتفاع واحد في كل الأعمدة، ويمتد الشريط عبر الصفحة، ويستأنف النص في الأعمدة تحته. وحين لا يتسع له ما بقي من الصفحة، يفتتح الصفحة التالية. |
| `placement=top`، `bottom`، `auto` | يعوم كالشكل إلى رأس أول صفحة فيها متسع أو إلى أسفلها، من هذا الموضع فصاعدًا. |
| `width=60%`، `width=12cm` | عرض الشريط: نسبة من العرض الذي يمتد عليه (العمود، أو منطقة النص مع `span=page`) أو طول (والعدد المجرد بالمليمترات). ولا يتجاوز ذلك العرض أبدًا. وإن لم يُحدَّد، أخذ الشريط العرض كله. |
| `align=start`، `center`، `end` | موضع الشريط الأضيق داخل العرض الذي يمتد عليه. والافتراضي `center`. ويتبع `start` و`end` اتجاه النص: البداية هي الحافة اليمنى في الصفحة التي تُقرأ من اليمين إلى اليسار، وأعلى العمود في الصفحة العمودية. |
| `height=4cm` | ارتفاع الشريط (والعدد المجرد بالمليمترات). |
| `aspect=4`، `aspect=4/1` | العرض مقسومًا على الارتفاع، والعرض هنا عرض الشريط نفسه. إن لم يُحدَّد، أخذ الشريط النسبة التي تجعل إطاراته مربعة (أربعة إطارات في صف: 4). |
| `caption="…"` | تعليق تحت الشريط (أو فوقه، مع `captionStyle.position: 'above'`)، يُنضَّد بعرض الشريط في نمط تعليقات الأشكال. ونصه Markdown مضمّن، يُكتب بلغة كل إصدار. |
| `type=figure` | يرقّم الشريط ذا التعليق موردًا من ذلك النوع: يبدأ التعليق بتسمية النوع ورقمه («شكل 3.»)، ويُعدّ الشريط في تسلسل ذلك النوع، بترتيب القراءة مع موارد النوع. ومن دون `type`، أو مع نوع لا يطابق أي نوع موارد، يبقى التعليق بلا تسمية ولا يُعدّ الشريط. |
| `id=…` | يسمّي الشريط المرقّم: تطبع `:ref{id="…"}` تسميته ورقمه، كما تفعل مع الشكل، وتربط إليه. |

الشريط الذي لا `split` له يضع إطاراته جنبًا إلى جنب. وصندوق الشريط هو إطاره العام: الفواصل وأنماط الإطارات وكتابة الحوار هي التي في الإعدادات، ولا نزف فيه. والشريط الأطول من العمود يُصغَّر إلى العمود، بتعليقه. وبعده يستأنف النص عند السطر التالي من شبكة خطوط الأساس، مع المسافة التي يطلبها `layout.inlineResourceGap`، كما بعد الشكل المضمّن. وفي الصفحة العمودية يُخرَج الشريط في صندوقه المُدار، فتجري يونكوما `* / * / * / *` مع `aspect=0.25` نزولًا في عمود عمودي، ويتبعها تعليقها عمودًا من النص.

```md
:::strip{split="* | * | *" width=70% caption="بيب وأوتو على الجليد." type=figure id=pip-ice}
::panel{art=pip-1}
::panel{art=pip-2}
::panel{art=pip-3}
:::

كما يُظهر :ref{id="pip-ice"}، كان الجليد رقيقًا.
```

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

في VDT يكون الشريط كتلة من `type: 'resource'` لها حقل `comic` وليس لها `resourceBlock`؛ وإحداثياته نسبية إلى صندوق الكتلة على الورقة، والشريط الأضيق، أو الذي تحت تعليقه، يقع داخل ذلك الصندوق (فلا يبدأ `comic.frame` عندئذ من زاويته). والتعليق هو أسطر الكتلة نفسها (`lines`)، منضّدة بخطوط التعليق وألوانه، ويقول `stripCaption` أيّ الأسطر هي، وأين تقع، والنوع والرقم، والخلفية الملوّنة. وتعطي `pageComics(page)` قصة الصفحة المصورة وأشرطة أعمدتها وعناصرها العائمة، منقولة كلها إلى الورقة.

## الصفحات المزدوجة

يمدّ `:::page{spread}` شجرة تقسيم واحدة على صفحتين متقابلتين، لمنظر بانورامي أو معركة تحتاج إلى الكتاب المفتوح كله. والإطار العام هو منطقتا النص موصولتين عبر الكعب، بلا هامشيهما الداخليين؛ ويعمل التقسيم والفواصل والقصّ كما في الصفحة المفردة، ويجوز لإطار أو رسم أن يعبر الكعب.

```md
:::page{spread split="25 [* | * | *] / *" bleed}
::panel{art=market-1}
::panel{art=market-2}
::panel{art=market-3}
::panel{art=market-panorama}
caption: سوق السبت، من برج الساعة.
:::
```

تبدأ الصفحة المزدوجة في ظهر الورقة، أي الصفحة الزوجية، ليتقابل نصفاها: وتُضاف قبلها صفحة فارغة حين كانت القصة ستبدأ في وجه الورقة، وكذلك في أول الكتاب، حيث تقف الصفحة 1 وحدها. في الكتاب المجلّد على اليسار يكون ظهر الورقة هو الصفحة اليسرى؛ وفي الكتاب المجلّد على اليمين (العربية، واليابانية والصينية العموديتان، والقصة المصورة التي تُقرأ من اليمين إلى اليسار) يكون هو الصفحة اليمنى. وتحمل كل صفحة نصفها: الإطارات التي تبلغ جهتها، مقطوعة عند الكعب، ورسم الإطار الذي يعبر الكعب مرسومًا على الصفحتين. والإطارات النازفة تنزف من الرأس والذيل والحافتين الخارجيتين، ولا تنزف أبدًا عند الكعب. ولا يُكتب شيء في شريط عرضه 8 mm حول الكعب، حيث يبتلعه التجليد: والفقاعة المثبَّتة هناك تنزلق إلى الجهة الأقرب. وتقع كل فقاعة في الصفحة التي تحمل مركزها.

## اتجاه القراءة

تُقرأ القصة المصورة الغربية من اليسار إلى اليمين: الإطار الأول من الصف على اليسار. أما المانغا والقصص المصورة العربية فتُقرأ من اليمين إلى اليسار. ويقرأ Postext الاتجاه من `comics.readingDirection`:

- `'auto'` (الافتراضي): اتجاه لغة الطبعة. من اليمين إلى اليسار في المستند المكتوب من اليمين إلى اليسار، فتعكس الطبعة العربية صفحاتها؛ وفي المستند العمودي؛ وفي اليابانية والصينية التقليدية (`ja` و`zh-Hant` و`zh-TW` و`zh-HK` و`zh-MO`)، فتُقرأ الطبعة اليابانية لقصة غربية من اليمين إلى اليسار كما تُقرأ المانغا. وفي أي لغة أخرى، ومنها الصينية المبسطة والكورية (فالقصص المصورة الصينية والكورية تُقرأ اليوم من اليسار إلى اليمين)، هو الاتجاه الذي رُسمت له الرسوم، `comics.artDirection` (`'ltr'` افتراضيًا): والمانغا، مع `artDirection: 'rtl'`، تُقرأ من اليمين إلى اليسار في أي لغة.
- `'ltr'` أو `'rtl'` يفرض اتجاهًا واحدًا على الكتاب كله، والسمة `direction` في الصفحة تفرضه على تلك الصفحة.

ويتبع التجليدُ القصصَ المصورة. فمع `page.binding: 'auto'` يُجلَّد على اليمين الكتابُ الذي يُقرأ قسم `comics` فيه من اليمين إلى اليسار: تقف الصفحة 1 وحدها على يسار الكعب، وتُقرأ الصفحتان المتقابلتان `[3 | 2]`، وتقلب العارضات الصفحات نحو اليسار، ويطلب ملف PDF ترتيب الصفحات من اليمين إلى اليسار، ويعلن EPUB تقدّم الصفحات من اليمين إلى اليسار. ويحسم قسم `comics` الأمر للكتاب كله، فيُجلَّد الفصل الخالي من صفحات القصص المصورة كسائر الفصول؛ ولا يحرّك `direction` الخاص بصفحة ما الكعب. أما المستند الذي تأخذ صفحاته المصورة القيم الافتراضية، بلا قسم `comics`، فيحتفظ بتجليد نصه (ويكفي `comics: {}` ليُجلَّد بحسب اتجاه قراءة قصصه). ويبقى `page.binding: 'left'` أو `'right'` هو الغالب. انظر [التجليد](https://postext.dev/ar/docs/configuration.md#التجليد).

المصدر نفسه يعطي التخطيطين. فالصفحة التي تُقرأ من اليمين إلى اليسار ترتّب إطارات كل صف من اليمين، فيقع الإطار 1 في أعلى اليمين؛ وتنعكس معها القطوع المائلة، وكذلك الجهات المنطقية في `bleed` و`pad` وكلمات الزوايا (التعليق السردي في `top-start` يقع في أعلى اليمين). وتبقى الصفوف بترتيبها من الأعلى إلى الأسفل، ولا يتغير ترتيب قراءة السيناريو. وتنعكس قواعد كتابة الحوار أيضًا: تميل الفقاعة الأولى في الإطار إلى اليمين، ولا يجوز للتالية أن تعلو عليها إلا إذا كانت أبعد إلى اليسار.

لا تُعكس الرسوم ما لم يُطلب ذلك: يقلب `comics.mirrorArt: true` كل رسم في صفحة تُقرأ في اتجاه غير `artDirection`، وهو ما فعلته الطبعات الغربية من المانغا زمنًا طويلًا، ويُبقي `::panel{mirror=false}` الرسم كما رُسم (نص مرسوم داخل الرسم، أو مبارز يمسك سيفه بيمينه). وتتبع نقاط الارتكاز والمناطق الآمنة القلب. والأفضل عادةً ترك العكس معطّلًا: فترتيب الإطارات يتبع القارئ أصلًا، والرسم المقلوب يغيّر ما رسمه الفنان.

تتبع كتابة الفقاعات اللغة، لا ترتيب الإطارات. فمع `comics.lettering.writingMode: 'auto'` تُكتب اليابانية والصينية التقليدية في أعمدة عمودية تُقرأ من اليمين إلى اليسار، لا يزيد طول العمود على `maxColumnChars` حرفًا (8)، مع قواعد الكينسوكو اليابانية، والأرقام منضّدة أفقيًا عبر العمود بـ `:tcy`، وعلامات الترقيم بصيغها العمودية؛ والمستند المنضّد بالكتابة العمودية يكتب حواره عموديًا في أي لغة. وتُكتب الصينية المبسطة والكورية وكل اللغات الأخرى أفقيًا، ويفرض `'horizontal'` أو `'vertical'` أحدهما. وتُكتب العربية من اليمين إلى اليسار، مع الكلمات اللاتينية والأرقام في اتجاهها الخاص، دون إمالة أبدًا ودون مباعدة بين الحروف أبدًا.

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

الترجمة ملف Markdown فيه أسطر `:::page` و`::panel` نفسها ومفاتيح المتحدثين نفسها، وكلمات أخرى. أما الرسوم ومناطقها الآمنة ونقاط ارتكازها ومناطق تجنّبها، والتقسيمات والتثبيتات (نقاط `at=` كسور من الرسوم)، فمشتركة بين كل الطبعات. وكل طبعة تكتب حوارها بنفسها: يُقاس النص بلغته وخطه، ويُكسر أسطره الخاصة، وتُشكَّل كل فقاعة وتوضع من جديد حوله. وهذه الصفحة الأولى من المثال في طبعتها الإنجليزية:

```md
:::page{split="30 [30 | 20 | *] / *"}
::panel{art=lh-arrive}
caption: Every summer, Maya spent a week at the lighthouse.
maya: Grandpa! I'm here!
::panel{art=lh-radio}
tomas: Just in time. The radio's gone deaf,
tomas: and there's a storm on the way.
:::
```

ما يتغير من طبعة إلى أخرى ينتج عن `locale` في المستند: خطا كتابة الحوار والمؤثرات الصوتية الافتراضيان، والكتابة العمودية لليابانية والصينية التقليدية، والنقاط المحذوفة في الصينية واليابانية، والمسافة بين الأسطر، واتجاه الصفحة في الطبعة العربية. والنص أطول بنحو الخُمس في الإسبانية أو الفرنسية منه في الإنجليزية، وأقصر كثيرًا في الصينية أو اليابانية؛ وتكبر الفقاعات وتصغر معه، ويسمّي `comicBalloonOverflow` الإطارات التي تحتاج فيها ترجمةٌ إلى سطر أقصر أو إلى تثبيت. والمؤثرات الصوتية كلمات كغيرها: ترجمها، أو أبقِ الأصل وأضف تحته مؤثرًا صغيرًا ترجمةً له.

## إخراج القصص المصورة

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

- **Canvas.** تبويب Canvas في Sandbox وصفحات Folio ثلاثية الأبعاد والصور المصغّرة كلها ترسم عبر `renderPageToCanvas`.
- **PDF.** يرسم `postext-pdf` صفحات القصص المصورة بمحيطات متجهية وخطوط كتابة الحوار مضمّنة، وتُضمَّن رسوم SVG التي لها نسخة طباعة PDF (`svg.pdfFileId`) بتلك النسخة. ويعطي ملف PDF الموسوم كل صفحة قصة مصورة وسم `Div`، وكل إطار وسم `Figure` مع بديله النصي (`alt` الخاص بالإطار، وإلا `altText` الخاص بالمورد)، وكل فقاعة وسم `P` بعد شكل إطارها، بترتيب القراءة؛ والمؤثر الصوتي `Span` قيمة `/ActualText` فيه كلماته. والخلفيات والحدود والمحيطات عناصر زخرفية (artifacts). ويجتاز المُخرَج فحوص PDF/UA-1 في veraPDF.
- **HTML.** كل إطار عنصر `<figure>` يحمل SVG مضمّنًا (القصّ، والرسم، والحدّ، والقطعة المفرّغة) مع البديل النصي للإطار، وتليه فقاعاته عناصرَ `<p>` بترتيب القراءة. وتبدأ فقاعة الكلام باسم المتحدث في عنصر span مخفي بصريًا، فيسمع قارئ الشاشة «مايا: جدّي! لقد وصلت!»؛ ويُعلَن المؤثر الصوتي صورةً تسميتها كلماته. وعارض HTML في Sandbox، الذي عرض صفحاته عرض الشاشة وطولها طول التمرير، ينضّد صفحة القصة المصورة كصفحة الطباعة مصغّرة إلى منفذ العرض (`comics.viewerLeaf`)، ولا يعيد تدفقها أبدًا.
- **EPUB ثابت التخطيط.** الصفحات هي صفحات الكتاب المطبوع. ويحمل الكتاب أيضًا **تنقلًا بحسب المناطق** (`regions.xhtml`، EPUB Region-Based Navigation 1.0): منطقة `panel` لكل إطار بترتيب القراءة، وفقاعاته وتعليقاته السردية ومؤثراته الصوتية متداخلة فيها، فيستطيع نظام القراءة التنقل في الكتاب إطارًا إطارًا. ويتبع تتابع الصفحات اتجاه قراءة القصص المصورة. ويضيف الخيار `kindlePanelView: true` في `renderToEpub` ميزة Kindle Panel View: هدف نقر لكل إطار ونسخة مكبَّرة تملأ الشاشة، مع البيانات الوصفية التي يطلبها Kindle.
- **EPUB المتدفق.** صفحة القصة المصورة لا صفحة تحتفظ بها هناك، فيصير كل إطار رسمه، مقصوصًا تمامًا كما في الصفحة، تليه أسطره نصًا: «**مايا**: جدّي! لقد وصلت!»، والتعليقات السردية فقراتٍ، والمؤثرات الصوتية بالمائل.

يُرسم تعليق الشريط مع النص، كما يُرسم تعليق الشكل. وفي ملف PDF الموسوم يكون وسم `Caption` التابع لوسم `Div` الخاص بالشريط، ويُقرأ بعد إطاراته (وقبلها حين يُنضَّد فوق الشريط). وفي HTML وEPUB ثابت التخطيط وEPUB المتدفق يكون الشريط وتعليقه عنصر `<figure>` واحدًا، والتعليق عنصر `<figcaption>` فيه؛ وفي الصفحة العمودية أو التي تُقرأ من اليمين إلى اليسار، حيث تقع صورة الشريط فوق الورقة، يُبقي HTML التعليق في النص وحده.

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

في Canvas وصفحات HTML ووضع تحديد النص في Folio، يمكن تحرير صفحة القصة المصورة بالمؤشر، وكل تعديل يُكتب في ملف Markdown الخاص بالفصل (والتفاصيل في [دليل Sandbox](https://postext.dev/ar/docs/sandbox.md#تحرير-القصص-المصورة)):

- **خطوط التقسيم.** فوق الفاصل يصير المؤشر مؤشر تغيير الحجم. وسحبه يحرّك خط التقسيم؛ وعند الإفلات تُكتب النسبة المئوية الجديدة في قيمة `split` في الصفحة (وتُضاف السمة حين لا تكون للصفحة سمة)، ويُعاد إخراج الصفحة. ويثبّت Shift الخط على خطوات من 5%، ويحرّك Alt الطرف الأقرب وحده فيميل الخط، ولا تصير أي خانة أضيق من 5%. وفي أثناء السحب يُعلَّم الإطار الذي سيُعرض رسمه بأشرطة فارغة. وكل خط تقسيم هو أيضًا فاصل يقبل التركيز: تحرّكه مفاتيح الأسهم بنسبة 1% (و5% مع Shift)، ويكتب Enter الموضع، ويعيده Escape إلى مكانه.
- **الإطارات.** يقسم شريط أدوات صغير فوق الإطار ذلك الإطار بخط أفقي أو عمودي، مضيفًا بعده سطر `::panel` فارغًا للخانة الجديدة، أو يدمجه مع الإطار التالي: فيزول خط التقسيم، ويحتفظ الإطار المدموج برسم الإطار الأول وبسيناريو الإطارين.
- **الفقاعات.** سحب الفقاعة يثبّتها: يأخذ سطر حوارها `at="x% y%"` بنسب مئوية من رسم الإطار، والمجموعة الموصولة تتحرك كتلة واحدة. وفي أثناء الحركة تصير الفقاعة برتقالية حيث كانت ستغطي وجهًا أو منطقة تجنّب أو تخرج من إطارها، ويقول التلميح أيّها. وتحرّك مفاتيح الأسهم الفقاعة التي عليها التركيز بنسبة 1%، والنقر المزدوج على فقاعة مثبَّتة يزيل تثبيتها.
- **الذيول.** سحب طرف الذيل يكتب في السطر `to="x% y%"`، أي النقطة التي يتجه إليها الذيل؛ والنقر المزدوج على الطرف يزيلها، فيعود الذيل إلى متحدثه. ومن فقاعة عليها التركيز ينتقل T إلى ذيلها، وتحرّك مفاتيح الأسهم وجهته.
- **لوحة المفاتيح.** الإطار الذي عليه التركيز يُقسم بـ H (خط أفقي) أو V (خط عمودي)، ويُدمج مع الإطار التالي بـ M.
- **الشرائط المصورة.** تعمل كل الأدوات في كتل `:::strip` أيضًا، في عمود أو عائمة أو ممتدة عبر الصفحة، وأضيق من العرض الذي تمتد عليه أو تحت تعليق، وتكتب في سور الشريط نفسه.
- **الرسوم.** تُعلَّم المنطقة الآمنة للرسم ومتحدثوه ومناطق تجنّبه في لوحة الموارد (انظر [المتحدثون ونقاط الارتكاز](https://postext.dev/ar/docs/comics.md#المتحدثون-ونقاط-الارتكاز)).
- **الإعدادات.** في لوحة التصميم مجموعة **القصص المصوّرة**: اتجاه القراءة، والإطار العام والفواصل، والإطار الافتراضي وأنماط الإطارات، وكتابة النصوص، وأنماط الفقاعات، ولكل منها معاينة.
- **المحرّر.** يلوّن محرّر النص `:::page` و`::panel` وأسطر الحوار، وتسرد لوحة الفحوص تحذيرات القصص المصورة عند أسطرها.

## تحذيرات القصص المصورة

كل تحذير يسمّي السطر أو السمة التي يخصّها، وتسرده لوحة الفحوص في Sandbox هناك تحت العنوان المذكور في العمود الأول.

| التحذير | السبب | الحل |
| --- | --- | --- |
| تقسيم إطارات غير مقروء `comicSplitSyntax` | قيمة `split` لا تُقرأ كاملة: محرف شارد، أو `[` لا يُغلق، أو `/` و`\|` مخلوطان في قائمة واحدة، أو قائمة بين قوسين على محور أمّها. ويُستعمل الجزء المقروء؛ والقيمة التي لا يُقرأ منها شيء تعطي إطارًا واحدًا. | صحّح القيمة وفق [القواعد](https://postext.dev/ar/docs/comics.md#تقسيم-الصفحة): نوع واحد من الفواصل في كل قائمة، والأقواس لتغيير المحور. |
| أحجام الإطارات تتجاوز 100٪ `comicSplitOverflow` | مجموع أحجام قائمة واحدة يتجاوز 100%. فتُصغَّر، وتحتفظ كل `*` بـ 5%. | خفّض الأحجام، أو ضع `*` مكان أحدها. |
| عدد الإطارات لا يطابق الخانات `comicPanelCount` | في الصفحة أسطر `::panel` أكثر من خانات تقسيمها (فتُسقط الإطارات الزائدة)، أو أقل (فتبقى آخر الخانات فارغة). | أضف خانات إلى التقسيم أو احذف منها، أو أضف إطارات إلى السيناريو أو احذف منها. وسطر `::panel` الفارغ يعطي خانة فارغة عن قصد. |
| نص خارج سطر الحوار `comicStrayText` | نص قبل أول سطر `::panel`، أو سطر بلا `key:` لا يكمل السطر الذي فوقه. ويُكتب تعليقًا سرديًا. | ابدأ السطر بمفتاح (`caption:`، `maya:`)، أو أزِحه بمسافتين ليكمل الفقاعة التي فوقه. |
| نمط فقاعة غير معروف `comicUnknownBalloonStyle` | يسمّي السطر بين قوسيه نمطًا لا تعرّفه الأنماط المدمجة ولا `comics.balloonStyles`، وكثيرًا ما يكون خطأ في التهجئة (`{wisper}`). ويأخذ السطر نمط مفتاحه. | صحّح الاسم، أو أضف النمط إلى `comics.balloonStyles`. |
| رسم الإطار غير موجود `comicUnknownArt` | `art` أو `pop` في الإطار لا يسمّي أي مورد، أو يسمّي موردًا ليس صورة نقطية ولا SVG. ويُرسم الإطار فارغًا. | صحّح المعرّف، أو أضف الرسم إلى موارد الكتاب. |
| الرسم معروض كاملًا في إطاره `comicPanelLetterbox` | نسبة أبعاد الخانة بعيدة جدًا عن نسبة أبعاد الرسم: لا قصّ بهذا الشكل يحوي المنطقة الآمنة كلها، فيُعرض الرسم ومنطقته الآمنة كاملة، بين أشرطة بلون خلفية الإطار. | حرّك خط التقسيم ليعطي الخانة نسبة أخرى (يعلّم Sandbox هذه المواضع في أثناء السحب)، أو ارسم منطقة آمنة أصغر، أو استعمل رسمًا آخر. |
| نقطة المتحدث خارج المنطقة الآمنة `comicAnchorOutsideSafeArea` | تقع نقطة ارتكاز في الرسم خارج منطقته الآمنة، فقد يقطع القصّ المتحدث، ويتجه الذيل عندئذ إلى خارج الإطار. | وسّع المنطقة الآمنة لتشمل الفم، أو حرّك نقطة الارتكاز. ولا حاجة إلى إصلاح شيء إن كان المقصود أن يكون المتحدث خارج الإطار أحيانًا. |
| الفقاعة لا تتسع `comicBalloonOverflow` | بعد كل الحلول البديلة لا تزال فقاعة تغطي وجهًا، أو فقاعة أخرى، أو منطقة تجنّب، أو فمًا، أو تخرج من إطارها (ولا يُحسب العبور المطلوب بـ `break` أو بتثبيت `at=`). ويسمّي التحذير الإطار وما تغطيه. وفي أثناء سحب فقاعة في Sandbox يظهر الوجه أو منطقة التجنّب التي ستغطيها، أو الحدّ الذي ستتجاوزه، قبل الإفلات. | اختصر السطر أو قسّمه سطرين، أو امنح الإطار مساحة أكبر، أو ثبّت الفقاعة بـ `at=`، أو اسمح لها بعبور الحدّ بـ `break`. ولا يُصغَّر النص أبدًا. |
| متحدث بلا نقطة `comicUnknownSpeaker` | مفتاح متحدث لا يعلّمه أي رسم في الصفحة بنقطة ارتكاز ولا يسمّيه أي مدخل في قائمة الشخصيات، وهو في الغالب مفتاح أُخطئ في تهجئته. وتتجه ذيوله إلى خارج الإطار. ولا يصدر إلا في الصفحات التي تعلّم رسومها نقاط ارتكاز؛ وهو للعلم فقط. | صحّح المفتاح، أو علّم المتحدث على الرسم، أو أضف مدخلًا في `comics.cast` لمتحدث لا يظهر أبدًا. |

تعود التحذيرات في `contentWarnings` الخاصة بالمستند مع نطاق المصدر للسطر أو السمة التي تخصّها (انظر [الإعدادات › التحذيرات في المستند](https://postext.dev/ar/docs/configuration.md#التحذيرات-في-المستند)).

إعداد القصص المصورة الذي يأخذ كلمة من بضع كلمات ويحمل كلمة أخرى، مثل `shape: 'ovl'` في نمط فقاعة أو `readingDirection: 'rlt'`، يُقرأ بقيمته الافتراضية، وتسرده لوحة الفحوص تحت **قيمة إعداد غير معروفة** (`unknownConfigValue`)، مع القيمة التي استعملها المحرّك والكلمة الأقرب إليها. والإعدادات التي تُفحص هي `readingDirection` و`artDirection`، و`borderStyle` و`fit` في نمط الإطار، و`writingMode` و`textTransform` و`dropFinalStop` و`joinSameSpeaker` في كتابة الحوار، و`shape` و`tail` و`target` و`position` و`align` و`textTransform` في نمط الفقاعة.

## في الشيفرة البرمجية

لا تحتاج القصة المصورة إلى أكثر من `buildDocument`: تحمل الموارد الرسوم مع مناطقها الآمنة ونقاط ارتكازها ومناطق تجنّبها، ويجوز أن تحمل الإعدادات `comics`. وتقيس كتابة الحوار نصها بالخطوط المحمَّلة، فيجب أن تُحمَّل خطوط كتابة الحوار قبل الإخراج، كأي خط آخر: تسرد `comicFontFamilies(config, markdown)` الخطوط التي تحتاج إليها القصص المصورة في المستند (خط كتابة الحوار، وخطوط كل أنماط الفقاعات وقائمة الشخصيات)، وتقول `markdownHasComics(markdown)` هل في النص صفحات قصص مصورة أو شرائط. وفي PDF يُطلب من مزوّد الخطوط هذه الخطوط كغيرها.

القصة المصورة بعد إخراجها موجودة في VDT: يحمل `page.comic` (`VDTComicPage`) الإطار العام، واتجاه القراءة، والإطارات بترتيب القراءة (المضلع، والحدّ، والخلفية، وقصّ الرسم في `art.source` و`art.box`)، وخطوط التقسيم (مع نطاق المصدر لقيمة `split` التي تكتب فيها)، والفقاعات (مسار المحيط، وكتل النص، ورأس الذيل، والنوع، والمتحدث). وتُصدَّر قواعد التقسيم للمحررات: تقرأ `parseComicSplit` و`serializeComicSplit` و`moveComicSplitLine` و`splitComicCell` و`mergeComicCells` قيمة `split` وتعيد كتابتها، محتفظةً بنجماتها `*` حيث تستطيع. وتحسب `comicArtCrop` و`comicCropFeasibleRange` القصّ، وتحوّل `comicArtPointToPage` نقطة من الرسم إلى الصفحة.

## حدود معروفة

- **أشجار التقسيم وحدها.** يقطع التقسيم كل خانة قسمين بخط يعبرها، فلا يمكن كتابة التخطيطات التي لا يعبر فيها أي خط الصفحة كلها، كدولاب من أربعة إطارات حول إطار خامس. والإطارات الداخلية والرسوم الخارجة من الإطار تغطي أغلب ما تُستعمل له تلك التخطيطات.
- **أشكال الإطارات.** الإطارات مضلعات محدّبة؛ أما الإطارات المستديرة أو المسنّنة أو المتلاشية بلا حدود، والرسوم المُدارة أو المكبَّرة، وخطوط السرعة، فتُرسم في الرسوم لا يرسمها Postext.
- **كتابة الحوار.** يُترك الروبي فوق أساس يُقرأ من اليمين إلى اليسار، وتُطبع التعليقات الأخرى نصًا عاديًا داخل الفقاعات. والموضع يُحسب لكل إطار على حدة: يُمنع تقاطع الذيول بالكلفة لا بتوجيه كل ذيل حول الآخر، ولا يُوازَن الانتقال من إطار إلى الذي يليه. والأسطر الطويلة في الخانات الصغيرة جدًا يُبلَّغ عنها ولا تُحلّ. وصندوق الحماية فوق الوجه غير المعلَّم يُقاس من الفم ومن نقطة الرأس (بضع وحدات em حين لا رأس لنقطة الارتكاز)، فقد يحمي في اللقطة القريبة الفم أكثر مما يحمي الوجه؛ فعلّم الوجه.
- **الشرائط المصورة** لا تمتد على عدد من الأعمدة أقل من أعمدة الصفحة (`columns=2` في صفحة من ثلاثة أعمدة)، ولا تُقرأ إلا في المستوى الأعلى من الفصل (لا داخل صندوق `:::callout` ولا جدول ولا حاشية). والاستشهاد في تعليق الشريط يُطبع كما كُتب.
- **الصفحات المزدوجة.** الإطار المدوّر الزوايا الذي يقطعه الكعب يفقد كل زواياه المدوّرة. والقصة المصورة التي تُقرأ من اليمين إلى اليسار في كتاب مجلّد على اليسار لا تزال تبدأ في الصفحة اليسرى، فيقع إطارها الأول في الصفحة الثانية من الصفحتين المتقابلتين.
- **الرسوم الخارجة من الإطار** تأخذ قصّ رسم الإطار، فيجب أن تكون القطعة المفرّغة بحجم صورة الرسم نفسه.
- **المخرجات.** البديل النصي الاحتياطي للإطار الذي ليس له `alt` ولا `altText` هو «Panel N»، بالإنجليزية. ويصف التنقل بحسب المناطق الإطاراتِ المائلة بصناديقها المحيطة. وتنسخ Kindle Panel View القصة المصورة في الصفحة مرة لكل إطار، مما يكبّر الملف، ولم تُفحص في Kindle Previewer.

## المصادر

- Nate Piekos، [*Comic Book Grammar & Tradition*](https://blambot.com/pages/comic-book-grammar-tradition) (Blambot): أنواع الفقاعات، والتعليقات السردية، والتوكيد، والشرطة المزدوجة.
- John Roshell وComicraft، [*Balloon Tales*](https://balloontales.com/creating-tails-and-joins/): الذيول والوصلات، و[طريقة الطبقات](https://balloontales.com/the-layer-method/) في الخطّ ثم التعبئة.
- Todd Klein، [*Digital lettering for comics*](https://kleinletters.com/Blog/digital-lettering-for-comics/).
- David Kurlander وTim Skelly وDavid Salesin، [*Comic Chat*](https://kurlander.net/DJ/Pubs/SIGGRAPH96.pdf)، SIGGRAPH 96: وضع الفقاعات بترتيب القراءة.
- IDPF، [*EPUB Region-Based Navigation 1.0*](https://idpf.org/epub/renditions/region-nav/epub-region-nav.html)، وAmazon KDP، [Kindle Panel View](https://kdp.amazon.com/en_US/help/topic/G9GSTY4LTRT39D4Z).
