In breve
La pagina di giochi di una rivista per bambini sul mare. Ogni gioco sta nella sua scheda e le soluzioni sono stampate capovolte sotto: per controllarle, i lettori girano la rivista.
Che cosa comporrai
La pagina di giochi di Splash!, una rivista per bambini sul mare, su due pagine di formato A4 a due colonne. Un dipinto della barriera corallina riempie la parte alta della prima pagina, con il titolo sull’acqua libera. Sotto, ogni gioco sta in una scheda color crema con un numero corallo: un cruciverba costruito con sei animali marini e le loro definizioni, un crucipuzzle che nasconde otto parole in orizzontale, in verticale, in diagonale e al contrario, un indovinello con tre risposte da cerchiare, la vita di una tartaruga da riordinare, una frase in disordine da ricomporre e cuccioli di animali da collegare al loro nome. Sotto ogni gioco, dentro la sua scheda, le soluzioni sono stampate capovolte in piccoli caratteri grigi, come le hanno sempre nascoste le riviste di enigmistica.
Questa ricetta risponde a
- Come faccio un crucipuzzle o un cruciverba da un elenco di parole?
- Come stampo le soluzioni capovolte in fondo a un esercizio?
La risposta breve
// placement 'inverted' sets each puzzle's key after it in a box turned 180°, inside the
// puzzle's card, so a page break never parts a puzzle from its answers. The key is made
// from the puzzle: the crossword's words by number, the ringed option, the right order.
const puzzle = {
id: 'puzzle',
box: 'card', // the card each puzzle sits on (a calloutStyles id)
number: { shape: 'disc', fontFamily: DISPLAY, background: col('coral') },
instruction: { fontFamily: TEXT, bold: false },
options: { marker: 'circle', labels: 'none' }, // a ring to colour in, no letters
grid: { fontFamily: LABEL, rule: col('sea'), cell: em(1.45) },
match: { color: col('sea') },
area: { kind: 'lines', color: col('sea') },
answers: { color: col('coral'), fontFamily: LABEL },
solutions: { placement: 'inverted', box: 'turned' },
marginTop: mm(0), marginBottom: mm(0),
};
const card = { id: 'card', title: '', background: col('card'), borderRadius: mm(4),
padding: { top: mm(3.5), right: mm(4), bottom: mm(3), left: mm(4) },
titleStyle: { fontFamily: DISPLAY, fontSize: pt(15), fontWeight: 700, color: col('ink') },
body: { fontFamily: TEXT, fontSize: pt(10.5), lineHeight: pt(15), color: col('ink'),
firstLineIndent: pt(0) },
marginTop: mm(0), marginBottom: mm(5), keepTogether: true };
const turned = { id: 'turned', title: '', backgroundEnabled: false, border: { enabled: false },
padding: { top: pt(0), right: pt(0), bottom: pt(0), left: pt(0) },
body: { fontFamily: LABEL, fontSize: pt(8.5), lineHeight: pt(11), color: col('muted'),
firstLineIndent: pt(0) },
marginTop: mm(2), marginBottom: mm(0) };
Ingredienti
- Funzionalità
- Crucipuzzle e cruciverbaSoluzioniStili di esercizioEserciziScelta e vero o falsoCollegare e classificareRiordinareDomande aperte e spazi di scritturaRiquadriTre o più colonneAperture progettateAttributi dei titoliImmagini nei progetti di paginaFigure e tabelle come risorseTavolozza di colori semanticaEsportazione in PDF
- Usa anche
- Riquadri che si dividono o restano interiBilanciamento delle colonneFigure proprio quiFascia di capitolo a tutta larghezzaTestatine secondo il ruolo della paginaStili di paragrafoFont incorporati nel PDFTipi di risorsa personalizzati
- Tipo
- Baloo 2, Nunito, Fredoka (SIL OFL 1.1)
- Risorse
hatchling-600.jpgreef-1600x792.jpg- A coral reef with a smiling sea turtle, an octopus, a clownfish, a pufferfish and a seahorse under sunbeams. (Generated With Diffusion Models, originale)
- A baby sea turtle hatching from its egg on the sand. (Generated With Diffusion Models, originale)
Preparazione
#1 · Ogni gioco nella sua scheda, con le soluzioni girate
Il codice è la risposta breve qui sopra. Il box dello stile di esercizio nomina uno stile di riquadro, quindi ogni gioco è composto su una scheda, con il numero in un cerchio e il titolo come prima riga della consegna. placement: 'inverted' mette le soluzioni dopo ogni gioco in un riquadro ruotato di 180°, dentro la scheda, così gioco e soluzioni non finiscono mai su pagine diverse; le griglie e la riga per scrivere restano dentro il margine interno della scheda.
#2 · Lascia che il motore costruisca le griglie
Il Markdown contiene solo le parole: - OCTOPUS: Eight arms and three hearts per il cruciverba, - SHELL per il crucipuzzle. Il motore dispone il cruciverba in modo che ogni parola ne incroci un’altra e numera gli inizi in ordine di lettura. Nasconde le parole del crucipuzzle nelle direzioni indicate dalla direttiva (directions="across down diagonal backwards") e riempie il resto con le lettere delle stesse parole. Entrambe le griglie partono da un seme fisso, quindi sono le stesse a ogni composizione e in ogni output, e l’edizione spagnola costruisce la propria griglia con le proprie parole.
#3 · Una barriera corallina su entrambe le colonne
const BAND = 104; // mm from the top edge: the painting's height at the page's width
const opener = { enabled: true, minHeight: mm(BAND - 16 + 6), slot: { elements: [
{ kind: 'image', id: 'reef', resourceId: 'reef', decorative: true, reserve: false,
placement: { anchor: { to: 'page', edge: 'top-left' },
size: { width: mm(210), height: mm(BAND) } } },
{ kind: 'text', id: 'kicker', content: '{attr.kicker}', fontFamily: LABEL, fontSize: pt(11),
fontWeight: 600, color: col('paper'), textTransform: 'uppercase', letterSpacing: pt(2),
box: { backgroundColor: col('coral'), borderRadius: mm(2),
padding: { top: mm(0.8), bottom: mm(0.8), left: mm(2.4), right: mm(2.2) } },
placement: { anchor: { to: 'page', edge: 'top-left' }, offset: { x: mm(16), y: mm(14) } } },
{ kind: 'text', id: 'title', content: '{titleText}', fontFamily: DISPLAY, fontSize: pt(56),
fontWeight: 800, lineHeight: 1, color: col('paper'),
placement: { anchor: { to: '#kicker', edge: 'below' }, offset: { x: mm(0), y: mm(3) } } },
{ kind: 'text', id: 'sub', content: '{attr.sub}', fontFamily: TEXT, fontSize: pt(12),
fontWeight: 700, color: col('paper'), overflow: 'wrap', align: 'left',
box: { backgroundColor: col('ink'), borderRadius: mm(2),
padding: { top: mm(1.5), bottom: mm(1.5), left: mm(3), right: mm(3) } },
placement: { anchor: { to: '#title', edge: 'below' }, offset: { x: mm(0), y: mm(2) },
size: { width: mm(110) } } },
] } };
L’apertura occupa entrambe le colonne (span: 'page'), quindi i giochi cominciano sotto il dipinto in ogni colonna. L’immagine è ritagliata sulle proporzioni della fascia e ancorata alla pagina, così esce al vivo in alto e ai lati; il sommario sta in un riquadro scuro per leggersi sopra l’acqua.
La ricetta completa
// ═══ Postext Cookbook · Nº 174 · A puzzle page with the answers upside down ═══════
// https://postext.dev/en/cookbook/puzzle-page-upside-down-answers
// Code: MIT · Text: original (CC BY 4.0) · Pictures: generated with diffusion models
// Fonts: Baloo 2, Nunito, Fredoka (SIL OFL 1.1) · Needs postext ≥ 1.59.0
import {
buildDocumentWithFonts, renderPageToCanvas, registerResourceImage,
} from 'https://esm.sh/postext';
import { renderToPdf, decompressWoff2 } from 'https://esm.sh/postext-pdf';
const LANG = 'en'; // @lang: the language of the sample document ('en' | 'es')
const RECIPE = 'puzzle-page-upside-down-answers';
// ─── 1 · Design ─────────────────────────────────────────────────────────────
// #region palette: reef colours: deep blue ink, coral, sea green, a sandy paper
const palette = {
ink: '#16324a', // text: a deep sea blue
coral: '#e8573f', // the accent: puzzle numbers, the title kicker
sea: '#0f8b8d', // the second: crossword and word-search rules, the riddle's rings
sun: '#ffc93c', // the turtle card's badge
card: '#fff4e0', // the puzzle cards
muted: '#5d7180', // answers, colophon, folio
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.coral, model: 'hex' } },
];
// #endregion
const [DISPLAY, TEXT, LABEL] = ['Baloo 2', 'Nunito', 'Fredoka'];
// #region answer: every puzzle on a card, its answers turned upside down under it
// placement 'inverted' sets each puzzle's key after it in a box turned 180°, inside the
// puzzle's card, so a page break never parts a puzzle from its answers. The key is made
// from the puzzle: the crossword's words by number, the ringed option, the right order.
const puzzle = {
id: 'puzzle',
box: 'card', // the card each puzzle sits on (a calloutStyles id)
number: { shape: 'disc', fontFamily: DISPLAY, background: col('coral') },
instruction: { fontFamily: TEXT, bold: false },
options: { marker: 'circle', labels: 'none' }, // a ring to colour in, no letters
grid: { fontFamily: LABEL, rule: col('sea'), cell: em(1.45) },
match: { color: col('sea') },
area: { kind: 'lines', color: col('sea') },
answers: { color: col('coral'), fontFamily: LABEL },
solutions: { placement: 'inverted', box: 'turned' },
marginTop: mm(0), marginBottom: mm(0),
};
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
#Nascondi l’elenco di parole
Un crucipuzzle più difficile stampa solo la griglia: aggiungi hidden alla direttiva.
-:::exercise{type=wordsearch size=9 directions="across down diagonal backwards"}
+:::exercise{type=wordsearch size=9 directions="across down diagonal backwards" hidden}#Stampa le soluzioni alla fine della rivista
chapterEnd raccoglie tutte le soluzioni alla fine invece di capovolgerle una per una.
- solutions: { placement: 'inverted', box: 'turned' },
+ solutions: { placement: 'chapterEnd' },Errori frequenti
- Una parola del cruciverba che non ne incrocia nessun’altra resta fuori e viene segnalata con
exerciseWordUnplaced. Scegli parole che abbiano lettere in comune, o aggiungine una che colleghi due gruppi. - Una scheda di gioco resta intera, quindi un cruciverba alto passa alla colonna successiva quando non ci sta: controlla l’edizione spagnola, che ha parole più lunghe.
Crediti
- Ricetta
- Ignacio Ferro
- Testo
- Testo originale, CC BY 4.0
- Immagini
- A coral reef with a smiling sea turtle, an octopus, a clownfish, a pufferfish and a seahorse under sunbeams. · Generated With Diffusion Models · originale
- A baby sea turtle hatching from its egg on the sand. · Generated With Diffusion Models · originale
- Font
- Baloo 2 (SIL OFL 1.1) · Nunito (SIL OFL 1.1) · Fredoka (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)


