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

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

الصفحات المركّبة

ترميز Markdown للصفحات المركّبة: سور الصفحة ذو النقاط الرأسية الأربع الذي يسمّي قالب الصفحة، والإطارات والسمة slot التي ترسل المحتوى إلى إطارات القالب، والأشكال ذات التسميات عند مراسي الصورة، والتحذيرات التي تطابق المحتوى بالقالب

آخر تحديث 2026-10-169 دقائقenescadefritptzhjaar

باختصار

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

القالب يحمل شكل الصفحة، وملف Markdown يحمل محتواها ويقول إلى أيّ إطار تذهب كل قطعة منه.

الصفحة المركّبة صفحة تُنضَّد من قالب: إطارات مسمّاة (شريط العنوان، ونص، وصندوق مع صورته)، ومجموعات تتحرك معًا، وزخرفة، وكلها معرّفة في الإعدادات تحت pageTemplates. وترميز الصفحة في Markdown كتلة مسوّرة تسمّي قالبها وتصبّ المحتوى في الإطارات بأسمائها. لا يُكتب في Markdown موضع ولا حجم أبدًا، ولا يُكتب في الإعدادات شيء من نص المحتوى أبدًا، فتكون الترجمة القالبَ نفسه بكلمات أخرى.

تتناول هذه الصفحة ترميز Markdown. في هذا الإصدار يقرأ المحلّل الصفحات المركّبة وتعمل فحوص الخانات، فتُبلغ لوحة الفحوص وpostext check عن الصفحة التي لا تطابق قالبها. أما تنضيد القالب على الصفحة فيأتي في الإصدار التالي؛ وإلى ذلك الحين يُنضَّد محتوى الصفحة المركّبة في النص الجاري، بترتيب Markdown، على صفحات خاصة به، فلا يضيع شيء مما كُتب فيه. والمستند الذي لا صفحات مركّبة فيه يُخرَج كما كان يُخرَج من قبل تمامًا.

#سور الصفحة

::::page{template="tema-cajas" fondo="banda-retos"}
# La actividad económica y el dinero
 
Las personas utilizan :chip[recursos]{style="clave"} que se obtienen de la naturaleza…
::::

تُفتتح الصفحة المركّبة بسطر من أربع نقاط رأسية يليها page وسماتها، وتُغلق بسطر مجرّد فيه العدد نفسه من النقاط الرأسية. وفي داخلها تُفتح الحاويات ذات النقاط الرأسية الثلاث (:::frame و:::callout و:::figure و:::columns و:::paper) وتُغلق كعادتها، فيُغلق ::: المجرّد أعمقها ولا يُغلق الصفحة أبدًا. والصفحة المكتوبة بخمس نقاط رأسية (:::::page) تُغلق بخمس، ويصير سطر النقاط الرأسية الأربع داخلها نصًا عاديًا.

السمةأثرها
template="…"إلزامية. معرّف مدخل من pageTemplates.
spreadالصفحة مزدوجة تمتد على صفحتين متقابلتين؛ ويجب أن يكون القالب قالبًا مزدوجًا أيضًا.
id="…"، #idمرساة: الإحالة :ref إليها تطبع رقم الصفحة التي تقع فيها الصفحة المركّبة.
أي سمة أخرىقيمة يقرؤها القالب بوصفها {attr.name}، مثل صورة خلفية تُختار صفحةً صفحة: fondo="banda-retos" في الصفحة مع resourceId: "{attr.fondo}" في الزخرفة.

تبدأ الصفحة المركّبة دائمًا صفحةً جديدة (أو صفحتين مزدوجتين)، ويبدأ النص الذي يلي سور إغلاقها في الصفحة التالية.

أما :::page{split=…} ذات النقاط الرأسية الثلاث فهي صفحة قصة مصوّرة (انظر القصص المصورة)، وتبقى على معناها. و:::page ذات النقاط الثلاث التي تحمل template= تُقرأ هي أيضًا صفحة قصة مصوّرة، وينبّه التحذير pageFenceLength إلى أن الصفحة المركّبة تحتاج إلى أربع نقاط رأسية.

