Zum Hauptinhalt springen
Rezept Nummer 172

Rezepte · Kapitel 12 · Schulbücher

Japanisches Übungsheft mit Lösungen auf dem Kopf

Zwei Seiten einer japanischen Übungsheftreihe, Rechnen waagerecht und Kanji in Spalten, unter jeder Aufgabe ihre 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 4

  • Fremdsprachiges Beispiel: noch keine deutsche Ausgabe
  • Endformat 182 × 257 mm
  • 1 Spalte
  • Klee One 12/22
  • Zen Maru Gothic
  • 4 Seiten
  • Stufe
  • Postext 1.59.0
  • In 105 ms gesetzt
  • 137 Zeilen Code

Kurz gesagt

Ein japanisches Übungsheft: Rechnungen, Kästchen, Auswahl und richtig oder falsch auf einer Seite, Kanji und Lesungen senkrecht auf einer anderen. Unter jeder Aufgabe stehen die Lösungen kopfüber; das Kind dreht das Heft zum Nachsehen.

Was Sie setzen

Zwei Seiten aus einer Übungsheftreihe für die dritte Klasse im Format B5. Die Rechenseite läuft waagerecht: ein hellblaues Band mit dem Fachetikett, dem Titel und einem Tanuki als Maskottchen, eine Linie für den Namen und ein Kästchen für die Punkte, danach ひっ算 (schriftliches Rechnen) mit einem Kästchen für jede Ziffer des Ergebnisses, Zahlenkästchen hinter sechs Rechnungen, Auswahlantworten ア イ ウ in einer Reihe, ○×-Aussagen mit einer Klammer am Zeilenende und zwei Textaufgaben mit Linien für den Rechenweg. Die Kanji-Seite ist so gesetzt, wie ein 国語-Heft gedruckt wird, von oben nach unten und von rechts nach links: Lesungen mit einem Kästchen für das Kanji, unterstrichene Wörter, deren Lesung in Klammern kommt, Antworten zum Einkreisen und eine Bedeutung zum Auswählen. Unter jeder Aufgabe stehen ihre Lösungen kopfüber in kleiner grauer Schrift. Das Kind sieht, wo sie stehen, kann sie nicht auf einen Blick lesen und dreht das Heft zum Nachsehen.

Dieses Rezept beantwortet

  • Wie drucke ich die Lösungen auf dem Kopf unter eine Übung?
  • Wie setze ich eine japanische Übungsseite in senkrechten Spalten mit derselben Gestaltung wie die waagerechte?
  • Wie setze ich die schriftliche Division so, wie die Schulen jedes Landes sie schreiben?

Die kurze Antwort

script.js · Zeilen 35–55im vollständigen Code
// `placement: 'inverted'` sets each exercise's key right after it in a box turned 180°: the
// pupil sees where the answers are without reading them, and turns the book to check. The
// key's words come from the exercise (the options' katakana, ○ and ×, the operations), so
// the Markdown holds nothing twice.
const drill = {
  id: 'drill',
  number: { shape: 'square', fontFamily: TEXT, fontWeight: 600, background: col('blue') },
  instruction: { fontFamily: ROUND, bold: false },
  options: { layout: 'row' }, // ア イ ウ side by side (the default labels in Japanese)
  trueFalse: { look: 'bracket' }, // ( ) for ○ or ×
  blank: { look: 'box', width: 'answer', color: col('rule') }, // □ to write in
  area: { kind: 'lines', color: col('rule') },
  grid: { rule: col('rule') },
  solutions: { placement: 'inverted', box: 'kotae' },
  marginTop: em(1.1), marginBottom: em(0.4),
};
const kotae = { id: 'kotae', title: '', backgroundEnabled: false, border: { enabled: false },
  padding: { top: pt(0), right: pt(0), bottom: pt(0), left: pt(0) },
  body: { fontFamily: ROUND, fontSize: pt(8), lineHeight: pt(12), color: col('muted'),
    firstLineIndent: pt(0) },
  marginTop: mm(1), marginBottom: mm(2), keepTogether: true };

Zutaten

Schrift
Klee One, Zen Maru Gothic (SIL OFL 1.1)
Dateien
  • kitsune-600.jpg
  • tanuki-600.jpg
  • A young tanuki in a yellow school hat holding a big pencil. (Generated With Diffusion Models, eigener Text)
  • A fox cub in a red scarf reading a book. (Generated With Diffusion Models, eigener Text)

Zubereitung

#1 · Die Lösungen jeder Aufgabe umdrehen

Der Code steht oben in der kurzen Antwort. placement: 'inverted' setzt die Lösungen hinter jede Aufgabe in einen um 180° gedrehten Kasten, und dieser Kasten liegt im Kasten der Aufgabe selbst, sodass ein Seitenumbruch die beiden nie trennt. Die Lösungen entstehen aus der Aufgabe: die Rechnungen mit ihren Ergebnissen, das Katakana der richtigen Antwort, ○ und ×, die Wörter der Lücken. Der Kastenstil der Lösungen, kotae, setzt die Schrift nur klein und grau.

