باختصار
ورقة عمل في العلوم والرياضيات من صفحتين عن دورة الماء، صُنعت عشر مرات. الأسئلة واحدة، أما الأرقام وخانات الإجابة وأسطر الكتابة والقسمة المطوّلة فتبدو كما تطبعها الكتب المدرسية في كل بلد.
ما الذي ستنضده
ورقة العمل رقم 7 من مقرر العلوم والرياضيات للصف الرابع، «دورة الماء»، في عشر طبعات. الأسئلة واحدة في كل اللغات: اختر الإجابة الصحيحة، وضع صح أو خطأ، وأكمل الفراغات من بنك الكلمات، وصِل كل كلمة بمعناها، وضع دائرة حول كلمة، واقسم ماء الخزان، واشرح لماذا نوفّره. وكل طبعة تطبعها كما تطبعها مدارس بلدها. تضع الورقتان الإسبانية والكتالونية الرقم في دائرة، وتطلبان وضع علامة على V أو F، وتقسمان والمقسوم عليه في زاوية على شكل L يمين المقسوم. وتستعمل الفرنسية المربعات وcases à cocher وفراغات منقّطة وورق Seyès للإجابة. وتكتب الألمانية R وF وLückentext و864 : 4 = على سطر واحد، والضرب فيها بنقطة. وتطلب البرازيلية V أو F بين قوسين. وتقسم الإنجليزية تحت علامة ⟌. وترقّم الصينية أقسامها 一、二、، وتضع ( ) بعد كل سؤال مع A. B. C. في صف واحد، وتطلب √ أو ×، وتنتهي بـ 看拼音,写词语 في مربعات 田字格. وتعرض اليابانية ア イ ウ و○ ×، وتجري العربية من اليمين إلى اليسار مع أ ب ج وصح أو خطأ.
تجيب هذه الوصفة عن
- كيف أصفّ ورقة العمل نفسها كما تصفّ الكتب المدرسية في كل بلد تمارينها؟
- كيف أصفّ القسمة الطويلة كما تكتبها مدارس كل بلد؟
- كيف أصفّ أسئلة اختبار صينية: قوسان ( ) بعد السؤال والخيارات A. B. C. D. في صف؟
الجواب المختصر
// The Markdown of every edition has the same seven exercises. What changes is this table:
// how the number prints, how options are labelled and answered, how true/false reads, where
// a blank is written, the paper of the open answer and the layout of long division.
const disc = { shape: 'disc' };
const square = { shape: 'square' };
const bare = { shape: 'none', suffix: '.' };
const TRADITIONS = {
es: { number: disc, options: { marker: 'none' }, trueFalse: { look: 'boxes' },
blank: { look: 'line' }, area: { kind: 'lines' }, arithmetic: { division: 'potence' } },
fr: { number: square, options: { marker: 'box' }, trueFalse: { look: 'boxes' },
blank: { look: 'dots' }, area: { kind: 'seyes', spacing: mm(8) },
arithmetic: { division: 'potence' } },
de: { number: square, options: { marker: 'box' }, trueFalse: { look: 'boxes' },
blank: { look: 'line' }, area: { kind: 'lines' }, arithmetic: { division: 'inline' } },
it: { number: { shape: 'rounded' }, options: { marker: 'box' }, trueFalse: { look: 'boxes' },
blank: { look: 'dots' }, area: { kind: 'lines' }, arithmetic: { division: 'potence' } },
pt: { number: bare, options: { marker: 'none' }, trueFalse: { look: 'bracket' },
blank: { look: 'line' }, area: { kind: 'lines' }, arithmetic: { division: 'potence' } },
en: { number: bare, options: { marker: 'none' }, trueFalse: { look: 'boxes' },
blank: { look: 'line' }, area: { kind: 'lines' }, arithmetic: { division: 'bracket' } },
// 一、二、 sections; ( ) after the stem and A. B. C. in a row; √ × in a bracket; 田字格.
zh: { number: { shape: 'none', format: 'simp-chinese-informal', suffix: '、' },
options: { labels: 'alpha-upper', suffix: '.', layout: 'row', bracket: true },
trueFalse: { look: 'bracket' }, blank: { look: 'line' },
area: { kind: 'tianzige', spacing: mm(13), lines: 1 }, arithmetic: { division: 'bracket' } },
// ア イ ウ in a row with ( ), ○ × in a bracket, the number in a square.
ja: { number: square, options: { labels: 'katakana', suffix: '', layout: 'row', bracket: true },
trueFalse: { look: 'bracket' }, blank: { look: 'line' }, area: { kind: 'lines' },
arithmetic: { division: 'bracket' } },
ar: { number: disc, options: { marker: 'none', prefix: '(', suffix: ')' },
trueFalse: { look: 'boxes' },
blank: { look: 'dots' }, area: { kind: 'lines' }, arithmetic: { division: 'bracket' } },
};
TRADITIONS.ca = TRADITIONS.es; // Catalan schools set exercises as Spanish ones do
المكونات
- الميزات
- أنماط التمارينالعمليات العموديةالاختيار والصواب والخطأالتمارينالفراغات وبنوك الكلماتالتوصيل والتصنيفالأسئلة المفتوحة ومساحات الكتابةصفحات افتتاح مصمَّمةسمات العنوانلوحة ألوان دلاليةالخطوط الصينية واليابانية والكوريةالخطوط العربيةكتب مجلّدة من اليمينالنص من اليمين إلى اليسارتقسيم الكلمات ولغة المستندصفحات على اللوحة (Canvas)التصدير إلى PDF
- الخطوط
- Nunito, Baloo 2, Noto Serif SC, Noto Sans SC, Klee One, Noto Sans JP, Noto Naskh Arabic, Baloo Bhaijaan 2 (SIL OFL 1.1)
- الأصول
- لا شيء: كل صورة مرسومة بالشيفرة
طريقة التحضير
#1 · ضع كل تقليد في جدول
// The Markdown of every edition has the same seven exercises. What changes is this table:
// how the number prints, how options are labelled and answered, how true/false reads, where
// a blank is written, the paper of the open answer and the layout of long division.
const disc = { shape: 'disc' };
const square = { shape: 'square' };
const bare = { shape: 'none', suffix: '.' };
const TRADITIONS = {
es: { number: disc, options: { marker: 'none' }, trueFalse: { look: 'boxes' },
blank: { look: 'line' }, area: { kind: 'lines' }, arithmetic: { division: 'potence' } },
fr: { number: square, options: { marker: 'box' }, trueFalse: { look: 'boxes' },
blank: { look: 'dots' }, area: { kind: 'seyes', spacing: mm(8) },
arithmetic: { division: 'potence' } },
de: { number: square, options: { marker: 'box' }, trueFalse: { look: 'boxes' },
blank: { look: 'line' }, area: { kind: 'lines' }, arithmetic: { division: 'inline' } },
it: { number: { shape: 'rounded' }, options: { marker: 'box' }, trueFalse: { look: 'boxes' },
blank: { look: 'dots' }, area: { kind: 'lines' }, arithmetic: { division: 'potence' } },
pt: { number: bare, options: { marker: 'none' }, trueFalse: { look: 'bracket' },
blank: { look: 'line' }, area: { kind: 'lines' }, arithmetic: { division: 'potence' } },
en: { number: bare, options: { marker: 'none' }, trueFalse: { look: 'boxes' },
blank: { look: 'line' }, area: { kind: 'lines' }, arithmetic: { division: 'bracket' } },
// 一、二、 sections; ( ) after the stem and A. B. C. in a row; √ × in a bracket; 田字格.
zh: { number: { shape: 'none', format: 'simp-chinese-informal', suffix: '、' },
options: { labels: 'alpha-upper', suffix: '.', layout: 'row', bracket: true },
trueFalse: { look: 'bracket' }, blank: { look: 'line' },
area: { kind: 'tianzige', spacing: mm(13), lines: 1 }, arithmetic: { division: 'bracket' } },
// ア イ ウ in a row with ( ), ○ × in a bracket, the number in a square.
ja: { number: square, options: { labels: 'katakana', suffix: '', layout: 'row', bracket: true },
trueFalse: { look: 'bracket' }, blank: { look: 'line' }, area: { kind: 'lines' },
arithmetic: { division: 'bracket' } },
ar: { number: disc, options: { marker: 'none', prefix: '(', suffix: ')' },
trueFalse: { look: 'boxes' },
blank: { look: 'dots' }, area: { kind: 'lines' }, arithmetic: { division: 'bracket' } },
};
TRADITIONS.ca = TRADITIONS.es; // Catalan schools set exercises as Spanish ones do
للطبعات كلها Markdown واحد: سبع كتل :::exercise إجاباتها في النص (- [x]، [[بخار]]، - التبخّر -> يتحوّل الماء إلى بخار، - ٨٦٤ ÷ ٤). ما تختلف فيه كتب بلد عن كتب بلد آخر هو الشكل، لذلك يسكن هذا الجدول ولا يسكن غيره: هيئة الرقم وأرقامه، وحروف الخيارات وهل يضع التلميذ علامة في خانة أم دائرة حول حرف، وهيئة الصح والخطأ، وهيئة الفراغات، ومساحة الكتابة، وترتيب القسمة المطوّلة. وتأخذ الكتالونية صف الإسبانية كما هو.
#2 · ضع التقليد فوق نمط الدار
const T = TRADITIONS[LANG];
const ficha = {
id: 'ficha', ...T,
number: { background: col('accent'), color: T.number.shape === 'none' ? col('accent')
: col('paper'), fontFamily: LABEL, fontWeight: 700, ...T.number },
// Chinese and Japanese sheets set the instructions in the gothic (黑体, ゴシック).
instruction: { bold: true, color: col('ink'), ...(LANG === 'zh' || LANG === 'ja'
? { fontFamily: LABEL } : {}) },
blank: { color: col('ink'), weight: pt(0.7), ...T.blank },
match: { look: 'dots', gap: em(5), color: col('accent') },
bank: { order: 'alpha' },
area: { color: col('rule'), spacing: mm(9), weight: pt(0.6), ...T.area },
grid: { cell: mm(8.5), fontFamily: TEXT, rule: col('rule'), color: col('ink') },
marginTop: mm(7), marginBottom: mm(1), itemSpacing: em(0.4),
};
نمط تمارين واحد، ficha، يحمل ما تشترك فيه الأوراق العشر (زرقة الأرقام، والخطوط الرمادية، والمسافة بين التمارين)، ثم يُبسط فوقه صف الطبعة. وما لا يذكره الصف تأتي به اللغة: T F وV F وR F و√ × و○ × وصح خطأ كلمات من المحرّك نفسه، مثلها مثل a) b) c) وA. B. C. وア イ ウ وأ ب ج، فلا تكتبها أي طبعة.
#3 · أعطِ كل كتابة خطوطها
const FACES = {
zh: { text: 'Noto Serif SC', label: 'Noto Sans SC' },
ja: { text: 'Klee One', label: 'Noto Sans JP' },
ar: { text: 'Noto Naskh Arabic', label: 'Baloo Bhaijaan 2' },
}[LANG] ?? { text: 'Nunito', label: 'Baloo 2' };
const [TEXT, LABEL] = [FACES.text, FACES.label];
تشترك الطبعات اللاتينية في Nunito وBaloo 2. وتنضّد الورقة الصينية نصها بخط Song وتعليماتها بخط Hei؛ واليابانية نصها بخط Klee One، وهو خط كتب مدرسية، وتعليماتها بخط غير مذيّل (gothic)؛ وتستعمل العربية Noto Naskh Arabic. أثقل أوزان Klee One هو 600، لذلك تضبط الطبعة اليابانية خطها العريض على 600 (boldFontWeight)؛ فالوزن 700 يرسمه المتصفح، ويفشل الالتقاط.
#4 · افتح الورقة بأسطر للاسم
const at = (to, edge, x = 0, y = 0, size) => ({ anchor: { to, edge },
offset: { x: mm(x), y: mm(y) }, ...(size && { size }) });
const field = (id, attr, x, width) => [
{ kind: 'text', id, content: `{attr.${attr}}`, fontFamily: LABEL, fontSize: pt(10),
fontWeight: 700, color: col('muted'), align: 'left', placement: at('container', 'top-left',
x, 28) },
{ kind: 'rule', id: `${id}-line`, direction: 'horizontal', thickness: pt(0.75),
color: col('rule'), placement: at('container', 'top-left', x + 16, 33, { width: mm(width) }) },
];
const head = { enabled: true, minHeight: mm(38), slot: { elements: [
{ kind: 'box', id: 'band', style: { backgroundColor: col('accent'), borderRadius: mm(3) },
placement: at('container', 'top-left', 0, 0, { width: 'fill', height: mm(21) }) },
{ kind: 'text', id: 'kicker', content: '{title} · {subtitle}', fontFamily: LABEL,
fontSize: pt(8.5), fontWeight: 700, color: col('tint'), align: 'left',
placement: at('container', 'top-left', 6, 3.5) },
{ kind: 'text', id: 'title', content: '{titleText}', fontFamily: LABEL, fontSize: pt(22),
fontWeight: 700, color: col('paper'), align: 'left', lineHeight: 1.1,
placement: at('container', 'top-left', 6, 9.5) },
...field('name', 'nombre', 0, 96), ...field('date', 'fecha', 120, 40),
] } };
يرسم عنوان المستوى الأول الشريط، واسم المقرر المأخوذ من الـfrontmatter، والعنوان، وحقلين لكل منهما سطر تأتي كلماتهما من سمات العنوان (nombre="الاسم" fecha="التاريخ")، فتقول الورقة الألمانية Datum واليابانية 名前 دون سلسلة نصية واحدة في الشيفرة.
الوصفة كاملة
// ═══ Postext Cookbook · Nº 169 · One worksheet in ten school traditions ═════════
// https://postext.dev/en/cookbook/school-traditions-worksheet
// Code: MIT · Text: original (CC BY 4.0) · Pictures: none
// Fonts: Nunito, Baloo 2, Klee One, Noto Naskh Arabic and others (SIL OFL) · Needs postext ≥ 1.59.0
import {
buildDocument, withLoadedFonts, renderPageToCanvas,
} from 'https://esm.sh/postext';
import { renderToPdf, decompressWoff2 } from 'https://esm.sh/postext-pdf';
const LANG = 'ar'; // @lang: the language of the worksheet (en es ca fr de it pt zh ja ar)
const RECIPE = 'school-traditions-worksheet';
// ─── 1 · Design ─────────────────────────────────────────────────────────────
// #region palette: a blue-black ink, one blue accent, a pale tint, grey rules
const palette = {
ink: '#1d2633', accent: '#2a5d9f', tint: '#e8f0fa', rule: '#a9b6c6', muted: '#5d6878',
paper: '#ffffff',
};
const col = (id) => ({ hex: palette[id], model: 'hex', paletteId: id });
const colorPalette = [
...Object.entries(palette).map(([id, hex]) => ({ id, name: id, value: { hex, model: 'hex' } })),
{ id: 'main-color', name: 'accent (defaults)', value: { hex: palette.accent, model: 'hex' } },
];
// #endregion
// #region faces: Latin editions share two faces; Chinese, Japanese and Arabic their own
const FACES = {
zh: { text: 'Noto Serif SC', label: 'Noto Sans SC' },
ja: { text: 'Klee One', label: 'Noto Sans JP' },
ar: { text: 'Noto Naskh Arabic', label: 'Baloo Bhaijaan 2' },
}[LANG] ?? { text: 'Nunito', label: 'Baloo 2' };
const [TEXT, LABEL] = [FACES.text, FACES.label];
// #endregion
// #region answer: the form of the exercises, as each country's school books set them
// The Markdown of every edition has the same seven exercises. What changes is this table:
// how the number prints, how options are labelled and answered, how true/false reads, where
// a blank is written, the paper of the open answer and the layout of long division.
const disc = { shape: 'disc' };
const square = { shape: 'square' };
const bare = { shape: 'none', suffix: '.' };
const TRADITIONS = {
es: { number: disc, options: { marker: 'none' }, trueFalse: { look: 'boxes' },
blank: { look: 'line' }, area: { kind: 'lines' }, arithmetic: { division: 'potence' } },
fr: { number: square, options: { marker: 'box' }, trueFalse: { look: 'boxes' },
blank: { look: 'dots' }, area: { kind: 'seyes', spacing: mm(8) },
arithmetic: { division: 'potence' } },
de: { number: square, options: { marker: 'box' }, trueFalse: { look: 'boxes' },
يعمل ملف script.js المجمّع كما هو: الصقه في سكربت الوحدة (module) لأي صفحة، أو افتح الوصفة على CodePen. مجلد الوصفة على GitHub ↗ (يفتح في تبويب جديد)
تنويعات
#اطبع نسخة المعلّم
تذهب كل إجابة إلى موضعها باللون الأرجواني: الأقواس، والخانات، والفراغات، وخارج القسمة.
exerciseStyles: [ficha],
+ exercises: { edition: 'teacher' },#اجمع الإجابات في أسفل الورقة
يضع placement: 'after' مفتاح إجابة كل تمرين تحته؛ ويقلبه 'inverted' رأسًا على عقب، كما في صفحات الألغاز.
+ exercises: { solutions: { placement: 'inverted', layout: 'key' } },أخطاء شائعة
- الخط الذي ليس له وزن 700 يجعل الخط العريض لأرقام الأسئلة مُصطنعًا. أعطِ خط النص هذا
boldFontWeightبوزن موجود فيه. - علامة ○ في التعليمات اليابانية وعلامة √ في الصينية لا توجدان إلا في خطوط CJK: ضعهما في جملة من نص CJK، لا في تسمية لاتينية.
الحقوق
- الوصفة
- Ignacio Ferro
- النص
- نص أصلي, CC BY 4.0
- الخطوط
- Nunito (SIL OFL 1.1) · Baloo 2 (SIL OFL 1.1) · Noto Serif SC (SIL OFL 1.1) · Noto Sans SC (SIL OFL 1.1) · Klee One (SIL OFL 1.1) · Noto Sans JP (SIL OFL 1.1) · Noto Naskh Arabic (SIL OFL 1.1) · Baloo Bhaijaan 2 (SIL OFL 1.1)
- الشيفرة
- MIT، مثل Postext
حرّر هذا الشرح ↗ (يفتح في تبويب جديد)مجلد الوصفة على GitHub ↗ (يفتح في تبويب جديد)