وإذا نقص سور، تعافى المحلّل دون أن يضيع نص:

  • الصفحة التي تُركت مفتوحة تمتد إلى نهاية الفصل، ويُبلَّغ عنها حاويةً غير مغلقة عند سطر فتحها؛
  • سطر ::::page يأتي والصفحة مفتوحة يُغلق الصفحة المفتوحة هناك أولًا (ويُبلَّغ عنه بالطريقة نفسها)؛
  • سور الإغلاق يُغلق كل إطار أو صندوق ما زال مفتوحًا داخل الصفحة، ويُبلّغ عن كل واحد منها؛
  • سور الإغلاق الذي يختلف عدد نقاطه الرأسية ليس سور الصفحة: يبقى في النص، حيث تراه.

#الإطارات والخانات

:::frame{slot="dinero" label="El dinero"}
Es el instrumento utilizado como medio de pago…
 
Hasta hace pocos años, lo más normal era pagar con dinero en **efectivo**…
:::

الخانة هي الاسم الذي تطلبه قطعة من المحتوى، ويطابق اسم إطار من إطارات القالب. ويرسل :::frame{slot="…"} كل ما فيه إلى ذلك الإطار. ومتنه Markdown كامل: فقرات وقوائم وعناوين وشارات وتضمينات ::resource وإحالات :ref وحواشٍ و:::columns وصناديق متداخلة. ويعطي label وtitle لسانَ الإطار أو عنوانه كلماتِه، كما يفعلان في :::callout؛ ويأتي مظهر الإطار من نمط الصندوق الذي يعطيه إياه القالب.

ويمكن لكتلة واحدة أن تسمّي خانتها بنفسها:

الكتلةطريقة كتابتها
عنوان## Retos {slot="retos-titulo"}
تضمين مورد::resource{id="dinero-pago" slot="dinero-fotos"} (السمتان، بأي ترتيب)
كتلة شيفرة```js {slot="codigo"}
صندوق أو أي حاوية أخرى:::callout{type="nota" slot="aside"}: يذهب الصندوق كله إلى الخانة
شكل:::figure{resource="mapa" slot="mapa"} (انظر أدناه)

وهكذا يُوزَّع المحتوى:

  • القطع المتعددة ذات الخانة الواحدة تُضمّ بعضها إلى بعض بترتيب Markdown.
  • المحتوى الذي لا خانة له يذهب إلى إطار التدفق في القالب (الإطار الموسوم بـ flow).
  • العنوان الذي لا خانة له يذهب أولًا إلى الإطار الذي يأخذ مستواه (takes: "h1")، إن كان في القالب إطار كهذا، فيكفي لعنوان درس في كتاب مدرسي أن يُكتب # العنوان في أعلى الصفحة.
  • المحتوى الذي يسمّي خانة ليست في القالب يذهب إلى إطار التدفق ويُبلَّغ عنه (slotUnknown).

وslot خارج الصفحة المركّبة يُقرأ ولا يغيّر شيئًا.

#أشكال بتسميات

:::figure{resource="mapa-europa" slot="mapa"}
::label[OCÉANO ATLÁNTICO]{at="atlantico" style="mar"}
::label[**Madrid**]{at="madrid"}
::label[Mar Negro]{at="62% 48%"}
:::

يضع :::figure{resource="…"} موردًا واحدًا، بتعليقه ورقمه، كما يفعل ::resource، ويسرد التسميات التي توضع على الصورة: سطر ::label[TEXT]{…} لكل تسمية، ويجوز أن تفصل بينها أسطر فارغة.

  • يسمّي at مرساة من مراسي المورد (نقطة تُعرَّف مرة واحدة على الصورة وتشترك فيها كل اللغات)، أو يعطي نقطة بالنسب المئوية من الصورة، at="x% y%"، لتسمية لا مرساة لها.
  • يسمّي style نمط تسمية، ويتقدّم على نمط المرساة.
  • النص بين القوسين المعقوفين Markdown داخل السطر: عريض ومائل وشارات.

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

#مثال

صفحة من كتاب مدرسي، فيها شريط للعنوان ونص بقائمته وثلاثة صناديق ملوّنة، بجانب كل منها صورته:

::::page{template="tema-cajas" fondo="banda-retos"}
# La actividad económica y el dinero
 
## La actividad económica
 
Las personas utilizan :chip[recursos]{style="clave"} que se obtienen de la naturaleza…
 
- Las :chip[empresas.]{style="clave"} Ofrecen bienes y servicios a cambio de un beneficio.
- Las :chip[personas y familias.]{style="clave"} Adquieren lo que ofrecen las empresas…
 
:::frame{slot="dinero" label="El dinero"}
Es el instrumento utilizado como medio de pago, ya que su valor es conocido…
:::
 
::resource{id="dinero-pago" slot="dinero-fotos"}
 
:::frame{slot="gasto" label="El gasto"}
- **Fijo:** es el que se produce todos los meses…
- **Variable:** puede cambiar según las necesidades…
:::
 
::resource{id="gasto-compras" slot="gasto-fotos"}
 
:::frame{slot="ahorro" label="Préstamos y ahorro"}
Si necesitas o quieres comprar algo muy caro…
:::
 
::resource{id="ahorro-balanza" slot="ahorro-fotos"}
::::

يذهب العنوان إلى الإطار الذي يأخذ h1؛ ويذهب العنوان الفرعي والفقرة والقائمة إلى إطار التدفق؛ ويذهب كل صندوق وكل صورة إلى إطار خانته. والطبعة الكتالونية هي الأسطر نفسها بكلمات أخرى: لا يتغير القالب ولا الخانات ولا الصور.

#التحذيرات

تقرأ الفحوص ملف Markdown والإعدادات قبل أي تنضيد، فتظهر في لوحة الفحوص أثناء الكتابة، وفي postext check، وفي contentWarnings الخاصة بالمستند، ويحمل كل منها النطاق المصدري لما يخصّه (انظر الإعدادات › التحذيرات في المستند).

النوعالسببالحل
templateUnknownيسمّي سور الصفحة قالبًا لا يحمله أي مدخل من pageTemplates، أو لا يسمّي قالبًا. ولا تُفحص خاناته.صحّح المعرّف، أو أضف القالب إلى الإعدادات.
slotUnknownslot="…" لا يسمّي أي إطار من قالب الصفحة (وتُحسب الإطارات الموروثة عبر extends وإطارات صفحة variants). ويذهب المحتوى إلى إطار التدفق.صحّح اسم الخانة، أو أضف إلى القالب إطارًا بهذا الاسم.
slotEmptyإطار من القالب لا يتلقى شيئًا في هذه الصفحة: لا تسمّيه خانة، ولا يأخذ عنوانًا، وإن كان إطار التدفق فلم يبقَ محتوى بلا خانة. ولا يُبلَّغ عن إطار لا يتلقى إلا ما يُكمله فيه إطار آخر (next). ويسرده postext check ملاحظةً.اكتب له محتوى بخانته، أو اجعل الإطار optional: true في القالب.
pageFenceLength:::page بثلاث نقاط رأسية تحمل template=. فتُقرأ صفحة قصة مصوّرة، كما كانت.افتح الصفحة بأربع نقاط رأسية، ::::page{template="…"}، وأغلقها بـ ::::.
unclosedContainerصفحة مركّبة أو إطار أو شكل لم يُغلق قط (انظر قواعد التعافي أعلاه). وتسمّي لوحة الفحوص الصفحة المركّبة ::::page.أضف سور الإغلاق: نقاطًا رأسية بعدد ما في سطر فتح الصفحة، أو ::: للإطار أو الشكل.

#من الشيفرة

يقرأ composedPages(blocks) الكتل المحلَّلة لفصل (parseMarkdownWithIssues(markdown).blocks) ويعيد عقدة لكل سور صفحة، بالترتيب: template وspread وattrs مع النطاق المصدري لكل قيمة (attrSources) وfenceIndex (ترتيب السور في الفصل، وهو نفسه في كل لغة) وslots (مؤشرات كتل كل خانة، بترتيب Markdown) وunassigned (الكتل التي لا خانة لها) والنطاق المصدري للصفحة كلها. وتحمل الكتلة الخانة التي تسمّيها في ContentBlock.slot، مع النطاق المصدري للقيمة؛ والشكل resourceBlock يحمل في figure سماته وتسمياته، ولكل تسمية نصها ومقاطعها داخل السطر وخريطة مصدر تعود إلى Markdown. ويعيد checkComposedSlots(pages, config) تحذيرات الخانات الثلاثة لتلك الصفحات.