PPTX Visible Academic Deck ZH
Core Goal
Create an academic PPT that feels designed, readable, and presentation-ready. Use the user's template style, keep PowerPoint visibly open, switch to each slide as it is generated, write complete speaker notes, and validate the rendered slides.
This skill is specialized for local Microsoft PowerPoint COM workflows. Combine it with the general pptx skill when lower-level PPTX parsing, thumbnailing, XML editing, or generic PPT conversion is needed.
When the source is a PDF, combine this skill with the general pdf skill for text extraction, page rendering, table extraction, OCR, and image extraction.
Default Workflow
Run environment discovery before assuming paths.
Use scripts/discover_powerpoint.py to locate POWERPNT.EXE, check likely Office install records, and optionally verify COM. Different users may install Office/PowerPoint in different folders; do not hardcode one user's C:\Program Files\Microsoft Office\root\Office16\POWERPNT.EXE path unless discovery confirms it.
Read the paper/report and any provided template.
Extract the argument, empirical design, key results, mechanisms, policy implications, and any figures/tables. Do not make a chapter-by-chapter slide dump.
Select the visual baseline.
If the user specifies a .pptx or .potx template, use that file as the visual authority. If no template is specified, do not reuse a private local template from a prior user; create a clean deck with the fallback academic style in Template Selection.
Analyze the selected template or fallback style before creating slides.
For a user-provided template, export template thumbnails, inspect fonts, color palette, logos, header/footer lines, title page style, content card style, notes conventions, and image assets. For the fallback style, define the palette, title band, card grammar, formula treatment, and notes convention before generating slides.
Open the user-provided template visibly as a reference when one exists, but create a clean new presentation.
Do not overwrite the template. Presentation.Save can fail if a copied template is treated as read-only; prefer Presentations.Add() and SaveAs() a new .pptx. If no template is provided, create the new presentation directly and apply the fallback academic style.
Build a narrative deck plan.
Compress the source into a talk sequence such as: problem/contribution -> framework/roadmap -> data and identification -> main result -> mechanisms -> counterfactual or policy -> conclusion.
Generate slides through visible PowerPoint COM.
app.Visible = True is not enough. Before editing each slide, activate the presentation window and call ActiveWindow.View.GotoSlide(slide.SlideIndex) with a short delay so the user can see the process.
Write speaker notes for every slide.
Notes are a default requirement for academic decks and a hard gate when the template has notes. Write, read back, fall back if needed, and block delivery if any slide has empty notes unless the user explicitly asks for no notes.
Export all slides to PNG and inspect.
Create a contact sheet sorted by slide number, zoom into critical slides, fix issues, and re-export after fixes.
Environment Discovery Preflight
Before visible deck generation on a new computer, locate PowerPoint and verify automation:
python scripts/discover_powerpoint.py --out powerpoint_discovery.json
python scripts/discover_powerpoint.py --check-com --out powerpoint_discovery_com.json
Use the JSON fields as follows:
preferred_executable: path to use when a script needs to launch PowerPoint explicitly.
found_executables: fallback candidate paths.
uninstall_records: version and install-location clues for diagnostics.
com.available: whether direct COM automation worked when --check-com was used.
If no executable is found but COM works, direct PowerPoint.Application automation may still be enough. If neither executable nor COM is available, stop and tell the user PowerPoint is not discoverable on this machine instead of silently producing a non-visible substitute.
Visible editing is mandatory when requested:
- Start with
PowerPoint.Application.
- Set
Visible = True.
- Activate the target presentation window.
- Call
ActiveWindow.View.GotoSlide(slide.SlideIndex) before editing each slide, with a short delay.
- Do not leave the visible UI on one slide while editing later slides in the background.
Narrative Compression
PPT is not a paper summary. It is a presentation route.
Use this structure for empirical economics or policy research by default:
| Slide role |
Preferred visual grammar |
| Opening/title |
Template title style, concise topic signal |
| Research question |
Left-side problem path + right-side question cards |
| Contribution |
Strict 2x2 equal-width/equal-height matrix |
| Technical route |
Four-stage or five-stage large process cards |
| Data/institution |
Figure + numeric callout cards |
| Identification |
Timeline, shock card, or intuition cards |
| Main result |
Large result card + formula/result card |
| Mechanism |
Decomposition formula + channel cards |
| Heterogeneity |
Segmented cards or small multiples, not dense tables |
| Policy/counterfactual |
Scenario cards + directional arrows + conclusion band |
| Conclusion |
Three takeaways or policy toolbox |
Change the sequence when the source demands it, but keep each slide's component grammar tied to its logical role.
Template Selection
Follow this priority order:
- User-specified template path.
Use it as the visual source of truth: fonts, colors, title bars, header/footer rules, logos, page-number style, spacing rhythm, and note conventions. Create a new
.pptx; never overwrite the template.
- Project-local template if the user explicitly says to use the current project's default.
Discover it from project notes or a clearly named template folder, then still inspect it before use.
- Built-in fallback style when no template is specified.
Use a restrained Chinese academic forum style: white or very light background, strong but thin title band, blue/teal primary accent, one warm secondary accent, structured cards, small section labels, consistent page number/footer line, and no decorative marketing graphics.
The fallback style is not a bundled .pptx file. It is a reproducible layout system generated through PowerPoint shapes, text boxes, formula PNG assets, and consistent geometry. This makes the skill portable to other users without copying a private template.
Template Reuse
Preserve the template's identity without copying stale content:
- Reuse logos, title bars, header lines, page numbers, color accents, and spacing rhythm.
- Remove old template titles, placeholders, old project names, and stale notes.
- Keep template-like visual assets if they support the new deck.
- Use a stable output path and create an accepted-baseline copy when the user approves a version.
For Chinese academic forum templates, a quiet white content page with a strong title band, thin blue header line, structured cards, and restrained accent colors often works better than a flashy generic business deck.
Visible PowerPoint COM
Use direct COM when the user wants to watch local editing:
import win32com.client as win32
app = win32.Dispatch("PowerPoint.Application")
app.Visible = True
For each slide:
slide = pres.Slides.Add(index, layout)
app.ActiveWindow.View.GotoSlide(slide.SlideIndex)
time.sleep(0.18)
If PowerPoint has multiple windows, activate the target presentation window before GotoSlide. Do not leave the UI stuck on slide 1 while the script edits later slides invisibly.
When inserting images:
- Validate optional image paths with
Path(path).is_file().
- Do not use
Path("").exists(), because empty strings resolve to the current directory on Windows.
- If an optional figure is missing, skip it or use a layout fallback instead of letting
Shapes.AddPicture crash.
PDF Source And Figure Assets
When the user provides a PDF paper rather than .tex, do not assume the original figure files exist. Build slide-ready assets from the PDF itself.
Use this decision order:
- Extract text and locate figure/table candidates.
Use PDF text extraction to find captions such as
Figure 1, Fig. 1, Table 2, 图1, 表2, and nearby section names. Record page numbers and captions before choosing slide visuals.
- Render candidate pages to high-resolution PNG for visual inspection.
This is the default reliable path because academic PDF figures are often vector drawings or mixed text/vector objects, not standalone raster images.
- Crop the figure/table region from the rendered page.
Use fractional crop boxes after inspecting the rendered page. Keep captions only when they help interpretation; otherwise replace the caption with a clean slide title or note.
- Extract embedded images only as a secondary path.
pdfimages or PDF image extraction may return panel fragments, logos, texture pieces, or raw images without axes/labels when the published figure is vector. Use extracted images only if they preserve the full figure semantics.
- Insert the cleaned PNG into PowerPoint and perform visual QA.
Check resolution, aspect ratio, legibility of axis labels, absence of page headers/footers, and whether the figure should be paired with number cards or explanatory callouts.
Bundled helper script:
# Render pages 5-7 to PNG for inspection.
python scripts/extract_pdf_assets.py paper.pdf --out-dir outputs/pdf_assets --pages 5-7 --render-pages --dpi 300
# Crop one figure from page 6 using fractional coordinates.
python scripts/extract_pdf_assets.py paper.pdf --out-dir outputs/pdf_assets --crop-page 6 --crop 0.10,0.18,0.92,0.62 --name fig2_main --dpi 300
# Try embedded image extraction when the PDF stores full raster figures.
python scripts/extract_pdf_assets.py paper.pdf --out-dir outputs/pdf_assets --pages 5-7 --extract-images --min-width 500 --min-height 350
Dependencies: prefer PyMuPDF (fitz) and Pillow; use Poppler tools such as pdftoppm or pdfimages as fallbacks when available.
Crop rules for PPT:
- Use 250-300 dpi for ordinary slide figures; use 400 dpi for small labels or dense tables.
- Avoid screenshots taken from a low-zoom PDF viewer; render from the PDF file directly.
- Preserve the full plot area, axes, legends, and panel labels.
- Remove surrounding PDF whitespace, page numbers, journal headers, and unrelated captions.
- If a table is too dense after cropping, convert it into cards instead of inserting the full table image.
- Save extracted assets under a stable output folder and insert by absolute path after
Path(path).is_file() succeeds.
Slide Design Rules
Use fixed ratios and formula-derived positions rather than eyeballing.
Recommended academic content sizes:
- Main content slide title: about 26-30 pt.
- Section label or eyebrow: about 13-15 pt.
- Body card text: about 16-18 pt.
- Dense auxiliary text or captions: about 10-12 pt.
- Key numbers: about 30-36 pt.
Avoid body text below 12 pt except footers, captions, or small labels. If a table requires 10-11 pt body text and still looks sparse, replace the table with cards.
Use semantic colors:
- Blue: institution, identification, baseline design.
- Teal: data, mechanism, allocation.
- Gold: structure, cost, model objects.
- Green: policy, welfare, toolbox.
- Red: risk, constraints, environmental burden.
Do not make every slide the same horizontal bar layout. Mix:
- Left path + right question cards.
- 2x2 contribution matrix.
- Four-stage route cards.
- Chart plus number cards.
- Formula/result cards.
- Three-channel mechanism cards.
- Scenario cards.
- Conclusion band.
Alignment And Whitespace
Alignment beats filling every inch.
- Use 2x2 matrices for contribution-style slides; derive all
x/y/w/h values from constants.
- Use equal-width scenario cards for 4-6 scenarios.
- Use fixed gutters such as 0.18-0.30 in and apply them consistently.
- Use card headers, separators, and content zones to make short text look intentional.
- Do not solve large blank areas only by increasing font size.
Diagnose whitespace:
- Sparse table cells -> convert to cards.
- Ugly English/math variable text -> render formulas or localize labels.
- Bottom text touches border -> reduce value font or increase explanation-zone height.
- Similar cards misalign -> unify coordinate formula, title height, separator position, and card width.
Formula And English Variable Rules
Classify every English/math token before rendering:
Treat variable names from empirical files as presentation objects, not raw code.
Regression variables, table headers, dataset fields, and source-code names such as lnrd, wage_salary_share, capex_labor_ratio, TFP_OP, or CoalShare must not be pasted into PPT as raw snake_case/plain English by default. For audience-facing slides, either localize them into Chinese metric labels or render them as LaTeX formula assets, for example $\ln RD$, $\mathrm{WageShare}_{it}$, $\mathrm{TFP}^{OP}$, $\mathrm{Capex}/\mathrm{Labor}$. Keep raw variable names only in notes, appendix data dictionaries, or small technical footnotes when traceability is needed.
Keep method/model/stage names in English when they are scholarly labels:
Bunching, SMM, ITT, Stage 1/2, Baseline, CF-2.
Render mathematical objects as formula assets when they contain subscripts, hats, Greek letters, ln, arrows, bundles, decomposition, or structural equations:
p_i S + FC, \widehat{\delta}, \mathrm{TFP}_{OP}, \ln \mathrm{EI}, TFP ↑ / CoalShare ↑, EI, CI ↑ / R&D ↓.
Localize explanatory metrics in ordinary cards:
TFP 上升 -> 生产率上升; Coal -> 煤炭; CO2 -> 碳排; PowerShare -> 电力占比 when the card is not a formula card.
Reliable formula PNG pattern:
standalone LaTeX + amsmath + xelatex
pdftoppm -png -r 300 formula.pdf formula
insert resulting PNG into PowerPoint
Formula/result cards must have three checked zones:
- Formula zone.
- Value/result zone.
- Explanation zone.
Do not check only whether the formula is clear. Confirm the explanatory text is not clipped, too small, or touching the card border.
Speaker Notes Hard Gate
When a template has notes, every generated slide must have speaker notes.
Default notes length: about 100-180 Chinese characters per slide, adjusted for talk speed and slide density.
Write notes through COM, then read them back:
slide.NotesPage.Shapes.Placeholders(2).TextFrame.TextRange.Text = notes
If the standard placeholder write fails or reads back empty:
- Search notes placeholders by name and placeholder type.
- Try Chinese placeholder names if present.
- Add a fallback text box on the notes page.
- Re-read notes.
- If any slide still has empty notes, do not save or deliver.
Always report notes completeness, not just slide count.
QA Gate
Minimum validation before delivery:
python -m py_compile for generation scripts.
- PowerPoint opens visibly and visits slides during generation.
- SaveAs produces a new
.pptx.
- Export every slide to PNG.
- Sort slide PNGs by numeric slide number, not string order.
- Create a contact sheet.
- Zoom into critical pages: contribution matrix, route page, result page, mechanism page, scenario/policy page.
- Extract text and search for old template placeholders or old project content.
- Check notes length for every slide.
- Check for body text below 12 pt on key slides.
- Fix at least one QA pass when issues are found, then re-export affected slides.
Look specifically for:
- Misaligned rows in a 2x2 matrix.
- Bottom explanations clipped by card borders.
- Tables with tiny text and empty cells.
- Formula text rendered as ugly plain text.
- Missing notes after SaveAs.
- Old template title or placeholder residue.
- Content not fitting its shape.
- Too much unbalanced whitespace.
Deliverables
For a complete deck task, provide:
- New
.pptx, never overwriting the template.
- Stable accepted-baseline copy if the user approves the result.
- Formula asset folder when formula PNGs are generated.
- PNG export folder and contact sheet.
- Notes completeness report.
- Short QA summary listing visual checks and any known residual risk.
Common Failure Repairs
- Slide looks like a paper pasted into PPT: reduce text, move explanation into notes, use cards.
- Page has too much blank table space: convert table to scenario/result/mechanism cards.
- English variables look rough: formulaize math, localize explanatory metric labels.
- PowerPoint is visible but user cannot see progress: call
GotoSlide for every slide.
- Notes vanished: read back notes after writing and use fallback notes text box.
- Contribution page rows do not align: rebuild as 2x2 formula-derived matrix.
- Template residue remains: extract text and grep placeholders/old titles before delivery.
Sharing This Skill
When publishing or sharing, copy the entire pptx-visible-academic-deck-zh folder, not only SKILL.md. The folder may contain agents/openai.yaml and scripts/discover_powerpoint.py; both are part of the reusable skill package.
1---2name: pptx-visible-academic-deck-zh3description: Use when Codex needs to create, revise, or QA a Chinese academic PowerPoint deck from a paper, report, thesis, proposal, PDF, or PPT template, especially when the user wants Microsoft PowerPoint opened visibly and edited page by page. Applies to .pptx template reuse, PDF figure extraction, PowerPoint COM automation, speaker notes, formula/LaTeX assets, scenario cards, reducing whitespace, visual QA exports, and preventing missing notes, tiny table text, leftover template placeholders, or invisible generation that stays on one slide.4---56# PPTX Visible Academic Deck ZH78## Core Goal910Create an academic PPT that feels designed, readable, and presentation-ready. Use the user's template style, keep PowerPoint visibly open, switch to each slide as it is generated, write complete speaker notes, and validate the rendered slides.1112This skill is specialized for local Microsoft PowerPoint COM workflows. Combine it with the general `pptx` skill when lower-level PPTX parsing, thumbnailing, XML editing, or generic PPT conversion is needed.1314When the source is a PDF, combine this skill with the general `pdf` skill for text extraction, page rendering, table extraction, OCR, and image extraction.1516## Default Workflow17180. Run environment discovery before assuming paths.19 Use `scripts/discover_powerpoint.py` to locate `POWERPNT.EXE`, check likely Office install records, and optionally verify COM. Different users may install Office/PowerPoint in different folders; do not hardcode one user's `C:\Program Files\Microsoft Office\root\Office16\POWERPNT.EXE` path unless discovery confirms it.20211. Read the paper/report and any provided template.22 Extract the argument, empirical design, key results, mechanisms, policy implications, and any figures/tables. Do not make a chapter-by-chapter slide dump.23242. Select the visual baseline.25 If the user specifies a `.pptx` or `.potx` template, use that file as the visual authority. If no template is specified, do not reuse a private local template from a prior user; create a clean deck with the fallback academic style in `Template Selection`.26273. Analyze the selected template or fallback style before creating slides.28 For a user-provided template, export template thumbnails, inspect fonts, color palette, logos, header/footer lines, title page style, content card style, notes conventions, and image assets. For the fallback style, define the palette, title band, card grammar, formula treatment, and notes convention before generating slides.29304. Open the user-provided template visibly as a reference when one exists, but create a clean new presentation.31 Do not overwrite the template. `Presentation.Save` can fail if a copied template is treated as read-only; prefer `Presentations.Add()` and `SaveAs()` a new `.pptx`. If no template is provided, create the new presentation directly and apply the fallback academic style.32335. Build a narrative deck plan.34 Compress the source into a talk sequence such as: problem/contribution -> framework/roadmap -> data and identification -> main result -> mechanisms -> counterfactual or policy -> conclusion.35366. Generate slides through visible PowerPoint COM.37 `app.Visible = True` is not enough. Before editing each slide, activate the presentation window and call `ActiveWindow.View.GotoSlide(slide.SlideIndex)` with a short delay so the user can see the process.38397. Write speaker notes for every slide.40 Notes are a default requirement for academic decks and a hard gate when the template has notes. Write, read back, fall back if needed, and block delivery if any slide has empty notes unless the user explicitly asks for no notes.41428. Export all slides to PNG and inspect.43 Create a contact sheet sorted by slide number, zoom into critical slides, fix issues, and re-export after fixes.4445## Environment Discovery Preflight4647Before visible deck generation on a new computer, locate PowerPoint and verify automation:4849```bash50python scripts/discover_powerpoint.py --out powerpoint_discovery.json51python scripts/discover_powerpoint.py --check-com --out powerpoint_discovery_com.json52```5354Use the JSON fields as follows:5556- `preferred_executable`: path to use when a script needs to launch PowerPoint explicitly.57- `found_executables`: fallback candidate paths.58- `uninstall_records`: version and install-location clues for diagnostics.59- `com.available`: whether direct COM automation worked when `--check-com` was used.6061If no executable is found but COM works, direct `PowerPoint.Application` automation may still be enough. If neither executable nor COM is available, stop and tell the user PowerPoint is not discoverable on this machine instead of silently producing a non-visible substitute.6263Visible editing is mandatory when requested:6465- Start with `PowerPoint.Application`.66- Set `Visible = True`.67- Activate the target presentation window.68- Call `ActiveWindow.View.GotoSlide(slide.SlideIndex)` before editing each slide, with a short delay.69- Do not leave the visible UI on one slide while editing later slides in the background.7071## Narrative Compression7273PPT is not a paper summary. It is a presentation route.7475Use this structure for empirical economics or policy research by default:7677| Slide role | Preferred visual grammar |78|---|---|79| Opening/title | Template title style, concise topic signal |80| Research question | Left-side problem path + right-side question cards |81| Contribution | Strict 2x2 equal-width/equal-height matrix |82| Technical route | Four-stage or five-stage large process cards |83| Data/institution | Figure + numeric callout cards |84| Identification | Timeline, shock card, or intuition cards |85| Main result | Large result card + formula/result card |86| Mechanism | Decomposition formula + channel cards |87| Heterogeneity | Segmented cards or small multiples, not dense tables |88| Policy/counterfactual | Scenario cards + directional arrows + conclusion band |89| Conclusion | Three takeaways or policy toolbox |9091Change the sequence when the source demands it, but keep each slide's component grammar tied to its logical role.9293## Template Selection9495Follow this priority order:96971. User-specified template path.98 Use it as the visual source of truth: fonts, colors, title bars, header/footer rules, logos, page-number style, spacing rhythm, and note conventions. Create a new `.pptx`; never overwrite the template.992. Project-local template if the user explicitly says to use the current project's default.100 Discover it from project notes or a clearly named template folder, then still inspect it before use.1013. Built-in fallback style when no template is specified.102 Use a restrained Chinese academic forum style: white or very light background, strong but thin title band, blue/teal primary accent, one warm secondary accent, structured cards, small section labels, consistent page number/footer line, and no decorative marketing graphics.103104The fallback style is not a bundled `.pptx` file. It is a reproducible layout system generated through PowerPoint shapes, text boxes, formula PNG assets, and consistent geometry. This makes the skill portable to other users without copying a private template.105106## Template Reuse107108Preserve the template's identity without copying stale content:109110- Reuse logos, title bars, header lines, page numbers, color accents, and spacing rhythm.111- Remove old template titles, placeholders, old project names, and stale notes.112- Keep template-like visual assets if they support the new deck.113- Use a stable output path and create an accepted-baseline copy when the user approves a version.114115For Chinese academic forum templates, a quiet white content page with a strong title band, thin blue header line, structured cards, and restrained accent colors often works better than a flashy generic business deck.116117## Visible PowerPoint COM118119Use direct COM when the user wants to watch local editing:120121```python122import win32com.client as win32123app = win32.Dispatch("PowerPoint.Application")124app.Visible = True125```126127For each slide:128129```python130slide = pres.Slides.Add(index, layout)131app.ActiveWindow.View.GotoSlide(slide.SlideIndex)132time.sleep(0.18)133```134135If PowerPoint has multiple windows, activate the target presentation window before `GotoSlide`. Do not leave the UI stuck on slide 1 while the script edits later slides invisibly.136137When inserting images:138139- Validate optional image paths with `Path(path).is_file()`.140- Do not use `Path("").exists()`, because empty strings resolve to the current directory on Windows.141- If an optional figure is missing, skip it or use a layout fallback instead of letting `Shapes.AddPicture` crash.142143## PDF Source And Figure Assets144145When the user provides a PDF paper rather than `.tex`, do not assume the original figure files exist. Build slide-ready assets from the PDF itself.146147Use this decision order:1481491. Extract text and locate figure/table candidates.150 Use PDF text extraction to find captions such as `Figure 1`, `Fig. 1`, `Table 2`, `图1`, `表2`, and nearby section names. Record page numbers and captions before choosing slide visuals.1512. Render candidate pages to high-resolution PNG for visual inspection.152 This is the default reliable path because academic PDF figures are often vector drawings or mixed text/vector objects, not standalone raster images.1533. Crop the figure/table region from the rendered page.154 Use fractional crop boxes after inspecting the rendered page. Keep captions only when they help interpretation; otherwise replace the caption with a clean slide title or note.1554. Extract embedded images only as a secondary path.156 `pdfimages` or PDF image extraction may return panel fragments, logos, texture pieces, or raw images without axes/labels when the published figure is vector. Use extracted images only if they preserve the full figure semantics.1575. Insert the cleaned PNG into PowerPoint and perform visual QA.158 Check resolution, aspect ratio, legibility of axis labels, absence of page headers/footers, and whether the figure should be paired with number cards or explanatory callouts.159160Bundled helper script:161162```bash163# Render pages 5-7 to PNG for inspection.164python scripts/extract_pdf_assets.py paper.pdf --out-dir outputs/pdf_assets --pages 5-7 --render-pages --dpi 300165166# Crop one figure from page 6 using fractional coordinates.167python scripts/extract_pdf_assets.py paper.pdf --out-dir outputs/pdf_assets --crop-page 6 --crop 0.10,0.18,0.92,0.62 --name fig2_main --dpi 300168169# Try embedded image extraction when the PDF stores full raster figures.170python scripts/extract_pdf_assets.py paper.pdf --out-dir outputs/pdf_assets --pages 5-7 --extract-images --min-width 500 --min-height 350171```172173Dependencies: prefer `PyMuPDF` (`fitz`) and `Pillow`; use Poppler tools such as `pdftoppm` or `pdfimages` as fallbacks when available.174175Crop rules for PPT:176177- Use 250-300 dpi for ordinary slide figures; use 400 dpi for small labels or dense tables.178- Avoid screenshots taken from a low-zoom PDF viewer; render from the PDF file directly.179- Preserve the full plot area, axes, legends, and panel labels.180- Remove surrounding PDF whitespace, page numbers, journal headers, and unrelated captions.181- If a table is too dense after cropping, convert it into cards instead of inserting the full table image.182- Save extracted assets under a stable output folder and insert by absolute path after `Path(path).is_file()` succeeds.183184## Slide Design Rules185186Use fixed ratios and formula-derived positions rather than eyeballing.187188Recommended academic content sizes:189190- Main content slide title: about 26-30 pt.191- Section label or eyebrow: about 13-15 pt.192- Body card text: about 16-18 pt.193- Dense auxiliary text or captions: about 10-12 pt.194- Key numbers: about 30-36 pt.195196Avoid body text below 12 pt except footers, captions, or small labels. If a table requires 10-11 pt body text and still looks sparse, replace the table with cards.197198Use semantic colors:199200- Blue: institution, identification, baseline design.201- Teal: data, mechanism, allocation.202- Gold: structure, cost, model objects.203- Green: policy, welfare, toolbox.204- Red: risk, constraints, environmental burden.205206Do not make every slide the same horizontal bar layout. Mix:207208- Left path + right question cards.209- 2x2 contribution matrix.210- Four-stage route cards.211- Chart plus number cards.212- Formula/result cards.213- Three-channel mechanism cards.214- Scenario cards.215- Conclusion band.216217## Alignment And Whitespace218219Alignment beats filling every inch.220221- Use 2x2 matrices for contribution-style slides; derive all `x/y/w/h` values from constants.222- Use equal-width scenario cards for 4-6 scenarios.223- Use fixed gutters such as 0.18-0.30 in and apply them consistently.224- Use card headers, separators, and content zones to make short text look intentional.225- Do not solve large blank areas only by increasing font size.226227Diagnose whitespace:228229- Sparse table cells -> convert to cards.230- Ugly English/math variable text -> render formulas or localize labels.231- Bottom text touches border -> reduce value font or increase explanation-zone height.232- Similar cards misalign -> unify coordinate formula, title height, separator position, and card width.233234## Formula And English Variable Rules235236Classify every English/math token before rendering:2372380. Treat variable names from empirical files as presentation objects, not raw code.239 Regression variables, table headers, dataset fields, and source-code names such as `lnrd`, `wage_salary_share`, `capex_labor_ratio`, `TFP_OP`, or `CoalShare` must not be pasted into PPT as raw snake_case/plain English by default. For audience-facing slides, either localize them into Chinese metric labels or render them as LaTeX formula assets, for example `$\ln RD$`, `$\mathrm{WageShare}_{it}$`, `$\mathrm{TFP}^{OP}$`, `$\mathrm{Capex}/\mathrm{Labor}$`. Keep raw variable names only in notes, appendix data dictionaries, or small technical footnotes when traceability is needed.2402411. Keep method/model/stage names in English when they are scholarly labels:242 `Bunching`, `SMM`, `ITT`, `Stage 1/2`, `Baseline`, `CF-2`.2432442. Render mathematical objects as formula assets when they contain subscripts, hats, Greek letters, `ln`, arrows, bundles, decomposition, or structural equations:245 `p_i S + FC`, `\widehat{\delta}`, `\mathrm{TFP}_{OP}`, `\ln \mathrm{EI}`, `TFP ↑ / CoalShare ↑`, `EI, CI ↑ / R&D ↓`.2462473. Localize explanatory metrics in ordinary cards:248 `TFP 上升` -> `生产率上升`; `Coal` -> `煤炭`; `CO2` -> `碳排`; `PowerShare` -> `电力占比` when the card is not a formula card.249250Reliable formula PNG pattern:251252```text253standalone LaTeX + amsmath + xelatex254pdftoppm -png -r 300 formula.pdf formula255insert resulting PNG into PowerPoint256```257258Formula/result cards must have three checked zones:259260- Formula zone.261- Value/result zone.262- Explanation zone.263264Do not check only whether the formula is clear. Confirm the explanatory text is not clipped, too small, or touching the card border.265266## Speaker Notes Hard Gate267268When a template has notes, every generated slide must have speaker notes.269270Default notes length: about 100-180 Chinese characters per slide, adjusted for talk speed and slide density.271272Write notes through COM, then read them back:273274```python275slide.NotesPage.Shapes.Placeholders(2).TextFrame.TextRange.Text = notes276```277278If the standard placeholder write fails or reads back empty:2792801. Search notes placeholders by name and placeholder type.2812. Try Chinese placeholder names if present.2823. Add a fallback text box on the notes page.2834. Re-read notes.2845. If any slide still has empty notes, do not save or deliver.285286Always report notes completeness, not just slide count.287288## QA Gate289290Minimum validation before delivery:2912921. `python -m py_compile` for generation scripts.2932. PowerPoint opens visibly and visits slides during generation.2943. SaveAs produces a new `.pptx`.2954. Export every slide to PNG.2965. Sort slide PNGs by numeric slide number, not string order.2976. Create a contact sheet.2987. Zoom into critical pages: contribution matrix, route page, result page, mechanism page, scenario/policy page.2998. Extract text and search for old template placeholders or old project content.3009. Check notes length for every slide.30110. Check for body text below 12 pt on key slides.30211. Fix at least one QA pass when issues are found, then re-export affected slides.303304Look specifically for:305306- Misaligned rows in a 2x2 matrix.307- Bottom explanations clipped by card borders.308- Tables with tiny text and empty cells.309- Formula text rendered as ugly plain text.310- Missing notes after SaveAs.311- Old template title or placeholder residue.312- Content not fitting its shape.313- Too much unbalanced whitespace.314315## Deliverables316317For a complete deck task, provide:318319- New `.pptx`, never overwriting the template.320- Stable accepted-baseline copy if the user approves the result.321- Formula asset folder when formula PNGs are generated.322- PNG export folder and contact sheet.323- Notes completeness report.324- Short QA summary listing visual checks and any known residual risk.325326## Common Failure Repairs327328- **Slide looks like a paper pasted into PPT**: reduce text, move explanation into notes, use cards.329- **Page has too much blank table space**: convert table to scenario/result/mechanism cards.330- **English variables look rough**: formulaize math, localize explanatory metric labels.331- **PowerPoint is visible but user cannot see progress**: call `GotoSlide` for every slide.332- **Notes vanished**: read back notes after writing and use fallback notes text box.333- **Contribution page rows do not align**: rebuild as 2x2 formula-derived matrix.334- **Template residue remains**: extract text and grep placeholders/old titles before delivery.335336## Sharing This Skill337338When publishing or sharing, copy the entire `pptx-visible-academic-deck-zh` folder, not only `SKILL.md`. The folder may contain `agents/openai.yaml` and `scripts/discover_powerpoint.py`; both are part of the reusable skill package.