#2 · Ein Band für eine waagerechte und eine senkrechte Seite

script.js · Zeilen 59–76im vollständigen Code
// A heading design on a vertical page is laid along its column: x runs down the page and y
// to the left, so the same band stands at the right edge, from head to foot.
const BAND = 30; // mm: the band's depth (its height across, its width down)
const header = { enabled: true, minHeight: mm(BAND + 3), slot: { elements: [
  { kind: 'box', id: 'band', reserve: false, style: { backgroundColor: col('tint'),
    borderRadius: mm(4) }, placement: { anchor: { to: 'container', edge: 'top-left' },
    size: { width: 'fill', height: mm(BAND) } } },
  { kind: 'image', id: 'mascot', resourceId: '{attr.pic}', decorative: true, reserve: false,
    placement: { anchor: { to: 'container', edge: 'top-right' }, offset: { x: mm(-4), y: mm(1) },
      size: { width: mm(28), height: mm(28) } } },
  { kind: 'text', id: 'subject', content: '{attr.kicker}', fontFamily: ROUND, fontSize: pt(10),
    fontWeight: 700, color: col('ink'), box: { backgroundColor: col('sun'), borderRadius: mm(3),
      padding: { top: mm(0.6), bottom: mm(0.6), left: mm(2.4), right: mm(2.4) } },
    placement: { anchor: { to: 'container', edge: 'top-left' }, offset: { x: mm(5), y: mm(5) } } },
  { kind: 'text', id: 'title', content: '{titleText}', fontFamily: ROUND, fontSize: pt(20),
    fontWeight: 700, color: col('ink'),
    placement: { anchor: { to: '#subject', edge: 'below' }, offset: { x: mm(0), y: mm(2.5) } } },
] } };

Auf einer senkrechten Seite liegt die Gestaltung einer Überschrift entlang ihrer Spalte: x läuft die Seite hinab, y nach links. Das Band, an top-left verankert und so breit wie die Spalte, steht auf der Rechenseite oben und auf der Kanji-Seite am rechten Rand; das Maskottchen, an top-right verankert, sitzt auf beiden Seiten am anderen Ende des Bands. Keine Angabe in der Gestaltung nennt eine Richtung.

#3 · Zwei Hefte aus einem Text

script.js · Zeilen 271–279im vollständigen Code
// Two drill books of one series: arithmetic across, bound on the left; kanji in columns,
// bound on the right (vertical text binds there by itself).
const [sansu, kokugo] = markdown.split(/(?=^# 春のことば)/m);
const build = (text) => withLoadedFonts(() => buildDocument({ markdown: text, resources },
  config()), { ...kitFonts(FONTS), text: markdown });
const across = await build(sansu);
// 国語 is set in columns, top to bottom, right to left: the same design, turned.
writingMode = 'vertical-rl';
const docs = [across, await build(kokugo)];

Die Konfiguration ist eine Funktion, also bekommt jeder Satzlauf sein eigenes Objekt, und zwischen beiden ändert sich nur writingMode. Senkrecht gesetzt, bindet das 国語-Heft von selbst rechts; showBook legt jedes Heft auf seine Seite des Rückens. Der Text steht in Klee One, einer Schulbuchschrift, die Etiketten in Zen Maru Gothic; beide laden ihre senkrechte Zeichensetzung für die Klammern der Kanji-Seite.

Das ganze Rezept

Sandbox
// ═══ Postext Cookbook · Nº 172 · A Japanese drill with the answers upside down ═══
// https://postext.dev/en/cookbook/japanese-drill-upside-down-answers
// Code: MIT · Text: original (CC BY 4.0) · Pictures: generated with diffusion models
// Fonts: Klee One, Zen Maru Gothic (SIL OFL 1.1) · Needs postext ≥ 1.59.0
import {
  buildDocument, withLoadedFonts, renderPageToCanvas, registerResourceImage,
  loadVerticalAlternates,
} from 'https://esm.sh/postext';
import { renderToPdf, decompressWoff2 } from 'https://esm.sh/postext-pdf';

const LANG = 'ja'; // @lang: the language of the frame; the drill is Japanese in all
const RECIPE = 'japanese-drill-upside-down-answers';

// ─── 1 · Design ─────────────────────────────────────────────────────────────
// #region palette: a drill book's blue, a warm yellow and a pale sky for the band
const palette = {
  ink: '#23272c', // text
  blue: '#2a6cb0', // the accent: exercise numbers, the title band's rule, the score box
  sun: '#f2c14e', // the subject badge
  tint: '#eaf2fb', // the title band
  rule: '#a8bfd8', // writing lines and boxes
  muted: '#69717b', // folios, the name line, the upside-down answers
  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.blue, model: 'hex' } },
];
// #endregion
// 教科書体 for the text a child copies from, a round gothic for the labels.
const [TEXT, ROUND] = ['Klee One', 'Zen Maru Gothic'];

