انتقل إلى المحتوى الرئيسي

الفصل 4 · الجزء II · الحرفة

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

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

آخر تحديث 2026-10-106 دقائقenescaptzhjaar

باختصار

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

#الصفحة

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

الخاصيةالنوعالقيمة الافتراضيةالوصف
sizePresetPageSizePreset'17x24'مقاس صفحة معرّف مسبقًا. اضبطه على 'custom' لاستخدام عرض وارتفاع صريحين.
widthDimension17 cmعرض الصفحة. يؤخذ من sizePreset عند إغفاله؛ والقيمة الصريحة تتقدّم دائمًا (استخدم sizePreset: 'custom' للمقاسات المخصّصة كليًا).
heightDimension24 cmارتفاع الصفحة. يؤخذ من sizePreset عند إغفاله؛ والقيمة الصريحة تتقدّم دائمًا.
marginsPageMargins2 cm لكل الجوانبالمسافة بين حافة الصفحة ومساحة المحتوى. يُضبط كل جانب (الأعلى والأسفل والأيسر والأيمن) على حدة. مع mirror: true تصبح الهوامش هوامش صفحات متقابلة: left هو الهامش الداخلي (جهة الكعب) وright هو الخارجي؛ تُبقي الصفحات الفردية (الصفحة 1 فردية) الهوامش كما كُتبت وتبدّلها الصفحات الزوجية، فتنتقل مساحة المحتوى، ومعها الأعمدة وأشرطة العناصر العائمة وحاويات الترويسة والتذييل وأشرطة صفحات الافتتاح، من جانب إلى آخر بين الصفحتين المتقابلتين. القيمة الافتراضية false. انظر أدناه.
backgroundColorColorValuetransparentلون خلفية الصفحة.
dpinumber300عدد البكسلات في البوصة الذي يعمل به الإخراج: به تُحوَّل الوحدات المادية (cm وmm وin وpt) إلى بكسلاته. والصورة النقطية التي ليست لها دقة خاصة بها تأخذ بكسلًا واحدًا من الإخراج لكل بكسل فيها، فتُطبع بهذا العدد من البكسلات في البوصة (ppi): أبقِه 300 للطباعة، أو أعطِ الصور دقة (Resource.bitmap.resolution، layout.bitmapResolution؛ انظر صيغة المستند › مقاس الصورة النقطية). ويفحص الفحص قبل الطباعة الدقة الفعلية لكل صورة.
cutLinesCutLinesConfigمعطّليُظهر علامات القص في زوايا الصفحة لقصّ المطبوع. عند تفعيله تتّسع اللوحة (Canvas) لتشمل مساحة النزف وعلامات القص. انظر أدناه.
baselineGridBaselineGridConfigمعطّليرسم شبكة خطوط الأساس فوق الصفحات لفحص الإيقاع العمودي. يلتزم الإخراج بالشبكة سواء رُسمت أم لم تُرسم. انظر أدناه.
binding'auto' | 'left' | 'right''auto'الحافة التي يُجلَّد الكتاب عندها. 'auto' تساوي 'right' حين تكون layout.writingMode هي 'vertical-rl'، أو حين يجري المستند من اليمين إلى اليسار (direction)، أو حين يُقرأ قسم comics فيه من اليمين إلى اليسار (مانغا، أو طبعة يابانية أو بالصينية التقليدية)، وإلا فهي 'left'. الكتاب المجلّد على اليمين يُفتتح بصفحة يسرى ويعكس هوامشه في الاتجاه المقابل. إعداد على مستوى الكتاب: لا يغيّره layout الخاص بنمط عنوان أبدًا. انظر التجليد.

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

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

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

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

#التجليد

«تُجلَّد المستندات الصينية المنضّدة عموديًا على الجانب الأيمن، وتُجلَّد المستندات المنضّدة أفقيًا على الجانب الأيسر» (clreq §7.1.1.1). يُخرج page.binding: 'right' الكتابَ للتجليد على الحافة اليمنى:

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

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

والكتاب المكتوب من اليمين إلى اليسار (العربية والفارسية والعبرية…) يُجلَّد على اليمين أيضًا: تعطي 'auto' الحافة اليمنى حين يُحسم direction الخاص بالمستند إلى 'rtl'. ويعكس مثل هذا الكتاب تدفقه كله كذلك، فيكون عموده الأول هو الأيمن، وتقع إزاحاته وعلامات قوائمه وعناصره العائمة وحواشيه على اليمين؛ أما خانات الترويسة والتذييل فتبقى في مواضعها المادية. انظر الإخراج العربي.

والقصة المصورة التي تُقرأ من اليمين إلى اليسار تُجلَّد على اليمين أيضًا: تعطي 'auto' الحافة اليمنى حين يكون في الإعدادات قسم comics يُحسم اتجاه قراءته إلى 'rtl'. وهذه حال المانغا (comics.artDirection: 'rtl') والطبعة اليابانية أو الصينية التقليدية لقصة مصورة غربية. ويحسم القسم الأمر للكتاب كله، لا كتل :::page في فصل واحد. انظر القصص المصورة.

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

المقاس المسبقالعرضالارتفاعالاستخدام الشائع
'11x17'11 cm17 cmكتب الجيب
'12x19'12 cm19 cmالكتب الورقية القياسية
'17x24'17 cm24 cmالكتب التقنية والكتب المدرسية
'21x28'21 cm28 cmالمجلات والتقارير (قريب من A4)
'broadsheet'375 mm597 mmصحف القطع الكبير
'berliner'315 mm470 mmصحف قطع برلينر
'tabloid'280 mm430 mmصحف التابلويد
'compact'297 mm420 mmصحف القطع المدمج (صحيفة القطع الكبير مطويةً إلى نصفين)
مقاسات الصفحة المسبقةأربعة مقاسات صفحة مسبقة مدمجة مرسومة بمقياس متناسب: الجيب 11x17، والورقي 12x19، والتقني 17x24، و21x28 cm القريب من A4.21×28 · ~A417×24 · مدرسي12×19 · ورقي11×17 · جيب21 cm28 cm
المقاسات المسبقة مرسومة بمقياس متناسب.

