Pular para o conteúdo principal
Receita número 173

Receitas · Capítulo 12 · Livros didáticos

Um caderno de exercícios árabe, da direita para a esquerda

Um caderno árabe da direita para a esquerda: opções أ ب ج, colunas para ligar, banco de palavras, صح ou خطأ, caça-palavras e algarismos arábico-índicos.

Nesta página
Saída
Canvas · PDF
Postext
Testada com o Postext 1.59.0
Requer ≥ 1.59.0 · postext-pdf ≥ 1.59.0
Licença
Atualizada em 24 de out. de 2026
Código MIT · Texto CC BY 4.0

p. ١ · 1 de 8

  • Amostra em outro idioma: ainda sem edição em português
  • Refile 170 × 240 mm
  • 1 coluna
  • Noto Naskh Arabic 13/22
  • Baloo Bhaijaan 2
  • 8 páginas
  • Nível
  • Postext 1.59.0
  • Diagramado em 126 ms
  • 149 linhas de código

Em poucas palavras

Páginas de um caderno de árabe infantil sobre a horta da escola: escolher a resposta, ligar colunas, completar lacunas com um banco de palavras, marcar certo ou errado, ordenar palavras e achá-las num caça-palavras.

O que você vai compor

Uma unidade de um caderno de árabe do 2º ano numa página de 17 × 24 cm, sobre a horta da escola. Ela abre com uma faixa de aquarela, a aba e o título da unidade e uma linha pontilhada para o nome, a turma e a data. Depois vêm os exercícios que um livro árabe do fundamental imprime: escolher a resposta certa, com أ) ب) ج) três por linha; ligar as duas colunas; completar as lacunas com um banco de palavras; marcar صح ou خطأ; pôr as palavras em ordem e escrever a frase na linha; achar sete palavras da horta numa grade de letras. As soluções fecham a unidade. O mesmo texto é composto duas vezes: a edição do Mashriq numera tudo com algarismos arábico-índicos, ١ ٢ ٣, e a do Magrebe com algarismos europeus. As duas são lidas a partir da direita e encadernadas à direita.

Esta receita responde a

  • Como componho um caderno de exercícios árabe da direita para a esquerda: colunas para ligar, banco de palavras, caça-palavras e algarismos arábico-índicos?
  • Como componho uma página de caderno de atividades: números em círculos, banco de palavras, verdadeiro ou falso, ligue?
  • Como faço um caça-palavras ou palavras cruzadas a partir de uma lista de palavras?

A resposta curta

script.js · linhas 34–53no código completo
// 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' } };

Ingredientes

Tipografia
Noto Naskh Arabic, Baloo Bhaijaan 2 (SIL OFL 1.1)
Materiais
  • 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, original)

Preparo

#1 · Não nomeie nenhum lado

O código é a resposta curta logo acima. locale: 'ar' põe o texto da direita para a esquerda, encaderna o livro à direita e escolhe os algarismos; o estilo de exercício tira do idioma as letras abjad das opções e صح e خطأ para o certo ou errado. As colunas para ligar, o banco de palavras, o caça-palavras e as linhas de escrita são desenhados como designs de quadro, que uma página da direita para a esquerda espelha: a primeira coluna fica à direita, uma palavra lida na horizontal na grade corre da direita para a esquerda e os pontos de ligar ficam frente a frente no meio.

#2 · A abertura da horta

script.js · linhas 58–73no código completo
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) } } },
] } };

A pintura é ancorada à página e mantém o seu lugar. A aba e o título ficam no fluxo da página, onde left é o começo da linha, e por isso vão para a direita sem coordenadas próprias. Os fólios continuam físicos, como os cabeçalhos, e nomeiam cada lado.

#3 · Duas edições, dois conjuntos de algarismos

script.js · linhas 227–232no código completo
// 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()];

A configuração é uma função, então cada composição recebe o seu próprio objeto, e a segunda só muda o idioma. ar-MA escreve em algarismos europeus os números dos exercícios, dos itens, do gabarito e dos fólios, e deixa todo o resto como estava: a direção, a encadernação, as letras abjad e as palavras do gabarito.

A receita completa

Sandbox
// ═══ 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 },

O script.js montado funciona como está: cole-o como script de módulo em qualquer página ou abra a receita no CodePen. Pasta da receita no GitHub ↗ (abre em uma nova aba)

Variações

#Imprima o livro do professor

As respostas então saem impressas no lugar, na cor de answers: os pontos ligados, as palavras nas lacunas, as caixas certas preenchidas e as palavras circuladas na grade.

-const exercises = { solutions: { placement: 'directive' } };
+const exercises = { edition: 'teacher', solutions: { placement: 'none' } };

#Escreva os exercícios em chinês

O caderno de exercícios chinês compõe os mesmos tipos de exercício com os seus próprios parênteses e numerais.

Erros comuns

Erro comum

Marque um livro árabe como 'ar', não com LANG

As edições de uma receita são en e es, mas uma amostra árabe é árabe nas duas: `locale: LANG` a comporia da esquerda para a direita, a encadernaria pela esquerda, numeraria as suas páginas 1 2 3 e chamaria as suas figuras de Figure ou Figura. Desde o postext 1.30 a marcação é também o idioma em que o texto é composto (em que é medido, pintado e incorporado), então, sob uma marcação inglesa ou espanhola, uma fonte como a Markazi Text não desenha as formas árabes das aspas angulares e dos pontos, e as linhas quebram em outro ponto. Escreva você mesmo a marcação: 'ar' (algarismos arábico-índicos, a convenção do Machrek), uma região como 'ar-EG' ou 'ar-SA', ou 'ar-MA', 'ar-DZ' ou 'ar-TN' para uma edição magrebina com algarismos europeus. Uma página latina que só cita árabe mantém o seu próprio locale. Texto da direita para a esquerda →

Erro comum

Fontes árabes precisam do seu arquivo arabic, pelo bloco arabic

O Fontsource serve Amiri, Noto Naskh Arabic ou Scheherazade New em um arquivo por subconjunto, e as letras árabes estão no arquivo arabic. loadFonts baixa só latin (e latin-ext), então na tela o árabe vem de uma fonte do sistema e é medido errado, e o fontsourceProvider entrega ao PDF esse arquivo latin, que imprime caixas vazias. Inclua o bloco arabic do kit, chame loadArabicFonts(FONTS, markdown) depois de loadFonts, com todos os pesos que as páginas usam em árabe listados em FONTS, e passe a renderToPdf fontProvider: arabicPdfProvider. Fontes árabes →

  • A maioria das fontes árabes não tem ✓ nem ✗: certo e errado se escrevem صح e خطأ, e o enunciado pede uma marca na caixa.
  • O caça-palavras preenche as casas vazias com as letras das suas próprias palavras, na forma isolada. Escolha palavras com letras variadas, ou a grade se enche de ة.

Créditos

Texto
Texto original, CC BY 4.0
Imagens
  • 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 · original
Fontes
Noto Naskh Arabic (SIL OFL 1.1) · Baloo Bhaijaan 2 (SIL OFL 1.1)
Sandbox