lit-report-ppt: Paper PDF input, Chinese group meeting PPT and Word script output

Introduction

The workflow for literature reporting in group meetings is fixed: Cover → First page of the paper screenshot → Abstract → Experimental conditions → Synthesis methods → Main images with captions → Conclusion → Acknowledgments. Replicating this workflow every time, what truly takes time is not PowerPoint layout, but “writing complete captions” and “not mistyping chemical formula subscripts/superscripts.”

The third-party DSH plugin introduced below, wld12314/lit-report-ppt, automates this fixed workflow: input a paper PDF, output a Chinese meeting report PPT (.pptx) and a speaker script corresponding page-by-page (.docx). It is labor-intensive; judgment is still left to the human, while the script handles layout, subscript/superscript conversion, cropping, and self-checking.

What is it

A one-sentence positioning: given a paper PDF, generate a Chinese group-meeting presentation deck that is ready to present, plus a Word speaker script to read from for each page. It is categorized under “Workflow” with a star rating of 1. The README’s package.json states: “DeepSeek Harness skill that turns one journal paper PDF into a Chinese group-meeting literature report deck (.pptx) plus a matching Word speaker script, keeping the paper’s own cropped figures and full captions.”

The two products originate from the same content.json, so what is written on the slides will not conflict with what is spoken in the script. The layout and design parameters are measured values taken by measuring each shape one by one from a real group meeting report, not set by feeling.

From an implementation perspective, it is not necessarily a service that must run inside DSH. The main body of the repository is several ordinary Python scripts; package.json, cordis.patch.yml, and lib/index.js are registration forms for registering the skill with the DSH host, running on the host side, requiring Node 22+. It explicitly declares that it does not touch the output script; output still only relies on four Python libraries.

Core Capabilities

The README explains several common issues it addresses in a table, recorded here verbatim:

You worry about How it handles
Lazy captions, writing “as shown in the figure” Captions < 40 chars, missing sub-figure info → Self-check errors
Long captions, can’t fit in layout Calculate based on actual line count, create continuation pages if needed, continuation pages still have the same image
Short captions, image is squashed Short captions use bottom-bar full-width layout, long captions use right-bar layout
Chemical formula subscripts/superscripts Writing Cr^{3+}, Cs_{2}NaInCl_{6} → script converts to real subscripts/superscripts
Elements running out of view and getting cut Scan for out-of-bounds, overlapping, missing fonts, font size hierarchy violations per page
Script sounds like reading the paper Script written with “one figure, two or three sentences, academic but not jargon-heavy”

There are two hard rules worth noting regarding layout. First, the layout of the main image page is not an aesthetic choice, but selected based on the actual number of lines the caption occupies: short captions use Layout A (Figure area 11.71 × 6.20, caption at bottom 11.80 × 0.92), long captions use Layout B (Figure area 8.45 × 7.16, right side 2.75 × 7.14 for caption). If neither layer fits, it automatically creates a continuation page; the continuation page shrinks the same image to the upper half, spreading the remaining caption over the lower half. The README explicitly states that moving captions without moving images is not allowed; otherwise, when presenting this page, the image won’t be beside it, and the (a)(b)(c) in the caption will be floating. Second, split into two pages if there is too much information; do not shrink the font to cram it in.

The page order is fixed as: Cover → Article first page screenshot (+ author info card, the only page allowed to be fully English) → Abstract → Experimental conditions/tables → Synthesis methods → Main image pages (occupying 70%+ of the whole) → Conclusion → Acknowledgments.

Installation and Enablement

Manual usage (no git, no Node, no Office needed):

pip install -r requirements.txt

Dependencies are just four: python-pptx, python-docx, Pillow, pymupdf (with pypdf as a fallback).

Install from the DSH plugin market; the command given in the README is:

dsh plugin add AshenSeeker/lit-report-ppt

Need to note one point: The repository README body and the embedded package.json point to AshenSeeker/lit-report-ppt, while the community directory lists this plugin under wld12314/lit-report-ppt. Whether these are two different paths to the same repository directory or two mirrors, the README does not explain. Confirm the path you want to install before installing to avoid pulling the wrong one.

You can also bypass the market and put the entire directory into the DSH skills directory:

~/.dsh/skills/lit-report-ppt/

Plugin metadata (from the embedded package.json in README): Name lit-report-ppt, Version 1.4.0, License MIT; engines require dsh >=0.2.0-rc.2 <0.3.0-0 and node >=22; declares dsh.bundle.patch pointing to ./cordis.patch.yml.

Typical Usage: Four Steps to Generate a Report

The four-step process given in the README, commands recorded verbatim:

# 1. Extract body text, abstract, and captions
python scripts/extract_paper.py paper.pdf -o work/

# 2. Crop figures (first --list to see the true boundaries of the image blocks, don't guess coordinates anymore)
python scripts/crop_figures.py paper.pdf --list
python scripts/crop_figures.py paper.pdf --crop "5,0.080,0.065,0.930,0.445" -o work/figs/fig04.png