صيغ الصحف الأربع جديدة في postext 1.18 ولا تظهر في الرسم: مساحة صفحة القطع الكبير تقارب أربعة أضعاف مساحة صفحة 21 × 28. وتُنضَّد عادةً بـتخطيط 'multiple'؛ والشائع ستة أعمدة في القطع الكبير وخمسة في التابلويد.

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

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

الخاصيةالنوعالقيمة الافتراضيةالوصف
enabledbooleanfalseهل تُرسم خطوط الشبكة (في Canvas وفي PDF). الرسم فقط: الإخراج هو نفسه في الحالتين.
colorColorValue#ccccccلون خطوط الشبكة.
lineWidthDimension0.5 ptسماكة خطوط الشبكة.
page: {
  baselineGrid: { enabled: true, color: { hex: '#e0e0e0', model: 'hex' } }
}

#خطوط القص

عند التفعيل تتّسع اللوحة لتشمل مساحة نزف، ويرسم المحرّك علامات القص عند كل زاوية لأغراض الإنتاج الطباعي. ويعطي ملف PDF كل صفحة TrimBox وBleedBox؛ وملف PDF/X يحملهما حتى من غير علامات القص. وتُضبط في Sandbox من التصدير › التجهيز للطباعة.

الخاصيةالنوعالقيمة الافتراضيةالوصف
enabledbooleanfalseهل تُوسَّع اللوحة بمساحة النزف وتُرسم علامات القص.
bleedDimension3 mmمساحة إضافية حول الصفحة تُستخدم للنزف الطباعي.
markLengthDimension5 mmطول كل علامة قص.
markOffsetDimension3 mmالفجوة بين حدّ القص وبداية كل علامة قص. لا تبدأ العلامة أبدًا داخل النزف: حين يكون bleed أعرض، تبدأ العلامة عند حافة النزف.
markWidthDimension0.25 ptسماكة علامات القص.
colorColorValue#000000لون علامات القص في Canvas (المعاينة على الشاشة). أما ملف PDF فيطليها دائمًا بلون التسجيل (registration colour) (انظر أدناه).

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

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

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

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

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

الخاصيةالنوعالقيمة الافتراضيةالوصف
format'decimal' | 'lower-roman' | 'upper-roman' | 'lower-alpha' | 'upper-alpha'، أو أحد أنماط شرق آسيا'decimal'النمط العددي المستخدم في رسم تسميات الصفحات. أنماط شرق آسيا ('trad-chinese-informal' يرقّم الصفحات 一، 二، 三) مذكورة في صيغ كتابة أنماط الترقيم.
startAtnumber1القيمة العددية المسندة إلى الصفحة الأولى أيًا كان التنسيق. format: 'lower-roman', startAt: 1 تعطي i, ii, iii, …؛ وformat: 'decimal', startAt: 17 تعطي 17, 18, 19, ….

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

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

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

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

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

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

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

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

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

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

#التخطيط

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

