الفصل 3.2 · الجزء II · الحرفة
الإعدادات: رؤوس الصفحات وتذييلاتها
ما يُطبع أعلى كل صفحة وأسفلها: نص بعناصر نائبة، وخطوط، وصناديق، وصور، بحسب زوجية الصفحة، وموضع كل عنصر
باختصار
تتناول هذه الصفحة ما يُطبع أعلى كل صفحة وأسفلها. يمكن أن يحمل رأس الصفحة أو تذييلها رقم الصفحة، أو عنوان الكتاب أو الفصل، أو خطًا، أو صندوقًا، أو صورة صغيرة. ويمكن أن تُظهر الصفحات اليمنى واليسرى أشياء مختلفة. ويوضع كل عنصر في اليسار أو الوسط أو اليمين، أو في الهامش بجانب النص. ويقع رأس الصفحة وتذييلها داخل الهوامش، فلا يُصغّران مساحة النص أبدًا.
#رؤوس الصفحات وتذييلاتها
تتحكّم الخاصيتان 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 | '' | سلسلة القالب. تدعم العناصر النائبة المدرجة أدناه، إضافة إلى : سمة مكتوبة في سطر H1 للفصل الحالي (# Title ). تتحوّل السمة الغائبة إلى سلسلة فارغة دون تحذير. السطر الجديد، أو الحرفان \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 المستند. تُقرأ مقاطع العربية والعبرية من اليمين إلى اليسار أيًّا كان الاتجاه الأساسي. النص الذي يحوي حرفًا عربيًا لا يُطبَّق عليه تباعد الحروف أبدًا (يُتجاهل 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…) هو المسافة بين خطوط الأساس: يضبط تباعدًا قدره 15.5 pt أيًّا كان الحجم. وأي قيمة أخرى (صفر، أو عدد سالب، أو بُعد مشوّه) تأخذ القيمة الافتراضية. حتى postext 1.4 كان Dimension هنا يجعل ارتفاع التصميم غير قابل للقياس: فلم تكن صفحة الافتتاح تحجز أي مساحة، ولا حتى minHeight، وكان المتن يجري تحت العنوان. |
letterSpacing | Dimension | 0 | التتبّع (tracking): مسافة إضافية بعد كل محرف، بما في ذلك المسافات، تمامًا كما يفعل letter-spacing في CSS. تزداد العروض المقيسة معه، فيبقى الصندوق التلقائي العرض محكمًا. وهو لا يغيّر الرسوم الحرفية أبدًا: تبقى الحروف المركّبة في الخط في Canvas وHTML وEPUB وPDF (حتى postext 1.27 كانت Canvas وHTML تُسقطانها من نص التصميم المتتبَّع، فيخرج أعرض مما قيس). والمقطع العبري يُتتبَّع كالنص اللاتيني؛ والنص الذي فيه حروف عربية وحده لا يُتتبَّع. يُستبعد التتبّع الذي يلي آخر محرف في السطر من محاذاته ومن الصندوق التلقائي العرض، فيتوسّط العنوانُ المتتبَّع الموسَّط على حروفه، وينتهي العنوان المحاذى لليمين عند الحافة، ويبلغ آخر حرف في السطر المضبوط الحافة (حتى postext 1.4 كانت تقع على بعد نصف وحدة تتبّع، أو وحدة كاملة، إلى اليسار، وكان العنصر المثبّت إلى يمين عنصر متتبَّع يبتعد عنه وحدة تتبّع إضافية). القيمة السالبة تُقرّب الحروف، فعنوان العرض بحجم 36 pt يأخذ غالبًا { value: -0.، وتنكمش العروض بالطريقة نفسها؛ وترسمه Canvas وHTML وPDF على النحو نفسه (حتى postext 1.4 كانت القيمة السالبة تُضبط على 0 دون تحذير). |
textTransform | 'none' | 'uppercase' | 'none' | تحويل حالة الحروف المطبّق على النص المحسوم، بما فيه العناصر النائبة: عنوان جزء مكتوب بالحروف الكبيرة في جدول المحتويات مثلًا. |
box | ElementBoxStyle | — | خلفية وحدّ اختياريان يُرسمان خلف النص: backgroundColor وborderColor وborderWidth وborderRadius، وpadding لكل جانب يوسّع الصندوق أبعد من النص (انظر عناصر الصندوق للاطلاع على الحقول). |
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 أو أقدم). أما الحرف الاستهلالي في النص الجاري فتضبطه أنماط الفقرات والعناوين (انظر الحروف الاستهلالية)، وتُقاس ارتفاعات حروفه الكبيرة من الخطوط نفسها. |
paragraphIndent | Dimension | 0 | إزاحة السطر الأول لكل فقرة بعد الأولى. يفصل بين الفقرات سطرٌ جديد في المحتوى، أو الحرفان \n في النص الآتي من قيمة سمة؛ وتُعدّ الأسطر الجديدة المتتالية سطرًا واحدًا. |
hyphenate | boolean | false | حين تكون true ويلتف النص (overflow: 'wrap'، أو dropCap الذي يلتف دائمًا)، تُقسَّم الكلمات الطويلة التي تظل تفيض بعد كسر السطر العادي عند حدود المقاطع (باستخدام لغة تقسيم الكلمات النشطة في المستند) مع واصلة مرنة عند موضع القطع. وفي النص المضبوط (align: 'justify') تُقطع أيضًا الكلمة التي لا تتسع لبقية السطر عند آخر حدّ مقطع يتسع، لملء السطر. |
inlineMarks | boolean | false | يقرأ النص المحسوم، بما فيه قيم العناصر النائبة، على أنه Markdown مضمّن: bold وitalic و^superscript^ و~subscript~. وحين يكون معطّلًا تُطبع العلامات كما كُتبت. وفي تصميم العنوان يحتفظ عندئذ بمقاطع العنوان نفسه العريضة والمائلة والعلوية والسفلية (Pneumocystis، CO~2~)، وتُهرَّب بقية محارفه لتُطبع كما كُتبت (منذ postext 1.19). انظر العلامات المضمّنة والخطوط المحيطية. |
stroke | { width, color?, hollow? } | — | خط محيطي يُرسم حول الحروف: width (قيمة Dimension متمركزة على حواف الحروف)، وcolor (الافتراضي: لون النص؛ والحرف الاستهلالي يأخذ لونه الخاص)، وhollow (true يرسم الخط المحيطي وحده). انظر العلامات المضمّنة والخطوط المحيطية. |
writingMode | 'horizontal-tb' | 'vertical-rl' | 'horizontal-tb' | يكتب 'vertical-rl' النص من الأعلى إلى الأسفل، والأسطر من اليمين إلى اليسار، والمحارف قائمة: ترويسة تنزل على الحافة الأمامية، أو عنوان عمودي بجوار فصل أفقي. انظر عناصر النص العمودي. |
reserve | boolean | true | لتصاميم العناوين فقط: هل يُحتسب العنصر ضمن الارتفاع الذي يحجزه العنوان في تدفق النص. false للزخرفة التي قد تقع تحت النص (ختم في أسفل الصفحة، أو إطار، أو شريط جانبي). انظر الارتفاع المحجوز. تتجاهله تصاميم رأس الصفحة والتذييل والأجزاء. |
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}. انظر عدد صفحات الكتاب أدناه.{title}،{subtitle}،{author}،{publishDate}: قيم تُقرأ منcontent.metadata. البيانات الوصفية المجهولة أو الفارغة تُرسم سلسلةً فارغة (وتثير تحذيرًا في Sandbox).{chapterTitle}: نص آخر H1 في الصفحة الحالية أو قبلها. يُتخطّى H1 الذي يضبط نمط عنوانهrunningChapter: false(لوحة مصوّرة، أو خريطة).{chapterTitleAtTop}،{chapterNumberAtTop}: عنوان الفصل الساري في أعلى الصفحة ورقمه، ويختلفان عن{chapterTitle}و{chapterNumber}في صفحة يبدأ فيها فصل جديد تحت نص آخر. انظر الفصل في أعلى الصفحة أدناه.{partTitle}،{partNumber}: عنوان الجزء الحالي ورقمه (آخر صفحة:::partفي الصفحة الحالية أو قبلها؛ والصفحات الفارغة المضافة للزوجية قبل صفحة الجزء مباشرةً تنتمي إليه). فارغان قبل الجزء الأول.{firstMark.<key>}،{lastMark.<key>}: الكلمة الدليلية الأولى والأخيرة في الصفحة: عنوان من مستوى ما (h1–h6) أو مدخل من نمط فقرة. انظر الكلمات الدليلية أدناه.
عدد صفحات الكتاب
يطبع {bookTotalPages} عدد صفحات الكتاب كله، وهو العدد الذي يراه القارئ في «الصفحة 12 من 348». يعدّ الصفحات المادية، بما فيها الفارغة، مثل {totalPages}، لكن عبر كل الفصول:
- المستند المُخرَج وحده (
buildDocumentبلاcontinuation) هو الكتاب كله:{bookTotalPages}يساوي{totalPages}. buildBundleيُخرج الكتاب، ويجمع صفحات كل الفصول، ثم يُخرجه مرة أخرى بذلك المجموع، فيطبع كل فصل العدد نفسه. لا يحرّك العدد أي فاصل صفحة أبدًا، فتكفي جولة إضافية واحدة لاستقراره؛ والإعدادات التي لا تطبع{bookTotalPages}لا تكلّف شيئًا.- Sandbox يسلّم كل فصل المجموعَ حالما تُعرف صفحات كل الفصول. وحتى ذلك الحين يطبع الفصل عدد الصفحات حتى نهايته هو. ويعدّ تصدير الكتاب كاملًا في تبويب PDF الصفحاتِ التي يُخرجها: فإذا طبع فصلٌ عددًا آخر، لأن صفحاته لم تكن معروفة بعد، أخرج الكتاب مرة أخرى بالعدد الذي بلغته الفصول.
- المضيف الذي يُخرج الفصول بنفسه يمرّر المجموع في
continuation.bookPageCount(للفصل الأول أيضًا). ومن دونه يعدّ{bookTotalPages}الصفحات حتى نهاية المستند (continuation.pageIndexOffsetمضافًا إليه صفحاته)، وهذا صحيح للفصل الأخير فقط.
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>} آخرها. الصفحة التي لا تبدأ فيها أي علامة (مدخل طويل مستمر) تطبع العلامة السارية، أي آخر علامة قبلها، في الحالتين. والصفحات التي تسبق أول علامة لا تطبع شيئًا؛ وفي كتاب مُخرَج فصلًا فصلًا يعني ذلك ما قبل أول علامة في الفصل، إذ لا تنتقل العلامات من فصل إلى الذي يليه. العنوان أو الفقرة المقسومة بين صفحات تُعلِّم الصفحة التي تبدأ فيها فقط. يُكتب المفتاح بعد النقطة من حروف وأرقام و_ و-، ويبدأ بحرف أو بـ_؛ والمفتاح المجهول لا يطبع شيئًا.
:::paragraphs{style="entry"}
**Aback.** Said of the sails when pressed back against the mast.
**Abaft.** Towards the stern, or behind a given point.
:::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-*يتبع الصفحة التي قبله (انظر ملكية الصفحات الفارغة)؛ وحين تبدأ الصفحة التي تلي صفحة فارغة للزوجية بنهاية فصل، لا بعنوان H1 له، تحتفظ الصفحة الفارغة بذلك الفصل أيضًا؛ - يُتخطّى عنوان H1 الذي له
runningChapter: false.
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 كلها على النص المعلَّم؛ ويحتفظ كل مقطع بلون العنصر.
{ "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" } } } }# 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 عند التفريغ).
{ "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-* من المتن، والعكس في التذييل (انظر إطار الحاوية أعلاه). لا يحرّك رأس الصفحة أو التذييل نص المتن أبدًا، ويُرسم فوقه، فالعنصر المدفوع إلى منطقة المتن يغطي النص. أما شريط صفحة الافتتاح فيُرسم على العكس تحت نص المتن؛ والمساحة التي يأخذها في التدفق موصوفة تحت الارتفاع المحجوز.
#عناصر النص العمودي
عنصر النص الذي له 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؛ وJLREQ §2.6 لليابانية):
| العُرف | الموضع | طريقة ضبطه |
|---|---|---|
| رأس وتذييل أفقيان | فوق منطقة النص وتحتها، كما في الكتب الأفقية؛ وهو الأكثر شيوعًا. | رأس الصفحة والتذييل كما هما. |
| الحافة الأمامية (أسلوب 中缝، وفي تايوان 邊峰) | نزولًا على الهامش الخارجي: عنوان الفصل أو الكتاب بدءًا من نحو أربعة محارف تحت رأس منطقة النص، ورقم الصفحة منتهيًا نحو خمسة محارف فوق أسفلها، بالأرقام الصينية، وبنحو 80 % من حجم المتن. | عنصران عموديان مثبّتان إلى 'outer'، كما أدناه. |
| الزاوية الخارجية السفلى | رقم الصفحة في أسفل الصفحة، في الزاوية الخارجية (قواعد تايوان لكتب 中式). | عنصر أفقي في التذييل عند 'bottom-left' مع parity: 'odd' وآخر عند 'bottom-right' مع parity: 'even' في كتاب مجلّد من اليمين (والعكس في كتاب مجلّد من اليسار). |
ترويسات الحافة الأمامية كما يضيفها Sandbox (الترويسة › ترويسات الحافة الخارجية (عمودية))، هنا لمتن بحجم 10 pt (يضبطها Sandbox بنسبة 80 % من حجم المتن):
{
"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' (انظر تموضع العناصر) هو الهامش الخارجي لكل صفحة، فيجري العنصران نزولًا على الحافة اليسرى للصفحة الفردية والحافة اليمنى للصفحة الزوجية في كتاب مجلّد من اليمين (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 | لتصاميم العناوين فقط: هل يُحتسب الخط ضمن الارتفاع الذي يحجزه العنوان في تدفق النص (انظر الارتفاع المحجوز). |
placement | ElementPlacement | مشتقة من align + marginFromBody + marginFromEdge | تموضع متقدم (انظر تموضع العناصر). يضبط 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 | لتصاميم العناوين فقط: هل يُحتسب الصندوق ضمن الارتفاع الذي يحجزه العنوان في تدفق النص (انظر الارتفاع المحجوز). |
#عناصر الصورة
يرسم عنصر image موردًا نقطيًا (bitmap) أو SVG من المستند: شعار ناشر في صفحة العنوان، أو علامة في ترويسة. يتحدد حجمه بـplacement.size: إذا تُرك أحد البعدين width / height بقيمة 'auto' (الافتراضية) تبع البعد الآخر نسبة أبعاد الصورة؛ وإذا ضُبط الاثنان، تُلاءم الصورة داخل الصندوق وتُوسَّط. والمورد الغائب أو الذي ليس صورة لا يرسم شيئًا.
{
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 | — | المرساة والإزاحة والحجم (انظر تموضع العناصر). الجانب الذي قيمته 'fill' يمتد حتى حافة الحاوية. |
parity, pages | كما سبق | 'all' | الصفحات التي تظهر فيها الصورة. |
reserve | boolean | true | لتصاميم العناوين فقط: هل تُحتسب الصورة ضمن الارتفاع الذي يحجزه العنوان في تدفق النص (انظر الارتفاع المحجوز). |
يُضمّن مُخرِج 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 هو نموذج التموضع الموحّد الذي يستخدمه كل نوع من العناصر (نص، وخط فاصل، وصندوق) داخل أي خانة تصميم: رأس الصفحة، أو تذييلها، أو خانة التصميم المتقدم لمستوى عنوان. وتصف التموضعَ ثلاثُ قطع من الحالة:
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' وللتقييد التلقائي للعرض، فيمكن أن يمتد شريط ملوّن من حافة إلى حافة بصرف النظر عن هوامش الصفحة:
{ "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" } } }مع تفعيل خطوط القص، يُقص كل ما يرسمه عنصر خارج صندوق النزف (انظر خطوط القص).
يثبّت anchor.to: 'outer' (في خانتي رأس الصفحة والتذييل) العنصر إلى الهامش الخارجي للصفحة: من حافة منطقة النص إلى حدّ القص في الجهة البعيدة عن الكعب، ومن رأس منطقة النص إلى أسفلها. ويقع على يمين الصفحة الفردية ويسار الزوجية في كتاب مجلّد من اليسار، والعكس في كتاب مجلّد من اليمين (page.binding)، فيخدم عنصر واحد الصفحتين المتقابلتين كلتيهما: ترويسة تنزل على الحافة الأمامية (انظر عناصر النص العمودي). وفي أي خانة أخرى يُقرأ على أنه 'container'. ويمكن أن يُكتب offset لعنصر نص بوحدة em، أي بوحدات em من fontSize الخاص به: أربعة محارف تحت رأس منطقة النص هي { "y": { "value": 4, "unit": "em" } }.
داخل خانة التصميم المتقدم لعنوان، لا تزيد العناصر المثبّتة إلى الصفحة أو النزف الارتفاعَ المحجوز للعنوان إلا إذا امتدت تحت الحافة العليا للعنوان (الشريط الممتد عبر أعلى الصفحة يقع خلف صفحة الافتتاح؛ والشريط الذي يبلغ ما تحت العنوان يدفع نص المتن إلى الأسفل). استخدم advancedDesign.minHeight لحجز ارتفاع ثابت لصفحة الافتتاح في كل الأحوال، وreserve: false في العنصر الذي لا ينبغي أن يدفع النص أبدًا. القواعد الكاملة تحت الارتفاع المحجوز.
لكل عنصر id ثابت (يعيّنه Sandbox تلقائيًا؛ ويمكنك أيضًا ضبطه يدويًا). وتشكّل العناصر المثبّتة إلى عناصر أخرى رسمًا بيانيًا صغيرًا للاعتماديات يحسمه المحرّك قبل القياس، فيمكن أن يتسلسل عنصر من آخر دون إحداثيات يدوية.
يُحلَّل الشكل القديم align + marginFromBody + marginFromEdge عند الإدخال ويُعاد كتابته تموضعًا وقت حسم الإعدادات، فتظل الإعدادات القائمة تعمل دون تغيير.