// #region answer: the answers printed upside down under each exercise
// `placement: 'inverted'` sets each exercise's key right after it in a box turned 180°: the
// pupil sees where the answers are without reading them, and turns the book to check. The
// key's words come from the exercise (the options' katakana, ○ and ×, the operations), so
// the Markdown holds nothing twice.
const drill = {
  id: 'drill',
  number: { shape: 'square', fontFamily: TEXT, fontWeight: 600, background: col('blue') },
  instruction: { fontFamily: ROUND, bold: false },
  options: { layout: 'row' }, // ア イ ウ side by side (the default labels in Japanese)
  trueFalse: { look: 'bracket' }, // ( ) for ○ or ×
  blank: { look: 'box', width: 'answer', color: col('rule') }, // □ to write in
  area: { kind: 'lines', color: col('rule') },
  grid: { rule: col('rule') },
  solutions: { placement: 'inverted', box: 'kotae' },

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 Lösungen am Ende sammeln

Ein Heft mit eigenem Lösungsheft hält die Lösungen aus den Seiten heraus: chapterEnd führt sie nach der letzten Aufgabe auf.

-  solutions: { placement: 'inverted', box: 'kotae' },
+  solutions: { placement: 'chapterEnd', box: 'kotae' },

#Eine Rätselseite setzen

Die Rätselseite dreht ihre Lösungen genauso um, auf Karten in zwei Spalten.

Häufige Fehler

Häufiger Fehler

Chinesische Schnitte werden in Teilstücken geladen, über den Block cjk

Fontsource liefert eine chinesische, japanische oder koreanische Familie als etwa hundert Dateien pro Schriftstärke aus, jede für einen Zeichenbereich. loadFonts holt nur die Datei latin, am Bildschirm stammen die Han-Zeichen also aus einer Systemschrift und werden falsch gemessen, und fontsourceProvider gibt dem PDF diese latin-Datei, die sie als leere Kästchen druckt. Führen Sie den Kit-Block cjk auf, rufen Sie loadCjkFonts(FONTS, markdown) nach loadFonts auf (einmal pro Stimme, mit dem Text, den sie setzt, wenn das Buch mehrere CJK-Schriften verwendet), und geben Sie renderToPdf fontProvider: cjkPdfProvider: Beide nehmen die Dateien, die die Zeichen des Textes enthalten. Chinesische, japanische und koreanische Schriften →

Häufiger Fehler

Zeichnen Sie japanischen Text mit 'ja' aus, nie mit zh-Hans oder LANG

Die Ausgaben eines Rezepts sind en und es, ein japanisches Beispiel ist aber in beiden Japanisch: `locale: LANG` würde es als Englisch oder Spanisch auszeichnen, und eine chinesische Auszeichnung würde es nach chinesischen Regeln setzen (Kaiming-Interpunktion, kleine Kana dürfen eine Zeile beginnen, 图 statt 図, chinesische Glyphenformen im PDF). Seit postext 1.30 ist die Auszeichnung auch die Sprache, in der der Text geformt wird (gemessen, gezeichnet und eingebettet). Jede Auszeichnung außer 'ja' liefert daher andere Glyphenformen als die japanischen (unter einer chinesischen Auszeichnung die chinesischen) und andere Zeilenumbrüche. Schreiben Sie 'ja': Das wählt die Region Japan (JLReq-Zeilenumbruch und -Interpunktion, Sesam-Betonungszeichen, Furigana-Abstände, die Beschriftungen 図 und 表) und schaltet die Silbentrennung ab. Der Lint schlägt bei einem Text mit Kana unter einer zh- oder ko-Auszeichnung fehl. Japanischer Zeilenumbruch (Kinsoku) →

  • Eine Lesung kann noch nicht über einer Lücke stehen: Ein Ruby in [[…]] gehört zur versteckten Antwort. Die Aufgabe 漢字の書き取り setzt jede Lesung in eine eigene Zeile und das Kästchen dahinter, drei pro Reihe in einer :::columns-Gruppe; auf der senkrechten Seite steht die Lesung neben dem Kästchen, wie Furigana.
  • Klee One gibt es nur in 400 und 600: boldFontWeight: 600 hält jeden fetten Abschnitt in einem Schnitt, den es gibt, auch die Nummern der Fragen und der Aufgaben.

Nachweise

Text
Eigener Text, CC BY 4.0
Bilder
  • A young tanuki in a yellow school hat holding a big pencil. · Generated With Diffusion Models · eigener Text
  • A fox cub in a red scarf reading a book. · Generated With Diffusion Models · eigener Text
Schriften
Klee One (SIL OFL 1.1) · Zen Maru Gothic (SIL OFL 1.1)
Sandbox