Kurz gesagt
Die Rätselseite eines Kindermagazins über das Meer. Jedes Rätsel steht auf einer eigenen Karte, die Lösungen sind darunter auf dem Kopf gedruckt, und zum Nachsehen drehen die Kinder das Heft um.
Was Sie setzen
Die Rätselseite von Splash!, einem Kindermagazin über das Meer, auf zwei Seiten in A4 mit zwei Spalten. Ein Gemälde des Riffs füllt den oberen Teil der ersten Seite, der Titel steht über dem offenen Wasser. Darunter steht jedes Rätsel auf einer cremefarbenen Karte mit einer korallroten Nummer: ein Kreuzworträtsel aus sechs Meerestieren und ihren Fragen, ein Suchsel, das acht Wörter waagerecht, senkrecht, diagonal und rückwärts versteckt, eine Rätselfrage mit drei Antworten zum Einkreisen, das Leben einer Schildkröte zum Ordnen, ein Satz mit vertauschten Wörtern und Tierkinder, die mit ihrem Namen verbunden werden. Unter jedem Rätsel, auf seiner Karte, stehen die Lösungen in kleiner grauer Schrift auf dem Kopf, so wie Rätselhefte sie schon immer versteckt haben.
Dieses Rezept beantwortet
- Wie mache ich aus einer Wortliste ein Suchsel oder ein Kreuzworträtsel?
- Wie drucke ich die Lösungen auf dem Kopf unter eine Übung?
Die kurze Antwort
// 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) };
Zutaten
- Funktionen
- Suchsel und KreuzworträtselLösungenÜbungsstileÜbungenAuswahl und richtig oder falschZuordnen und sortierenOrdnenOffene Fragen und SchreibflächenKästenDrei oder mehr SpaltenGestaltete AuftakteÜberschriftenattributeBilder in SeitengestaltungenAbbildungen und Tabellen als RessourcenSemantische FarbpalettePDF-Export
- Nutzt außerdem
- Kästen, die sich teilen oder ganz bleibenSpaltenausgleichAbbildungen genau hierKapitelband über die ganze BreiteKopfzeilen nach SeitenrolleAbsatzformateIm PDF eingebettete SchriftenEigene Ressourcentypen
- Schrift
- Baloo 2, Nunito, Fredoka (SIL OFL 1.1)
- Dateien
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, eigener Text)
- A baby sea turtle hatching from its egg on the sand. (Generated With Diffusion Models, eigener Text)
Zubereitung
#1 · Jedes Rätsel auf eine Karte setzen, die Lösungen gedreht
Der Code steht oben in der kurzen Antwort. Das box des Übungsstils nennt einen Kastenstil, deshalb steht jedes Rätsel auf einer Karte, mit seiner Nummer in einem Kreis und seinem Titel als erster Zeile der Aufgabenstellung. placement: 'inverted' setzt die Lösungen hinter jedes Rätsel in einen um 180° gedrehten Kasten innerhalb der Karte, sodass Rätsel und Lösung nie auf verschiedene Seiten fallen; die Raster und die Schreiblinie bleiben im Innenabstand der Karte.
#2 · Die Raster von der Engine bauen lassen
Das Markdown enthält nur die Wörter: - OCTOPUS: Eight arms and three hearts für das Kreuzworträtsel, - SHELL für das Suchsel. Die Engine legt das Kreuzworträtsel so an, dass jedes Wort ein anderes kreuzt, und nummeriert die Anfänge in Leserichtung. Die Suchwörter versteckt sie in den Richtungen, die der Block nennt (directions="across down diagonal backwards"), und füllt den Rest mit den Buchstaben derselben Wörter. Beide Raster hängen an einem festen Startwert, sie sehen also bei jedem Lauf und in jeder Ausgabe gleich aus, und die spanische Ausgabe baut ihr eigenes Raster aus ihren eigenen Wörtern.
#3 · Ein Riff über beide Spalten
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) } } },
] } };
Der Auftakt läuft über beide Spalten (span: 'page'), deshalb beginnen die Rätsel in jeder Spalte unter dem Gemälde. Das Bild ist auf die Proportionen des Bands zugeschnitten und an der Seite verankert, so läuft es oben und an den Seiten in den Anschnitt. Der Vorspann steht in einem dunklen Kasten, damit er sich über dem Wasser lesen lässt.
Das ganze Rezept
// ═══ 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),
};
Das zusammengesetzte script.js läuft unverändert: Fügen Sie es in das Modulskript einer beliebigen Seite ein, oder öffnen Sie das Rezept auf CodePen. Ordner des Rezepts auf GitHub ↗ (öffnet sich in einem neuen Tab)
Varianten
#Die Wortliste ausblenden
Ein schwereres Suchsel druckt nur das Raster: Fügen Sie dem Block hidden hinzu.
-:::exercise{type=wordsearch size=9 directions="across down diagonal backwards"}
+:::exercise{type=wordsearch size=9 directions="across down diagonal backwards" hidden}#Die Lösungen am Ende des Hefts drucken
chapterEnd sammelt alle Lösungen am Ende, statt jede einzeln zu drehen.
- solutions: { placement: 'inverted', box: 'turned' },
+ solutions: { placement: 'chapterEnd' },Häufige Fehler
- Ein Wort des Kreuzworträtsels, das kein anderes kreuzt, fällt weg und wird als
exerciseWordUnplacedgemeldet. Wählen Sie Wörter mit gemeinsamen Buchstaben, oder ergänzen Sie eines, das zwei Gruppen verbindet. - Eine Rätselkarte bleibt zusammen, deshalb rückt ein hohes Kreuzworträtsel in die nächste Spalte, wenn es nicht passt. Prüfen Sie die spanische Ausgabe, deren Wörter länger sind.
Nachweise
- Rezept
- Ignacio Ferro
- Text
- Eigener Text, CC BY 4.0
- Bilder
- A coral reef with a smiling sea turtle, an octopus, a clownfish, a pufferfish and a seahorse under sunbeams. · Generated With Diffusion Models · eigener Text
- A baby sea turtle hatching from its egg on the sand. · Generated With Diffusion Models · eigener Text
- Schriften
- Baloo 2 (SIL OFL 1.1) · Nunito (SIL OFL 1.1) · Fredoka (SIL OFL 1.1)
- Code
- MIT, wie Postext
Diesen Text bearbeiten ↗ (öffnet sich in einem neuen Tab)Ordner des Rezepts auf GitHub ↗ (öffnet sich in einem neuen Tab)