# 3. Fill content.json (copy assets/content.template.json and modify)
#    ↑ This step is the judgment work, the script does not write the content for you

# 4. Output
python scripts/build_deck.py content.json -o out/deck.pptx
python scripts/check_deck.py out/deck.pptx --content content.json
python scripts/build_script.py content.json -o out/讲稿.docx

Step 1 extracts body text and captions, Step 2 crops figures. Note that Step 2 provides --list to list image block boundaries first, then crops by coordinates; coordinates are normalized values. Step 3 is judgment work that must be done by a person; the script does not write content on your behalf. Step 4 outputs the PPT, self-checks, and outputs the script in sequence. The README requires check_deck.py to run with 0 suggestions to be considered complete.

The presenter’s name and time are printed as XX by default; you can pass parameters when outputting:

python scripts/build_deck.py content.json -o out/deck.pptx --presenter "张三" --date "2026年11月2日"
python scripts/build_script.py content.json -o out/讲稿.docx   --presenter "张三" --date "2026年11月2日"

Changing the school name is a must-do step before personal use. The default cover is Nanyang Normal University College of Physics and Electronic Engineering; the school logo and two lines of school name are hardcoded in the code, not fields in content.json, so simply overriding assets/logo.png is not enough:

What to change Location
School logo image Directly override assets/logo.png (suggest 1:1 square, white or transparent background, ≥300×300)
First line of school name "Nanyang Normal University" in scripts/build_deck.py:53
Second line of department "College of Physics and Electronic Engineering" in scripts/build_deck.py:58

Both are in _top_bar(), shared by the cover and thanks page; changing one is enough. After changing, re-run build_deck.py; check_deck.py does not need to be changed. If the new school name is longer than the default, lower the 18pt to 16pt so it doesn’t bump into the right side.

Self-Check and Known Trade-offs

check_deck.py scans six types of issues: out-of-bounds (shapes running off canvas), overlapping (threshold 0.15 in), empty captions (less than 40 chars), missing fonts (compared against actually available system fonts), font size hierarchy violations (not in {66,60,40,22,20,18,16,14,13,11,10}), and missing images (the file pointed to by image does not exist).

There is a cross-platform pitfall regarding fonts to note. The template original used “KaiTi” (STKaiti), which is not installed on most Windows machines. The repository uniformly uses KaiTi (simkai.ttf) as a substitute; the other three are system-native Times New Roman, Verdana, and DengXian. However, font checking currently only recognizes the Windows font directory (%WINDIR%\Fonts); running on macOS/Linux will skip this check without error, and when the generated file is opened on Windows, the missing fonts will still be silently replaced, causing layout distortion. For cross-platform use, confirm the target machine has KaiTi and Times New Roman first.

Known trade-offs listed in the README that directly affect usage:

  • The script is not written into the PPT speaker notes because the notes section is invisible during presentation, and you would need another window to read from.
  • Cropping is not fully automatic. The dark red section titles printed just above the figure in the journal often fall within the figure’s bbox, and the panel numbering blocks (a)/b)/c)/d) are also dark red; a loose threshold will misidentify the numbering as a title; the automatic cropping line will cut off the top half of the sub-figure. Therefore, crop_figures.py only provides coordinate cropping; judgment is left to the human. After cropping, the top 14% and bottom 10% of each image are combined into a reference image for a quick scan.
  • The script does not need to align 1-to-1 with PPT pages; combining two pages that discuss the same thing into one paragraph is smoother, using "p": "7-8" to specify the page range to cover.
  • Does not actively add elements not in the original; extracted lists, orange callouts, and page numbers are removed; ask first if you want to add them.

Suitable Scenarios and Notes

Suitable for: those with a fixed group meeting literature reporting workflow, need complete captions per page, and want the script and slides to be source-aligned without conflict. It can be used as an AI skill (put in the agent’s skills directory) or run purely manually with those four commands; the template and logo are parsed using __file__ based on the script’s location, independent of the current working directory.

Two points to note. First, the generalizability of this skill has a premise: the platform must be able to execute local Python code. Web-based ChatGPT or similar tools without code execution capabilities can only use it to write the text and captions in content.json; the final output step must still be run locally; do not expect a direct .pptx output in the chat window. Second, the plugin runs with the current dsh process permissions. The DSH philosophy is “everything is a plugin,” but the community directory is an independent site with no official affiliation with DeepSeek/Huafan. Before installing, you should check the source code and license (this repository is MIT), especially the aforementioned inconsistency in repository paths.

Conclusion

Its value lies not in making the report look more flashy, but in turning the three most error-prone tasks—writing complete captions, not mistyping subscripts/superscripts, and keeping elements in bounds—into reproducible scripts, and using the same content.json to ensure the slides and script do not drift apart. What truly needs to be done by a human remains content judgment: how to write captions, how to crop main images, and how to change the school name.

  • Directory: https://www.skillhub.cn/plugins/wld12314/lit-report-ppt
  • GitHub: https://github.com/wld12314/lit-report-ppt
羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

Xiaoye