الأعمدة والفاصل والهامشصفحة مقسّمة إلى ثلاثة أعمدة: كل عمود هو مساحة المحتوى المخصّصة للنص، والفواصل هي الفجوات العمودية بين الأعمدة، والهامش هو الحافة الفارغة بين حدّ الصفحة والعمود الأول.الصفحةالهامشالعمودالفاصل
الأعمدة تحمل النص. الفواصل تفصل بينها. الهوامش تؤطّر المحتوى.
نظام الهوامشصفحة لها هوامش مستقلة في الأعلى واليمين والأسفل واليسار تحيط بمساحة المحتوى.الصفحةمساحة المحتوىأعلى1cmأسفل2cmيسار2.5cmيمين1.5cm
يمكن أن يكون لكل جانب من الصفحة هامشه الخاص.
الخاصيةالنوعالقيمة الافتراضيةالوصف
layoutType'single' | 'double' | 'oneAndHalf' | 'multiple''double'ترتيب الأعمدة. انظر أدناه لتفاصيل كل نوع.
columnCountnumber3عدد الأعمدة المتساوية التي يقسم إليها تخطيط 'multiple' المتن: عدد صحيح من 3 إلى 8. القيمة الواقعة خارج هذا المدى، أو غير الصحيحة، تُقيَّد ويُبلَّغ عنها (انظر أنواع التخطيط). وتخطيط 'multiple' الخاص بنمط عنوان يأخذ عدد أعمدة المستند ما لم يضبط عدده. منذ postext 1.18.
gutterWidthDimension0.75 cmالمسافة الأفقية بين الأعمدة. لا تنطبق إلا على التخطيطات متعددة الأعمدة.
sideColumnPercentnumber33عرض العمود الجانبي نسبةً مئوية من مساحة المحتوى. تُستخدم كما كُتبت أي قيمة تترك لكلا العمودين شيئًا من العرض؛ أما القيمة التي لا تفعل ذلك فتُقيَّد، ويبلّغ البناء عنها (انظر أنواع التخطيط). لا تنطبق إلا على التخطيط 'oneAndHalf'.
sideColumnRole'text' | 'floats''text'ما يحمله العمود الجانبي: نص المتن (يتدفق إليه بعد العمود الرئيسي)، أو الموارد والإطارات الموضوعة بـ span: 'side' فقط، أي عمود هامشي للعناصر العائمة وحدها. لـ 'oneAndHalf' فقط. مع 'text'، تُعاد قسمة أسطر الفقرة التي تمتد من عمود إلى آخر على عرض العمود الذي تتابع فيه؛ وحتى postext 1.4 كانت تحتفظ بأسطر العمود الذي بدأت فيه، فكان السطر المنضّد لعرض العمود الرئيسي يتجاوز العمود الجانبي، فيُقصّ.
sideColumnSide'right' | 'left' | 'outer' | 'inner''right'حافة مساحة المحتوى التي يقع عندها العمود الجانبي. تتبع 'outer' / 'inner' زوجية الصفحة حين تكون الهوامش متناظرة (الحافة الخارجية لوجه الورقة هي حافته اليمنى، ولظهرها حافته اليسرى). لـ 'oneAndHalf' فقط.
columnRuleColumnRuleConfigمعطّلخط مرئي اختياري يُرسم بين الأعمدة. انظر أدناه.
fitFiguresToPagebooleanfalseيصغّر الشكل (صورة نقطية أو SVG) الذي تكون صورته وتعليقه وملاحظته معًا أطول من مساحة المحتوى حتى يتسع لها (والصورة ذات المنطقة الآمنة، Resource.safeArea، تُقصّ أولًا داخلها بكامل عرضها، ولا تُصغَّر إلا إذا بقيت لا تتسع)، ويصغّر الشكل المدرج في سياق النص الذي يزيد قليلًا على المساحة الباقية في عموده (حتى نصف عرضه، مع احتفاظ التعليق بعرض العمود) فيبقى مع نصه. وتقع الصورة المصغّرة في خانتها وفق placement.align. يفعّله عارض HTML، لأن صفحاته لا تزيد طولًا على الشاشة؛ أما الصفحات المطبوعة فمقاسها يناسب أشكالها.
bitmapResolution'document' | 'file' | number'document'كيف تأخذ الصورة النقطية التي ليس لها bitmap.resolution خاص بها مقاسَ طباعتها الطبيعي. 'document' تقرأ بكسلاتها بقيمة page.dpi؛ والرقم هو دقة كل صورة من هذا النوع بالـppi (300: الصورة ذات 2400 px عرضها 203.2 mm أيًّا كانت دقة الصفحة)؛ و'file' تستخدم الدقة التي يذكرها ملفها (bitmap.fileResolution)، وتُعدّ فيها 72 و96 غير محددتين، وإلا فـpage.dpi. يظل العمود يحدّ الصورة، ولا تُكبَّر الصورة الأصغر أبدًا. انظر صيغة المستند › مقاس الصورة النقطية. منذ postext 1.24.
floatShrinkFloatShrinkConfigmode: 'never'القيمة الافتراضية للمستند لـplacement.shrink (mode: 'never' أو 'page' أو 'slot') وplacement.minScale (minScale، 0.7 إن لم يُضبط) في الصور العائمة: تصغير الصورة، مع حفظ نِسَبها، إلى حيّز موضعها بدل نقلها إلى ما بعده (انظر تنسيق المستند › الموضع). ويتقدّم عليها موضعُ المورد نفسه، ثم defaultPlacement لنوعه. fitFiguresToPage يحدّ كل شكل بمساحة المحتوى؛ أما floatShrink فينظر في الشريط الذي سيشغله العنصر العائم فعلًا: تحت افتتاحية، أو بجانب أشكال عائمة أخرى، أو فوق الحواشي. منذ postext 1.24.
wrapTextWrapConfigminTextWidth: 12em, minLinesBeside: 2, defaultWidth: 0.45النص المصفوف بجانب صورة أو صندوق أضيق من عموده (placement.wrap، وwrap الصندوق): gap المسافة بين العنصر والنص (سطر واحد من المتن إن لم تُحدَّد)؛ minTextWidth أضيق عرض يأخذه النص المجاور، طولًا أو حصةً من العمود (إذا كان أضيق يأخذ العنصر الشريط كله مع تحذير textWrap)؛ minLinesBeside أقل عدد من الأسطر يستحق الصفّ بجانبه؛ defaultWidth حصة العمود التي يأخذها العنصر الملتف حين لا يحدد width. انظر تنسيق المستند › التفاف النص. منذ postext 1.24.
floatsAtCitingPagebooleanfalseالقيمة الافتراضية للمستند لـplacement.citingPage: يمكن للشكل العائم 'top' أو 'auto' أن يحتل رأس الصفحة (شكل عائم بعرض الصفحة) أو رأس العمود (شكل عائم بعرض العمود) حيث يقع السطر الذي يشير إليه أول مرة، بدلًا من أول موضع شاغر بعد ذلك السطر، وينزل النص الذي فوق الإحالة تحته (انظر تنسيق المستند › الموضع). يتقدم عليها موضع المورد نفسه، ثم defaultPlacement لنوعه. منذ postext 1.25.
maxTopFractionnumber0.7أكبر نسبة من ارتفاع العمود، من 0 إلى 1، يجوز أن يأخذها شكل عائم في رأس الصفحة أو العمود الذي يشير إليه، مع الأشكال العائمة الموجودة هناك، لتبقى في الصفحة مساحة لنصها (\topfraction في LaTeX). الشكل الذي يحتاج أكثر من ذلك يذهب إلى موضعه المعتاد. منذ postext 1.25.
hugClosingFloatsbooleantrueفي الصفحة الختامية من الفصل (ومن المستند)، ترتفع الأشكال والجداول الممتدة بعرض الصفحة الموضوعة تحت آخر شريط من النص لتستقر على مسافة فجوة واحدة من فجوات العناصر العائمة تحته، مكدّسة بترتيبها: لا شيء يليها هناك. تتركها false حيث وضعها موضعها المحدّد، فينتهي العنصر العائم ذو position: 'bottom' عند أسفل الصفحة في الصفحة الختامية كما في كل صفحة أخرى، كما في نشرة بيانات ينتهي مخططها عند الارتفاع نفسه في كل صفحة مثلًا. والصفحات التي فيها عمود جانبي لا تحرّكها أبدًا.
inlineResourceGap'around' | 'above''around'الموضع الذي يحتفظ فيه المورد المدرج في سياق النص (placement.position: 'here'، المضمَّن بـ ::resource) بفجوة العناصر العائمة، وهي سطر واحد. تحتفظ 'around' بها فوق المورد وتحته، ويعود النص الذي يليه إلى شبكة خطوط الأساس تحت تلك الفجوة؛ والعنوان أو القائمة أو الإطار أو المورد المدرج الآخر الذي يليه مباشرة يتقاسم الفجوة السفلية مع مسافته العلوية الخاصة، فتُطبَّق الكبرى بينهما. تحتفظ 'above' بها فوقه فقط: يستأنف النص الذي يلي المورد عند خط الشبكة التالي مهما كان قريبًا، بين لا شيء وسطر كامل، كما كان حتى postext 1.4. والإعدادات التي خزّنتها إصدارات سابقة وتضمّن فصولُها موردًا تُقرأ بالقيمة 'above'، فلا تتحرك صفحاتها (انظر الحزم المكتوبة بالإصدار postext 1.4 أو أقدم). والإعدادات المكتوبة في الشيفرة للإصدار 1.4 تحتفظ بالتباعد القديم بضبط 'above' بنفسها، أو عبر pinLegacyInlineGap من postext/bundle.
inlineResourceGapInBoxesbooleantrueهل يحتفظ المورد المدرج داخل إطار (:::callout) بالفجوة التي يضبطها inlineResourceGap، وهي سطر من نص الإطار نفسه: فوق المورد، وتحته أيضًا مع 'around'، فتُطبَّق الكبرى بينها وبين المسافة الخاصة بالكتلة التالية. في أعلى الإطار أو أسفله، أو في أعلى جزء من إطار مقسوم أو أسفله، تتولى الحشوة فصل المورد ولا تُضاف فجوة. تضع false المورد مباشرة تحت النص الذي قبله، والنص الذي بعده مباشرة تحت المورد، كما كان حتى postext 1.4. والإعدادات التي خزّنتها إصدارات سابقة وتضمّن فصولها موردًا داخل إطار تُقرأ بالقيمة false (انظر الحزم المكتوبة بالإصدار postext 1.4 أو أقدم)؛ وفي الشيفرة، يفعل pinLegacyBoxResourceGap من postext/bundle الشيء نفسه.
boxChildSplitMinLinesnumber2أقل عدد من أسطر الفقرة أو عنصر القائمة يتركه القطع داخلها على كل جانب حين ينقسم الإطار (أما splitMinLines، في أنماط الإطارات، فما يزال يعدّ كل أسطر الإطار على كل جانب من القطع). عدد صحيح، 1 على الأقل. مع القيمة الافتراضية لا يترك القطع أبدًا سطرًا منفردًا من فقرة أو عنصر في أسفل عمود أو في رأس العمود التالي؛ ونمط الإطار الذي تكون فيه splitMinLines أقل يحدّد الحدّ بدلًا من ذلك. تسمح 1 للقطع بأن يترك سطرًا واحدًا من الفقرة أو العنصر على أحد الجانبين، كما كان حتى postext 1.4. والإعدادات التي خزّنتها إصدارات سابقة وتحتوي فصولها على :::callout تُقرأ بالقيمة 1 (انظر الحزم المكتوبة بالإصدار postext 1.4 أو أقدم)؛ وفي الشيفرة، يفعل pinLegacyBoxChildCut من postext/bundle الشيء نفسه.
flowColumnsbooleantrueسياج :::columns خارج الإطار يُخرج كتله في أعمدة فرعية داخل عمود النص (أو على عرض الصفحة مع span="page")، والمجموعة، في إطار كانت أو في النص، تُقطع بين أعمدتها الفرعية حين لا تتسع، وتستمر في العمود أو الصفحة التالية (انظر صيغة المستند › :::columns). تتجاهل false السياج الواقع خارج الإطار ولا تقطع أبدًا داخل مجموعة، كما كان حتى postext 1.24؛ والإعدادات التي خزّنتها إصدارات سابقة وتحتوي فصولها على سياج :::columns تُقرأ بالقيمة false؛ وفي الشيفرة، يفعل pinLegacyFlowColumns من postext/bundle الشيء نفسه. والقسم ذو النمط يحتفظ بقيمة المستند. منذ postext 1.25.
floatsUnderOpenerbooleantrueتحت افتتاح بعرض الصفحة (مستوى عنوان أو نمط عنوان فيه span: 'page') مضبوط فوق عمودين من النص أو أكثر، يكون رأس عمود الافتتاح نفسه، تحت شريطه مباشرة، موضعًا لعنصر عائم 'top' أو 'auto'، على مستوى رؤوس الأعمدة الأخرى: الإطار العائم الموضوع بعد الافتتاح مباشرة، أو المورد المضمَّن هناك، يقف تحت الافتتاح في العمود الأول (وعلى عدة أعمدة ابتداءً منه مع columns)، ويبدأ نص العمود تحته. أما العنصر العائم المُحال إليه في النص فيبقى بعد السطر الذي يشير إليه. لا تتيح false هذا الموضع، فيقع العنصر العائم ابتداءً من العمود الثاني، كما كان حتى postext 1.24؛ والإعدادات التي خزّنتها إصدارات سابقة وتحدّد عنوانًا بعرض الصفحة تُقرأ بالقيمة false؛ وفي الشيفرة، يفعل pinLegacyOpenerHeadFloats من postext/bundle الشيء نفسه. والقسم ذو النمط يحتفظ بقيمة المستند. منذ postext 1.25.
writingMode'horizontal-tb' | 'vertical-rl''horizontal-tb'اتجاه جريان الأسطر. تنضّد 'vertical-rl' النص الصيني والياباني عموديًا: الحروف من الأعلى إلى الأسفل، وكل سطر على يسار السطر الذي قبله. يرثها layout الخاص بنمط العنوان ما لم يضبط قيمته الخاصة، فيمكن أن يلي ملحقٌ أفقي كتابًا عموديًا. انظر الكتابة العمودية.

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

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

  • عمود التخطيط هو طبقة (tier، 栏): يعطي layoutType: 'double' طبقتين مكدّستين من الأعلى إلى الأسفل، تُملآن بدءًا من أعلى اليمين؛ وgutterWidth هو الفجوة بينهما، والخط الفاصل بين الأعمدة خطٌّ أفقي بينهما. لا تُوازَن الطبقات في نهاية الفصل (clreq §7.1.3.4): موازنة الأعمدة معطّلة في المستند العمودي ما لم يُضبط headings.balancing.enabled.
  • ما يسمّيه التدفق «الأعلى» هو الحافة اليمنى للورقة، حيث تبدأ القراءة: العنصر العائم في الأعلى يقع على يمين الصفحة، والعائم في الأسفل على يسارها، وشريط صفحة الافتتاح الممتد على الصفحة شريطٌ ينزل على الحافة اليمنى، والحواشي السفلية تقع عند الطرف الأيسر لكل طبقة. وعنصر التصميم المثبّت إلى أعلى الصفحة (تصميم عنوان، إطار ثابت) مثبّت إلى الحافة اليمنى. القيمة 'left' للإعداد sideColumnSide هي الطبقة العليا، و'right' الطبقة السفلى؛ وتُقرأ 'outer' و'inner' على أنهما 'right' و'left'.
  • هوامش التدفق هي هوامش الورقة مُدارة: الهامش الأيمن هو أعلى التدفق، والهامش العلوي يساره. وتحتفظ page.margins بأسمائها على الورقة.
  • تبقى الترويسات وأرقام الصفحات وعلامات القص وخلفية الصفحة على الورقة، منضّدة أفقيًا، كما تصف clreq للكتب العمودية.
  • تقف الأشكال والجداول قائمة. يملأ الشكل ارتفاع طبقته بقدر ما يسمح تعليقه، على ألا يزيد عرضه على عرض الصفحة؛ والعرض الذي يأخذه هو المساحة التي يشغلها في التدفق. يُنضَّد تعليقه أفقيًا تحته، وكذلك خلايا الجدول: كلاهما يُقاس نصًا أفقيًا. يُنضَّد الجدول قائمًا عبر الصفحة، وتُقطع صفوفه على قدر الطبقة حين يكون أطول منها. يضع placement.align الشكل في أعلى طبقته ('left') أو وسطها أو أسفلها. لا يُطبَّق placement.rotate حيث يُشار إلى الشكل أول مرة في نص عمودي: يبلّغ البناء عن تحذير المحتوى rotateIgnoredVertical. أما القسم الأفقي من الكتاب (نمط عنوان يضبط layout فيه 'horizontal-tb') فيدير أشكاله كما طُلب.
  • صورة التصميم (رسم صفحة افتتاح، أو رسم صفحة جزء) تقف قائمة أيضًا. يُحسب مقاس صندوقها في التدفق بعد تبديل عرض الصورة وارتفاعها، فيكون size.width هو المسافة التي تمتد فيها الصورة نزولًا في العمود، ويُستنتج عرضها على الورقة من تناسب أبعادها.
  • الحروف: تقف حروف الهان والكانا والصيغ كاملة العرض قائمة، كلٌّ منها بعرض em واحد؛ وتُدار الكلمات اللاتينية والأرقام جانبيًا بعروضها الأفقية؛ وتأخذ علامات الترقيم الصيغةَ العمودية من الخط. لا تُدار علامات الوقف والتوقف أبدًا: يضع خط البر الرئيسي 、。,. في الزاوية العليا اليمنى من الخانة و!?:; في نصفها الأيمن، ويوسّطها خطُّ تايوان أو هونغ كونغ (cjk.region). تأخذ الأقواس صيغها العمودية، وتُقرأ “ ” ‘ ’ في نصوص البر الرئيسي على هيئة 『』「」. وتأخذ الشرطات وعلامات الحذف وشرطة الموجة الصيغةَ العمودية من الخط حيث يملكها (يربط Noto CJK صيغة — بـ vert مع fwid: خطٌّ ينزل في وسط الخانة)، وإلا فتُدار مع توسيط حبرها على محور العمود. والـ 破折号 (——) في النص الصيني خطٌّ واحد ينزل في العمود: صيغه العمودية تترك فراغًا عند طرفي كل خانة، فتُدار كل شرطة مع السطر وتُمدّ كما في النص الأفقي (انظر عروض علامات الترقيم). والعدد الذي لا يزيد على رقمين يقف في خانة قائمة واحدة، ما لم يقع في جملة لاتينية فيتبع كلماتها (انظر الأرقام في النص العمودي). وتأخذ النقطة الوسطى (·) نصف خانة في نصوص البر الرئيسي وخانة كاملة في نصوص تايوان وهونغ كونغ. والعلامات التي يجعلها Unicode قائمةً (× © ± § ℃ ① وما شابهها) تقف في خانة خاصة بها، حتى داخل عدد: 3×4 هو 3 و4 مُداران جانبيًا وبينهما × قائمة. والفاصلة العليا أو النقطة الوسطى بين حرفين من كلمة لاتينية (don’t، l·l) تبقى في الكلمة، مُدارة جانبيًا. وتتبع الفقرة اللاتينية في تدفق عمودي القواعد نفسها. أما الصيغ الرياضية المدرجة في السطر والشارات (chips) وعيّنات الألوان (swatches) فتُدار جانبيًا مع السطر.
  • يُقاس كل حرف كما يُرسم: الخانة تتقدّم بمقدار خانتها على امتداد السطر، والمقطع المُدار جانبيًا بعرضه الأفقي. والنص الذي يبقى أفقيًا على الورقة (الترويسات وأرقام الصفحات والتعليقات وخلايا الجداول) يُقاس أفقيًا.
  • تنطبق عروض علامات الترقيم وتعليق علامات الترقيم والمسافة بين حروف الهان والحروف اللاتينية على امتداد السطر نزولًا كما تنطبق عليه أفقيًا. الفراغ الذي يسبق الحرف يكون فوقه والفراغ الذي يليه تحته: تأخذ 、 بنمط Kaiming نصف خانة، وتنضغط 」「 إلى خانة ونصف، ويبدأ القوس الافتتاحي المقصوص في رأس السطر أعلى بنصف خانة، وتقع 。 المعلّقة تحت أسفل سطرها، والمسافة بين الهان واللاتينية ربع em من العمود فوق الكلمة المُدارة جانبيًا وتحتها. وتحتفظ :;?! بخانة كاملة في النص العمودي في كل المناطق.
  • تَعُدّ شبكة الحروف الحروفَ نزولًا على السطر والأسطرَ عبر الصفحة: يحدّد charsPerLine طول الطبقة، وlinesPerPage عدد الأسطر التي تتسع لها الصفحة، ويعطي layoutType: 'double' طبقتين من حروف كاملة بينهما فاصل من وحدات em كاملة.

