Zum Hauptinhalt springen
Rezept Nummer 174

Rezepte · Kapitel 12 · Schulbücher

Eine Rätselseite mit Lösungen auf dem Kopf

Die Rätselseite eines Kindermagazins: Kreuzworträtsel, Suchsel, Rätselfrage, eine Geschichte zum Ordnen und mehr auf Karten, die Lösungen auf dem Kopf.

Auf dieser Seite
Ausgabe
Canvas · PDF
Stufe
Mittel
Postext
Getestet mit Postext 1.59.0
Erfordert ≥ 1.59.0 · postext-pdf ≥ 1.59.0
Lizenz
Aktualisiert am 24. Okt. 2026
Code MIT · Text CC BY 4.0

S. 1 von 2

  • Englisches Beispiel: noch keine deutsche Ausgabe
  • Endformat 210 × 280 mm
  • 2 Spalten, Spaltenabstand 7 mm
  • Nunito 10,5/15
  • Baloo 2
  • Fredoka
  • 2 Seiten
  • Stufe
  • Postext 1.59.0
  • In 71 ms gesetzt
  • 129 Zeilen Code

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

script.js · Zeilen 33–59im vollständigen Code
// 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

Schrift
Baloo 2, Nunito, Fredoka (SIL OFL 1.1)
Dateien
  • hatchling-600.jpg
  • reef-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

script.js · Zeilen 63–82im vollständigen Code
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

Sandbox
// ═══ 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 exerciseWordUnplaced gemeldet. 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

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)
Sandbox