In breve
Pagine di un quaderno di arabo per bambini sull’orto della scuola: scegliere la risposta, collegare le colonne, completare con le parole di un riquadro, segnare vero o falso, ordinare parole, trovarle in una griglia.
Che cosa comporrai
Un’unità di un quaderno di arabo di seconda elementare su una pagina di 17 × 24 cm, dedicata all’orto della scuola. Si apre con una fascia ad acquerello, la linguetta e il titolo dell’unità e una riga a puntini per il nome, la classe e la data. Poi vengono gli esercizi che stampa un libro arabo per la primaria: scegliere la risposta giusta, con أ) ب) ج) tre per riga; collegare le due colonne; completare gli spazi con un riquadro di parole; segnare صح o خطأ; mettere in ordine le parole e scrivere la frase sulla riga; trovare sette parole dell’orto in una griglia di lettere. Le soluzioni chiudono l’unità. Lo stesso testo si compone due volte: l’edizione del Mashriq numera tutto con cifre arabo-indiane, ١ ٢ ٣, quella del Maghreb con cifre europee. Tutte e due si leggono da destra e si rilegano a destra.
Questa ricetta risponde a
- Come compongo un quaderno di esercizi arabo da destra a sinistra: colonne da collegare, riquadro di parole, crucipuzzle e cifre arabo-indiane?
- Come compongo una pagina di eserciziario: numeri nei cerchi, banca di parole, vero o falso, collega?
- Come faccio un crucipuzzle o un cruciverba da un elenco di parole?
La risposta breve
// The locale sets the direction, the binding and the digits: 'ar' writes the exercise
// numbers, the items and the key in Arabic-Indic digits (١ ٢ ٣), 'ar-MA' in European ones.
// Options take the abjad letters (أ ب ج), true/false the words صح / خطأ, both from the
// language. Nothing below names a side: the engine sets every part from the right.
const tamrin = {
id: 'tamrin',
number: { shape: 'disc', fontFamily: LABEL, background: col('accent') },
instruction: { fontFamily: LABEL, bold: false, color: col('ink') },
options: { layout: 'row' }, // أ) ب) ج) side by side, three to a row (columns=3)
blank: { look: 'dots', color: col('muted') }, // a dotted line, as Arab workbooks print it
match: { color: col('accent') },
bank: { box: 'sunduq', order: 'shuffle' },
area: { kind: 'lines', color: col('rule') },
grid: { fontFamily: TEXT, rule: col('leaf'), uppercase: false }, // Arabic has no capitals
answers: { color: col('leaf'), fontFamily: TEXT },
solutions: { box: 'hulul' },
marginTop: em(1.1), marginBottom: em(0.5),
};
// The solutions where :::solutions stands: at the end of the unit.
const exercises = { solutions: { placement: 'directive' } };
Ingredienti
- Funzionalità
- EserciziTesto da destra a sinistraCifre dei numeri generatiStili di esercizioScelta e vero o falsoSpazi vuoti e banche di paroleCollegare e classificareRiordinareCrucipuzzle e cruciverbaSoluzioniFont arabiStili di numerazione arabiLibri rilegati a destraChip in lineaRiquadriAperture progettateAttributi dei titoliImmagini nei progetti di paginaTavolozza di colori semanticaEsportazione in PDF
- Usa anche
- Riquadri che si dividono o restano interiBilanciamento delle colonneDomande aperte e spazi di scritturaTestatine secondo il ruolo della paginaStili di paragrafoFont incorporati nel PDFFigure e tabelle come risorse
- Tipo
- Noto Naskh Arabic, Baloo Bhaijaan 2 (SIL OFL 1.1)
- Risorse
garden-1600.jpg- A school garden in an Arab town: date palms, a fountain, lemon trees, a girl watering plants and a boy carrying a pot of mint. (Generated With Diffusion Models, originale)
Preparazione
#1 · Non nominare nessun lato
Il codice è la risposta breve qui sopra. locale: 'ar' compone il testo da destra a sinistra, rilega il libro a destra e sceglie le cifre; lo stile degli esercizi prende dalla lingua le lettere abjad delle opzioni e صح e خطأ per il vero o falso. Le colonne da collegare, il riquadro di parole, il crucipuzzle e le righe di scrittura sono disegnati come design di riquadro, che una pagina da destra a sinistra rispecchia: la prima colonna sta a destra, una parola letta in orizzontale nella griglia va da destra a sinistra e i puntini da collegare si guardano nel mezzo.
#2 · L’apertura dell’orto
const BAND = 170 / 2.4; // mm: the painting's height at the page's width
const opener = { enabled: true, minHeight: mm(BAND - 20 + 21), slot: { elements: [
{ kind: 'image', id: 'picture', resourceId: '{attr.pic}', decorative: true, reserve: false,
placement: { anchor: { to: 'page', edge: 'top-left' },
size: { width: mm(170), height: mm(BAND) } } },
// In the flow of a right-to-left page 'left' is the start of the line: the right.
{ kind: 'text', id: 'unit', content: '{attr.kicker}', fontFamily: LABEL, fontSize: pt(11),
fontWeight: 700, color: col('paper'), align: 'left',
box: { backgroundColor: col('accent'), borderRadius: mm(1.5),
padding: { top: mm(0.6), bottom: mm(0.4), left: mm(2.4), right: mm(2.4) } },
placement: { anchor: { to: 'container', edge: 'top-left' },
offset: { x: mm(0), y: mm(BAND - 20 + 3) } } },
{ kind: 'text', id: 'title', content: '{titleText}', fontFamily: LABEL, fontSize: pt(30),
fontWeight: 700, color: col('ink'), align: 'left',
placement: { anchor: { to: '#unit', edge: 'right-of' }, offset: { x: mm(4), y: mm(-5) } } },
] } };
Il dipinto è ancorato alla pagina e tiene il suo posto. La linguetta e il titolo stanno nel flusso della pagina, dove left è l’inizio della riga, e così finiscono a destra senza coordinate proprie. I numeri di pagina restano fisici, come i titoli correnti, e indicano ogni lato.
#3 · Due edizioni, due serie di cifre
// Both are bound on the right and read from the right; only the locale changes.
const build = () => withLoadedFonts(() => buildDocument({ markdown, resources }, config()),
{ ...kitFonts(FONTS), text: markdown });
const mashriq = await build();
edition = { locale: 'ar-MA' }; // the same book for Morocco: European digits, still right to left
const docs = [mashriq, await build()];
La configurazione è una funzione, quindi ogni composizione riceve il suo oggetto, e la seconda cambia solo la lingua. ar-MA scrive in cifre europee i numeri degli esercizi, delle voci, delle soluzioni e delle pagine, e lascia il resto com’era: la direzione, la rilegatura, le lettere abjad e le parole delle soluzioni.
La ricetta completa
// ═══ Postext Cookbook · Nº 173 · An Arabic workbook, right to left ═══════════════
// https://postext.dev/en/cookbook/arabic-workbook-rtl
// Code: MIT · Text: original (CC BY 4.0) · Pictures: generated with diffusion models
// Fonts: Noto Naskh Arabic, Baloo Bhaijaan 2 (SIL OFL 1.1) · Needs postext ≥ 1.59.0
import {
buildDocument, withLoadedFonts, renderPageToCanvas, registerResourceImage,
} from 'https://esm.sh/postext';
import { renderToPdf, decompressWoff2 } from 'https://esm.sh/postext-pdf';
const LANG = 'ar'; // @lang: the language of the frame; the workbook is Arabic in all
const RECIPE = 'arabic-workbook-rtl';
// ─── 1 · Design ─────────────────────────────────────────────────────────────
// #region palette: a garden workbook: ink, a terracotta accent, a leaf green, sand
const palette = {
ink: '#22282e', // text
accent: '#b9542a', // the one accent: exercise numbers, the unit tab, the word bank
leaf: '#4f7d3a', // the second: rules and the word search's ruling
sand: '#f8eedf', // the bank's ground, the answers box
rule: '#c8b49b', // writing lines
muted: '#6f655c', // folios, the name line, the colophon
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
// Naskh for the text, a rounded Arabic for the labels a child reads first.
const [TEXT, LABEL] = ['Noto Naskh Arabic', 'Baloo Bhaijaan 2'];
// #region answer: one exercise style read right to left, in the edition's digits
// The locale sets the direction, the binding and the digits: 'ar' writes the exercise
// numbers, the items and the key in Arabic-Indic digits (١ ٢ ٣), 'ar-MA' in European ones.
// Options take the abjad letters (أ ب ج), true/false the words صح / خطأ, both from the
// language. Nothing below names a side: the engine sets every part from the right.
const tamrin = {
id: 'tamrin',
number: { shape: 'disc', fontFamily: LABEL, background: col('accent') },
instruction: { fontFamily: LABEL, bold: false, color: col('ink') },
options: { layout: 'row' }, // أ) ب) ج) side by side, three to a row (columns=3)
blank: { look: 'dots', color: col('muted') }, // a dotted line, as Arab workbooks print it
match: { color: col('accent') },
bank: { box: 'sunduq', order: 'shuffle' },
area: { kind: 'lines', color: col('rule') },
grid: { fontFamily: TEXT, rule: col('leaf'), uppercase: false }, // Arabic has no capitals
answers: { color: col('leaf'), fontFamily: TEXT },
Lo script.js composto funziona così com’è: incollalo nello script modulo di qualsiasi pagina, oppure apri la ricetta su CodePen. Cartella della ricetta su GitHub ↗ (si apre in una nuova scheda)
Varianti
#Stampa la guida per l’insegnante
Le risposte si stampano allora al loro posto, nel colore di answers: i puntini collegati, le parole negli spazi, le caselle giuste piene e le parole cerchiate nella griglia.
-const exercises = { solutions: { placement: 'directive' } };
+const exercises = { edition: 'teacher', solutions: { placement: 'none' } };#Scrivi gli esercizi in cinese
Il quaderno di esercizi cinese compone gli stessi tipi di esercizio con parentesi e numerali suoi.
Errori frequenti
Errore frequente
Assegna a un libro arabo il tag 'ar', non LANG
Le edizioni di una ricetta sono en ed es, ma un esempio arabo è arabo in entrambe: `locale: LANG` lo comporrebbe da sinistra a destra, lo rilegherebbe a sinistra, numererebbe le pagine 1 2 3 e darebbe alle figure didascalie Figure o Figura. Da postext 1.30 il tag è anche la lingua usata per lo shaping del testo (misura, disegno e incorporamento), quindi con un tag inglese o spagnolo un carattere come Markazi Text non disegna le forme arabe delle sue virgolette basse e dei suoi segni di interpunzione, e le righe vanno a capo altrove. Scrivi tu il tag: 'ar' (cifre arabo-indiane, la convenzione del Mashriq), una regione come 'ar-EG' o 'ar-SA', oppure 'ar-MA', 'ar-DZ' o 'ar-TN' per un’edizione del Maghreb con cifre europee. Una pagina latina che si limita a citare l’arabo mantiene la propria lingua. Testo da destra a sinistra →
Errore frequente
I caratteri arabi hanno bisogno del loro file arabic, tramite il blocco arabic
Fontsource serve Amiri, Noto Naskh Arabic o Scheherazade New come un file per sottoinsieme, e le lettere arabe stanno nel file arabic. loadFonts scarica solo latin (e latin-ext), così a schermo l’arabo viene da un font di sistema ed è misurato male, e fontsourceProvider passa al PDF quel file latin, che stampa riquadri vuoti. Elenca il blocco arabic del kit, chiama loadArabicFonts(FONTS, markdown) dopo loadFonts, con ogni peso che le pagine compongono in arabo elencato in FONTS, e passa a renderToPdf fontProvider: arabicPdfProvider. Font arabi →
- Quasi nessun carattere arabo ha ✓ o ✗: vero e falso si scrivono صح e خطأ, e la consegna chiede un segno nella casella.
- Il crucipuzzle riempie le caselle vuote con le lettere delle sue stesse parole, nella forma isolata. Scegli parole con lettere diverse, o la griglia si riempie di ة.
Crediti
- Ricetta
- Ignacio Ferro
- Testo
- Testo originale, CC BY 4.0
- Immagini
- A school garden in an Arab town: date palms, a fountain, lemon trees, a girl watering plants and a boy carrying a pot of mint. · Generated With Diffusion Models · originale
- Font
- Noto Naskh Arabic (SIL OFL 1.1) · Baloo Bhaijaan 2 (SIL OFL 1.1)
- Codice
- MIT, come Postext
Modifica questo testo ↗ (si apre in una nuova scheda)Cartella della ricetta su GitHub ↗ (si apre in una nuova scheda)