وللمضيفين الذين يقرؤون الإخراج: تحمل الصفحة العمودية VDTPage.flow. تكون contentArea والأعمدة والكتل والأسطر والعناصر العائمة ومساحات الحواشي وشريط صفحة الافتتاح وطبقات تصميم الكتل بإحداثيات التدفق؛ أما width وheight وheader وfooter فعلى الورقة. تحوّل flowToPage وpageToFlow وflowRectToPage وpageRectToFlow بين النظامين، وتخبر verticalOrientation(char, region) كيف يقف الحرف. يعطي flow.centralBaselines، لكل عائلة خط، المحور الذي وسّط عليه الإخراجُ الحروفَ القائمة: مركز حبر 中، الذي يمتد شُقّه الطويل على ارتفاع صندوق em كله (0.38 em فوق خط الأساس في Noto Serif وNoto Sans، بنسختيهما SC وTC على السواء)، والموجود في كل خط صيني وياباني وكوري. يُوسَّط كل سطر على ذلك المحور: يقع خط أساس السطر العمودي تحت أعلى صندوق سطره بمقدار نصف ارتفاع سطره مضافًا إليه خط الأساس المركزي للعائلة (أما خط أساس السطر الأفقي فيقع على 0.8 من ارتفاع سطره نزولًا)، فيقف عمود الحروف في منتصف خطوته (pitch)، ويقع الخط المرسوم بين عمودين على مسافة خطوة كاملة في منتصف المسافة بينهما. ويُنضَّد نص التصميم العمودي بالطريقة نفسها في أسطره الخاصة. يرسم Canvas الصفحة العمودية بنفسه؛ ولرسم علامات الترقيم بالصيغ العمودية للخط نفسه، يحمّل المضيف في المتصفح، مرة واحدة لكل عائلة، وجهًا توأمًا تكون فيه تلك الصيغ مفعّلة: loadVerticalAlternates(family, faces)، حيث faces هي مصادر العائلة (عناوين URL أو بايتات) وواصفاتها. ولا يُحتفظ بالتوأم إلا حيث يطبّق المتصفح الخاصية على نص Canvas (Chrome 140 وما بعده): يرسم 「(《 بالتوأم وبنسخة من الوجوه نفسها محمّلة دون الخاصية، بوزن الوجوه المعطاة وأسلوبها، ويحتفظ بالتوأم حين يختلف حبرهما. والاستدعاء اللاحق لوجوه أخرى من عائلة توأمها قيد الاستخدام (العريض بعد العادي) يضيفها إليه. يفعل Sandbox ذلك لكل عائلة في مستند عمودي. ودون توأم، تُدار الأقواس حول صندوق em الخاص بها، وتُنقل علامات الوقف والتوقف في نصوص البر الرئيسي داخل خانتها إلى حيث تضعها الصيغ العمودية للخط: 、。,. إلى الزاوية العليا اليمنى (في حدود 0.07 em من الصيغ العمودية في Noto Serif SC)، و!?:; نصف em إلى اليمين وقليلًا إلى الأعلى (في حدود 0.02 em). ويُنضّد PDF وHTML الصفحة نفسها: انظر النص العمودي في PDF والجدول في كيف يختلف إخراج HTML عن Canvas وPDF. وبالمقارنة خانةً خانة مع HarfBuzz (تخطيط عمودي مع vert) في Noto Serif TC وSC، يقف كل حرف من 「賈雨村」云云,宜乎?故曰!;:、。“引”‘單’…… في حدود 0.02 em منه في Canvas وفي PDF، وفي حدود 0.05 em في HTML (يوسّط Chrome الحرف المُدار على منتصف الصعود والنزول في الخط، وهو في Noto أعلى من مركز صندوق em بمقدار 0.05 em). يعطي flow.dashAdvances، لكل عائلة، التقدّم الأفقي بوحدات em لكل شرطة تمدّها الصفحة لتملأ خانتها (— – ― ⸺ ⸻ -)، للمُخرِج الذي لا يملك مقاييس خطوط خاصة به: يمدّ HTML الشرطة بها، كما يفعل Canvas وPDF من مقاييسهما. ويمكن تنضيد الترويسات وأرقام الصفحات عموديًا أيضًا: انظر عناصر النص العمودي.

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

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

الخاصيةالنوعالقيمة الافتراضيةالوصف
enabledbooleanfalseهل يُرسم الخط الفاصل بين الأعمدة.
colorColorValue#ccccccلون الخط.
lineWidthDimension0.5 ptسماكة الخط.

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

يمكن لنمط العنوان أن يضبط خطًا فاصلًا خاصًا به في layout الخاص به (انظر أنماط العناوين)، فترسمه صفحات قسمه. والحقل الذي يتركه النمط دون ضبط يأخذ قيمة المستند، فالقسم الذي لا يغيّر إلا أعمدته يحتفظ بالخط الفاصل الخاص بالمستند. وحتى postext 1.4 لم يكن خط النمط يُرسم أبدًا: كانت كل صفحة ترسم خط المستند.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

#عناصر النص

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

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

الخاصيةالنوعالقيمة الافتراضيةالوصف
kind'text'—المميِّز (discriminator).
idstring—معرّف ثابت، فريد داخل الخانة. تُثبَّت إليه العناصر الأخرى بـanchor.to: '#id'. يعيّن Sandbox معرّفًا عند الإنشاء.
contentstring''سلسلة القالب. تدعم العناصر النائبة المدرجة أدناه، إضافة إلى : سمة مكتوبة في سطر 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' رقم الصفحة هناك فقط.
fontFamilystring'EB Garamond'عائلة الخط.
fontSizeDimension8 ptحجم الخط.
fontWeightnumber400وزن الخط (100–900).
italicbooleanfalseهل يُرسم النص بخط مائل.
colorColorValue#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' أسطره فيه).
lineHeightnumber | Dimension1.2تباعد أسطر العنصر. العدد مضاعف لـfontSize. ويُقبل Dimension أيضًا، على النحو الذي يُكتب به كل تباعد أسطر آخر في الإعدادات: em / rem هو المضاعف نفسه، والطول المطلق (pt، mm، px…) هو المسافة بين خطوط الأساس: يضبط تباعدًا قدره 15.5 pt أيًّا كان الحجم. وأي قيمة أخرى (صفر، أو عدد سالب، أو بُعد مشوّه) تأخذ القيمة الافتراضية. حتى postext 1.4 كان Dimension هنا يجعل ارتفاع التصميم غير قابل للقياس: فلم تكن صفحة الافتتاح تحجز أي مساحة، ولا حتى minHeight، وكان المتن يجري تحت العنوان.
letterSpacingDimension0التتبّع (tracking): مسافة إضافية بعد كل محرف، بما في ذلك المسافات، تمامًا كما يفعل letter-spacing في CSS. تزداد العروض المقيسة معه، فيبقى الصندوق التلقائي العرض محكمًا. يُستبعد التتبّع الذي يلي آخر محرف في السطر من محاذاته ومن الصندوق التلقائي العرض، فيتوسّط العنوانُ المتتبَّع الموسَّط على حروفه، وينتهي العنوان المحاذى لليمين عند الحافة، ويبلغ آخر حرف في السطر المضبوط الحافة (حتى postext 1.4 كانت تقع على بعد نصف وحدة تتبّع، أو وحدة كاملة، إلى اليسار، وكان العنصر المثبّت إلى يمين عنصر متتبَّع يبتعد عنه وحدة تتبّع إضافية). القيمة السالبة تُقرّب الحروف، فعنوان العرض بحجم 36 pt يأخذ غالبًا { value: -0.3, unit: 'pt' }، وتنكمش العروض بالطريقة نفسها؛ وترسمه Canvas وHTML وPDF على النحو نفسه (حتى postext 1.4 كانت القيمة السالبة تُضبط على 0 دون تحذير).
textTransform'none' | 'uppercase''none'تحويل حالة الحروف المطبّق على النص المحسوم، بما فيه العناصر النائبة: عنوان جزء مكتوب بالحروف الكبيرة في جدول المحتويات مثلًا.
boxElementBoxStyle—خلفية وحدّ اختياريان يُرسمان خلف النص: 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 أو أقدم). أما الحرف الاستهلالي في النص الجاري فتضبطه أنماط الفقرات والعناوين (انظر الحروف الاستهلالية)، وتُقاس ارتفاعات حروفه الكبيرة من الخطوط نفسها.
paragraphIndentDimension0إزاحة السطر الأول لكل فقرة بعد الأولى. يفصل بين الفقرات سطرٌ جديد في المحتوى، أو الحرفان \n في النص الآتي من قيمة سمة؛ وتُعدّ الأسطر الجديدة المتتالية سطرًا واحدًا.
hyphenatebooleanfalseحين تكون true ويلتف النص (overflow: 'wrap'، أو dropCap الذي يلتف دائمًا)، تُقسَّم الكلمات الطويلة التي تظل تفيض بعد كسر السطر العادي عند حدود المقاطع (باستخدام لغة تقسيم الكلمات النشطة في المستند) مع واصلة مرنة عند موضع القطع. وفي النص المضبوط (align: 'justify') تُقطع أيضًا الكلمة التي لا تتسع لبقية السطر عند آخر حدّ مقطع يتسع، لملء السطر.
inlineMarksbooleanfalseيقرأ النص المحسوم، بما فيه قيم العناصر النائبة، على أنه 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' النص من الأعلى إلى الأسفل، والأسطر من اليمين إلى اليسار، والمحارف قائمة: ترويسة تنزل على الحافة الأمامية، أو عنوان عمودي بجوار فصل أفقي. انظر عناصر النص العمودي.
reservebooleantrueلتصاميم العناوين فقط: هل يُحتسب العنصر ضمن الارتفاع الذي يحجزه العنوان في تدفق النص. false للزخرفة التي قد تقع تحت النص (ختم في أسفل الصفحة، أو إطار، أو شريط جانبي). انظر الارتفاع المحجوز. تتجاهله تصاميم رأس الصفحة والتذييل والأجزاء.
marginFromBodyDimension6 ptالمسافة المطلقة بين حافة العنصر المواجهة للمتن وحافة المتن. مستقلة عن العناصر الأخرى. تُرحَّل إلى placement.offset.y.
marginFromEdgeDimension0 ptإزاحة أفقية من حافة المحتوى التي يحاذى إليها العنصر. لا تنطبق إلا حين يكون align بقيمة 'left' أو 'right'. تُرحَّل إلى placement.offset.x.
placementElementPlacementمشتقة من 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'—المميِّز.
idstring—معرّف ثابت، فريد داخل الخانة، للإشارات anchor.to: '#id'.
direction'horizontal' | 'vertical''horizontal'يمتد الخط الأفقي على طول placement.size.width ('fill' = حتى حافة الحاوية) ويكون ارتفاعه thickness. ويمتد الخط العمودي نزولًا على طول placement.size.height ('fill' أو بلا قيمة = حتى حافة الحاوية) ويكون عرضه thickness: فاصل بين ترويسة ورقم صفحة مثلًا.
colorColorValue#000000لون الخط.
thicknessDimension0.5 ptسماكة الخط. الخط الفاصل الذي يُغفلها يُرسم بالقيمة الافتراضية (حتى postext 1.4 لم يكن يرسم شيئًا).
widthDimension | 'full''full''full' يمتد على مساحة المحتوى؛ وقيمة Dimension تقيّد الخط بطول ثابت يحدّد align موضعه.
align'left' | 'center' | 'right''center'المحاذاة حين لا يكون width بقيمة 'full'.
marginFromBodyDimension6 ptالمسافة المطلقة بين حافة الخط المواجهة للمتن وحافة المتن. مستقلة عن العناصر الأخرى.
marginFromEdgeDimension0 ptإزاحة أفقية من حافة المحتوى التي يحاذى إليها الخط. لا تنطبق إلا حين يكون width قيمة Dimension ثابتة وalign بقيمة 'left' أو 'right'.
parity'all' | 'odd' | 'even''all'الصفحات التي يظهر فيها الخط.
pages'all' | 'body' | 'opener' | 'part' | 'blank''all'أدوار الصفحات التي يظهر فيها الخط (انظر الحقل pages لعنصر النص).
reservebooleantrueلتصاميم العناوين فقط: هل يُحتسب الخط ضمن الارتفاع الذي يحجزه العنوان في تدفق النص (انظر الارتفاع المحجوز).
placementElementPlacementمشتقة من align + marginFromBody + marginFromEdgeتموضع متقدم (انظر تموضع العناصر). يضبط size.width / size.height طول الخط؛ وwidth: 'fill' هو 'full' القديم.

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

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

