Japanese consulting-style PPTX
This skill adds a Japanese-specific layer on top of the pptx skill. If the pptx skill is available (claude.ai: /mnt/skills/public/pptx/SKILL.md), read it first for the pptxgenjs footguns and the QA commands (validate.py, soffice → pdftoppm). Everything below overrides or extends it. This skill's own scripts need only Node + pptxgenjs and Python 3 + python-pptx.
Why this exists
Japanese slides made by default pipelines look machine-made for three reasons, in this order of visibility:
- 文体 – です・ます explanations, hedges (〜と言えるでしょう), empty words (さまざまな/効率的に), translated syntax. Fixed with
references/writing-style.mdplus the linter. - 配置 – centered titles, identical three-card rows, accent stripes, uneven gaps, titles that move between slides. Fixed with
references/layout-and-patterns.mdand fixed layout zones in the library. - 仕上げ – pptxgenjs leaves the East Asian font empty, so PowerPoint renders Japanese in 游ゴシック Light; tags text en-US; ignores kinsoku. Fixed by
scripts/postprocess_jp.py, run automatically by the library.
The cause of AI-sounding text is emptiness, not particular words. Banning a phrase makes the model substitute a synonym. So fix the cause: add specifics (who, what, how many, by when) or delete the sentence. writing-style.md §0 explains this; follow its three-pass rewrite (削る → 足す → 揃える).
Overrides of the pptx skill
| pptx skill says | Here |
|---|---|
| Title 36–44pt, body 14–16pt | Title 24pt, lead 14, body 14, notes 10. Japanese consulting decks are read documents; long Japanese titles do not fit at 36pt. Use 18pt+ body only if the deck is projected. |
| Fonts from the safe list | Latin/numerals Arial, Japanese BIZ UDPゴシック (alternatives: 游ゴシック, メイリオ). Set font: in createDeck. QA renders with a substitute font, so leave ~10% slack in boxes. |
| Every slide needs a visual element | A structured table, columns or process counts as visual. Avoid bullet-only slides; never add decorative icons to satisfy this. |
| No accent lines, no color bars | Same here, and also no card edge stripes or full-width header bands. |
Workflow
- Storyline first. Write the action titles for every slide as a list and read them in order. If the titles alone do not tell the story, fix the story before any layout (
writing-style.md§2). - Write copy per slide applying
writing-style.md§1–§5: element-by-element register, no です・ます in titles or bullets, numbers with 基準 and 出所. - Pick a pattern per slide from the table in
layout-and-patterns.md§2. Neighbouring slides must not use the same pattern. - Build with the library (below). Do not hand-place the title, lead, notes, or page number; the layouts own them.
- Lint:
python3 scripts/lint_jp_deck.py deck.pptx. Fix every ERROR and read every WARN. Re-run until no ERROR remains. - Validate and render:
validate.py, then convert to images and inspect each slide (seebeautify.md§4–§5). Look at slides with fresh eyes; check titles for orphan lines and blocks for gaps under 0.3in. - Report the lint summary and any WARN you kept on purpose, with the reason.
If the user supplies existing Japanese slides to fix, run the linter first to get a defect list, then edit text per writing-style.md and keep their layout unless it violates the layout rules.
Library
const { createDeck } = require("<skill dir>/scripts/jp_deck_lib.js");
const d = createDeck({ font: "biz-ud", palette: "ink", title: "…", company: "…", footerText: "Confidential" });
const { L } = d; // zones in inches: L.body, L.note, …
d.cover({ title, subtitle, meta });
const s = d.content({ title: "結論を言い切るタイトル", lead: "対象・条件", section: "章名" });
d.bullets(s, ["体言止めの行", { t: "補足", lv: 1 }], { x: L.body.x, y: L.body.y, w: 6, h: 3 });
d.barChart(s, { labels, series: [{ name, values }] }, rect, { hi: 0 });
d.table(s, rows, rect, { numCols: [1, 2], hlRow: 2 });
d.columns(s, [{ head, items, foot, hl }], rect);
d.chevrons(s, [{ head, items, out, hl }], rect);
d.takeaway(s, "示唆の一文"); // bottom of body zone
d.note(s, ["出所:…", "注:…"]);
await d.finish("out.pptx"); // writes, then runs postprocess_jp.py
scripts/sample_deck.js builds an 8-slide reference deck that uses every component; read it before writing a new build script. Color options for lines, tables, and charts need hex from d.THEME.colors; text and fills take scheme colors d.C.*. postprocess_jp.py fails loudly if a scheme color leaked into a hex-only option.
Do not call pres.addText with a custom fontFace; the theme fonts carry the Latin and Japanese pairing. A hard-coded font breaks the East Asian mapping.
Reference files
references/writing-style.md– register per element, action titles, the AI-smell catalog (NG → OK), numeric notation, bullet rules, rewrite passes, pre-flight checklist. Read before writing any slide text.references/layout-and-patterns.md– zones and grid, content → pattern table, alignment principles, AI-looking layouts to avoid, chart and table conventions.references/beautify.md– color system, type scale, shape rules, finishing checks, rendering caveats.
Linter
scripts/lint_jp_deck.py deck.pptx [--strict] [--json] [--ignore RULE …] reads the .pptx with python-pptx and reports ERROR / WARN / INFO per slide. Exit code 1 on any ERROR (or any WARN with --strict). It covers the ★ items in writing-style.md §3 plus fonts, language tags, overflow estimates, overlaps, tight gaps, margins, title position drift, centered body text, and layout repetition. It cannot judge whether a title is a good claim; do that by reading the titles in order.