الخاصيةالنوعالقيمة الافتراضيةالوصف
kind'box'—المميِّز.
idstring—معرّف ثابت، فريد داخل الخانة. تُثبَّت إليه العناصر الشقيقة بـanchor.to: '#id'. يعيّن Sandbox معرّفًا عند الإنشاء.
style.backgroundColorColorValuetransparentلون التعبئة. اضبطه على transparent لصندوق بحدّ فقط.
style.borderColorColorValuetransparentلون الحدّ.
style.borderWidthDimension0 ptعرض الحدّ. يُرسم الحدّ داخل المستطيل المحيط بالصندوق فتبقى الأبعاد الخارجية ثابتة: تجري الحافة الخارجية للحدّ على حافة الصندوق، ويحتفظ الصندوق المستدير بنصف قطره الخارجي. والحدّ الذي يساوي عرض الصندوق يملؤه. ترسمه Canvas وHTML وPDF على النحو نفسه (حتى postext 1.4 كانت Canvas وPDF تُمركزان الحدّ على الحافة، فيقع نصفه خارج الصندوق).
style.borderRadiusDimension0 ptنصف قطر الزاوية. يُقيَّد عند الرسم بنصف الضلع الأقصر.
placementElementPlacement—إلزامي. انظر «تموضع العناصر» أدناه.
parity'all' | 'odd' | 'even''all'الصفحات التي يظهر فيها الصندوق.
pages'all' | 'body' | 'opener' | 'part' | 'blank''all'أدوار الصفحات التي يظهر فيها الصندوق (انظر الحقل pages لعنصر النص).
reservebooleantrueلتصاميم العناوين فقط: هل يُحتسب الصندوق ضمن الارتفاع الذي يحجزه العنوان في تدفق النص (انظر الارتفاع المحجوز).

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

يرسم عنصر 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.

الخاصيةالنوعالقيمة الافتراضيةالوصف
idstring—معرّف ثابت؛ يمكن أن تُثبَّت إليه العناصر الأخرى بـ#id.
resourceIdstring—معرّف Resource نقطي أو SVG في المستند. قد يحوي عناصر نائبة، منها {attr.<key>}، تُملأ لكل عنوان أو جزء أو صفحة.
decorativebooleanfalseالصورة زخرفية فقط (حلية، أو شريط): لا تعطي المخرجاتِ نصًا بديلًا حتى حين يكون لموردها نص بديل (انظر أدناه).
placementElementPlacement—المرساة والإزاحة والحجم (انظر تموضع العناصر). الجانب الذي قيمته 'fill' يمتد حتى حافة الحاوية.
parity, pagesكما سبق'all'الصفحات التي تظهر فيها الصورة.
reservebooleantrueلتصاميم العناوين فقط: هل تُحتسب الصورة ضمن الارتفاع الذي يحجزه العنوان في تدفق النص (انظر الارتفاع المحجوز).

يُضمّن مُخرِج 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 عند الإدخال ويُعاد كتابته تموضعًا وقت حسم الإعدادات، فتظل الإعدادات القائمة تعمل دون تغيير.