Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Upgrade of chinese-ppt for Chinese Beamer decks (xelatex + ctex + fandol, CUFE template). Same 7-section outline and X→M→Y framework, but adds (a) mandatory 1.3 line-spacing + 3pt paragraph spacing, (b) overflow-prevention line budget + balanced split-frame rules, (c) prose rewrites that strip AI-ish "关键比较/理论映射" labels and redundant 章节括号注释, (d) stricter CJK-space + middle-dot rules, (e) retrofit workflow for existing chinese-ppt decks, (f) mandatory local linespread reset inside TikZ / table / f
| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | 222% | 0% |
| case-14 | ✗→✓ | ▲ Improved | 561% | 0% |
| case-15 | ✗→✓ | ▲ Improved | 405% | 0% |
| case-04 | ✗→✓ | ▲ Improved | 316% | 0% |
| case-05 | ✗→✓ | ▲ Improved | 410% | 0% |
本 skill 继承 chinese-ppt 的全部硬规则,并追加 7 项一级强规则。新规则均来自 实践中发现的排版问题与用户反馈,不得关闭。
导言区必须包含:
latex\usepackage{enumitem} \usepackage{etoolbox} % 行距 1.3 + 段前/段后 3pt(对应 Word "多倍行距 1.3") \linespread{1.3} \setlength{\parskip}{3pt plus 1pt minus 0pt} \setlist[itemize]{topsep=3pt, itemsep=3pt, parsep=3pt, partopsep=0pt} % enumerate 必须显式指定 label —— 否则 enumitem 继承的 \labelenumi 在 % ctex + fandol + beamer 下偶发自引用 (\labelenumi -> {\labelenumi), % 引爆 "TeX capacity exceeded, input stack size=10000"。 \setlist[enumerate,1]{label=\arabic*., topsep=3pt, itemsep=3pt, parsep=3pt, partopsep=0pt} \setlist[enumerate,2]{label=(\alph*), topsep=2pt, itemsep=2pt} \renewcommand{\labelenumi}{\arabic{enumi}.} % 关键:固定几何环境(tabular / tikz)内部自动重置为 1.0 行距, % 防全局 1.3 顶破 minimum height 节点与 tabular 行高。 % 这一对 hook 是升级 7 的首选实现,免去手工逐帧包装。 % 注意:不要在 hook 里加 \selectfont —— 在 ctex+fandol+beamer 下会触发 % 中文字体重载的递归,引发 "TeX capacity exceeded, input stack size=10000"。 % 省掉 \selectfont,linespread 的新值会在环境内下一次字体切换 % (\small / \scriptsize / \node 文本)时自然生效,对 tabular / tikzpicture % 已足够;tabular 再叠加 \arraystretch=1.0 作为第二保险。 \AtBeginEnvironment{tabular}{\linespread{1.0}\renewcommand{\arraystretch}{1.0}} \AtBeginEnvironment{tikzpicture}{\linespread{1.0}}
理由:PPT 正文过密会让观众读不完第一屏。1.3 行距 + 3pt 段距是 Word 学术排版的默认手感,也让 beamer 10pt 字体有呼吸空间。\AtBeginEnvironment 两行 hook 自动把 tabular 与 tikzpicture 的内容行距压回 1.0,避免图表因全局 1.3 越界(见升级 7)。
启用 \linespread{1.3} 后,每帧的可用行数(正文,不含标题、页脚) 严格按下表上限。超过 → 强制拆帧(见升级 3)。
| 帧类型 | 最多正文行数 | 备注 | |---|---|---| | 纯段落(§1 / §2) | 12 行 | 每段 2--3 句,不超 4 段 | | 段落 + 列表 | 10 行 | 列表 ≤ 4 项 | | 纯列表 | 列表 ≤ 4 顶层项,每项 ≤ 2 行 | 嵌套 subitem ≤ 2 层 | | 表格 + 讨论 | 表格 ≤ 6 中间行,讨论 ≤ 2 行 | 超了拆讨论帧 + 表格帧 | | 表格单帧 | 表格 ≤ 10 中间行 | 超了拆两张表 |
行数估算(重要):
(Xxx, 20xx) 或一句完整陈述) ≈ 2 行(A 等, 2022;B 等, 2023;C 等, 2024) 或双分号的复合句) ≈ 3 行
写前先数:3 长项 × 3 行 = 9 行 已占满纯列表帧预算。 文献综述类(每条几乎都是长项)再加引子就必超 10 行,要么压引子、 要么按主线再拆。典型反例:一帧里塞 主线 A(2 长项)+ 主线 B(3 长项) + 两段引子 = 约 14--16 行,必然越界,应拆成主线 A 单帧 + 主线 B 单帧。
按溢出幅度分档处理。优先级从上到下:
| 溢出程度 | 首选做法 | |---|---| | 溢出 ≤ 1 行 | 帧内局部 \setlist[itemize]{topsep=1pt, itemsep=1pt, parsep=1pt};必要时把一个长句拆短 | | 溢出 2--4 行(不够撑满新帧) | 对半拆:前帧只留一半内容,另一半到新帧,新帧用一段 2--3 句的承接话 + 结论扩展把空间填匀。不能前 90% 后 10% | | 溢出 > 4 行 或 含表格 | 自然拆两帧,各自完整 |
变量定义(二) / 变量定义(三)机制(软实力):披露与责任 / 机制(软实力):认知与治理主要研究结论(上) / 主要研究结论(下)错误示例(禁止):
\begin{frame}[allowframebreaks] 自动分页(破坏手工设计的章节页码)观众和导师一眼能识别"AI 写的"PPT。以下模式必须全部清除:
| AI 味 | 自然表达 | |---|---| | \textbf{关键比较:} ...的符号与显著性差异。 | 我们重点看 β₁ 与 β₂ 在符号和显著性上是否不同。 | | \textbf{理论映射:} 验证可观察性推论——... | 这与前文的可观察性逻辑一致:... | | \textbf{核心机制:} ...传导路径... | 传导路径是这样的:... | | \textbf{理论含义:} ... | 这说明 ... | | \textbf{政策含义:} ... | 对政策制定者而言,... |
规则:不要以"关键 X:/ 理论 Y:/ 核心 Z:"开头 + 冒号 + 一句话 的三段式 模板写结论。直接用完整陈述句。
\textbf{H1(第四章·信号传递):} HSGT 显著提升 GTFP。\textbf{H1:} HSGT 显著提升 GTFP。章节归属在下面的 \section{} 和页脚 \insertsectionhead 已经显示, 在假设旁边再标一遍是 AI 的冗余模式。
\textbf{政策窗口(样本中部):}\textbf{政策窗口:}双碳目标(碳达峰 + 碳中和)双碳目标 —— 碳达峰 + 碳中和(用破折号自然衔接)规则:如果括号内是对前面短语的同义复述,删;如果是补充事实 (人名、年份、缩写英文名),保留。
主要研究结论、创新点、政策建议这类总结页,不要在每个 bullet 前加 "F1:/ F2:/ C1:/ P1:/ 结论 1:/ 发现 1:"之类的字母或数字编号前缀。 这是 AI 模板的典型标记,很丑,观众一眼能识别。
| AI 味(禁) | 自然表达(对) | |---|---| | \textbf{F1 主效应成立。} 绿色基金... | \textbf{主效应成立。} 绿色基金... | | \textbf{F2:} 情境依赖明显... | \textbf{情境依赖明显。} ... | | \textbf{C1 视角创新。} ... | \textbf{视角创新。} ... | | \textbf{P1 顶层设计:} ... | \textbf{顶层设计。} ... | | \textbf{结论 1:} ... / \textbf{发现 1:} ... | \textbf{...(自然短语)。} ... |
规则:
\begin{itemize} / \begin{enumerate} 自动表达,不要在正文里再手写 F1 / C1 / P1 / 发现 1 / 结论 1 这类机械编号。
"情境依赖明显。"、"视角创新。"、"顶层设计。"、"监督机制。"
\begin{enumerate} 让 1. 2. 3. 自动编号,不要 再写创新 1: / 1. 视角创新: —— 前者是 AI 模板,后者是重复编号。
有预期);但结论页对应假设时用"主效应成立 / 转型驱动获验证"等 自然短语,不要再出现"F1 / F2 / F3"这种并行编号。
xeCJK 默认会对 CJK—Latin 过渡插入小空格;不要在 CJK—CJK 之间人为加空格。
我们 重点 看 两者 差异我们重点看两者差异中 · 英 混排(中点两侧空格让视觉突兀)中·英混排 或 中、英混排·)使用规则第五章 · 基准讨论:GII 主要在下游)Fama · French)(第四章 · 信号传递))、、+、/)HSGT 显著提升 GTFP、N = 7{,}551、2012 年 这类英文 / 数字两侧的空格 不要去,xeCJK 依赖它们正确排版。
4+ 列 + 长列头("超效率 GTFP"、"非重污染子样本")横向很容易越界。 首选做法:组标题行 + \multicolumn + \cmidrule,而不是把全部 文字塞进第二行:
latex\begin{tabular}{lcccc} \toprule & \multicolumn{2}{c}{超效率 GTFP} & \multicolumn{2}{c}{非重污染子样本} \\ \cmidrule(lr){2-3} \cmidrule(lr){4-5} & (1) Preresi & (2) Presenti & (3) Preresi & (4) Presenti \\ \midrule ... \end{tabular}
配合 \setlength{\tabcolsep}{4pt} 与 \small。仍超再升级到 \scriptsize 或拆帧。
\linespread{1.0}(强制)为什么会有这条规则。 全局 \linespread{1.3}(升级 1)作用在任何会读 \baselineskip 的地方,包括:
\\ 换行 —— 节点内容按 1.3× 行高排版,撑破minimum height 设计的节点框,把整张画布顶进页脚;
\\ 多占 30% 垂直空间,6 行的表变成 8 行的高;\begin{center} 的 topsep —— 画布整体向下偏移;\includegraphics 后 caption 的垂直间距;\node 文本与 minipage 里的 baseline。这些都是按 linespread=1.0 设计 的固定几何元素。升级 1 的 1.3 只应该 作用在正文段落与列表项。
在导言区(升级 1 的配置块里)加:
latex\usepackage{etoolbox} \AtBeginEnvironment{tabular}{\linespread{1.0}\renewcommand{\arraystretch}{1.0}} \AtBeginEnvironment{tikzpicture}{\linespread{1.0}}
这两行让任何 \begin{tabular}...\end{tabular} 和 \begin{tikzpicture}... 在进入时自动把行距压回 1.0,免去逐帧手工包装。这是 chinese-ppt2 的默认 方案。
\selectfont(实战教训)早期版本的 hook 是 \linespread{1.0}\selectfont。实测在 ctex + fandol + beamer 组合下会触发 "TeX capacity exceeded, input stack size=10000" 编译 失败。 原因是 \selectfont 在 tabular / tikzpicture 起始位置触发中文 字体重载,而 fandol 的字体表在 beamer frame 的 overlay 上下文里会与 hook 形成内部递归,push 到输入栈深度上限。
修复:去掉 \selectfont。\linespread{1.0} 单独使用时,新 baseline 不会立刻生效,但环境内部下一次 \small / \scriptsize / TikZ \node 文本都会触发隐式 selectfont,把新 linespread 应用到后续内容,对 tabular 行高与 tikz 节点内容已足够。tabular 再叠加 \arraystretch=1.0 做第二保险,覆盖那些 baseline 来不及更新的边缘场景。
自检:
bashgrep -n 'AtBeginEnvironment{tabular}{\\\\linespread{1.0}\\\\selectfont' report.tex grep -n 'AtBeginEnvironment{tikzpicture}{\\\\linespread{1.0}\\\\selectfont' report.tex # 命中任何一行说明用了老版本 hook,必须删掉 \selectfont
只写 \setlist[enumerate]{topsep=3pt, itemsep=3pt, parsep=3pt, partopsep=0pt} 不设 label=... 时,enumerate 帧会在 ctex + fandol + beamer 下偶发 编译失败,错误信息:
TeX capacity exceeded, sorry [input stack size=10000].
\labelenumi ->{\labelenumi
1.806 \end{frame}\labelenumi -> {\labelenumi 是自引用——说明 enumitem 继承的 \labelenumi 在 ctex 初始化过程中被污染成递归定义,enumerate 帧展开时无限深度递归。
修复:在 \setlist[enumerate,N] 里\textbf{显式给出 label=...}, 并在导言区显式 renewcommand \labelenumi 截断递归:
latex\setlist[enumerate,1]{label=\arabic*., topsep=3pt, itemsep=3pt, parsep=3pt, partopsep=0pt} \setlist[enumerate,2]{label=(\alph*), topsep=2pt, itemsep=2pt} \renewcommand{\labelenumi}{\arabic{enumi}.}
不需要在 itemize 上做这个——itemize 的 \labelitemi 是 itemize 专用, 不走 enumi 那条被污染的路径。
自检:
bashgrep -n 'setlist\[enumerate\]{' report.tex # 命中说明没带 ",1" + label=,必须改 grep -n 'setlist\[enumerate,1\]{label=' report.tex # 必须 >= 1
早期版本建议"hook + 手工 {\linespread{1.0}\selectfont ... } 双保险"。 实测证明这会触发 TikZ 整帧变白(X→M→Y 框架帧编译后空白)。怀疑原因:
\selectfont 在 frame body 开头触发时,beamer 还在做 frame 初始化,字体状态未就绪;
{...} 与 \begin{center} 嵌套后,TikZ 的 remember pictureoverlay 坐标锚点错位;
\selectfont 与 \AtBeginEnvironment 注入的 \selectfont 在TikZ 节点字体切换时互相抵消。
规则:全局 hook 已经处理好 tabular / tikzpicture 内部行距,不要 在 frame body 再包一层 {\linespread{1.0}\selectfont ... }。如果外层的 \begin{center} 或 \vspace 让画布偏下,用 \vspace*{-0.4em} ~ \vspace*{-0.8em} 向上微调,不要动 linespread。
{\linespread{1.0}\selectfont ...}包装 frame body —— 实测会把整帧编译成空白。
\linespread 设条件分支(如用 \ifx 判断环境)——不可靠。\linespread{1.3}(升级 1 是强制的)。\setstretch{1.0} 覆盖(效果等价但需要 setspace 包,额外依赖)。\begin{tikzpicture} —— 外层 \begin{center} 的 \topsep还是按 1.3 算。要么用 hook,要么包整个 frame body。
确保导言区有 \AtBeginEnvironment{tabular} 和 \AtBeginEnvironment{tikzpicture} 两条 hook:
bashgrep -c 'AtBeginEnvironment{tabular}' defense.tex # 应该 = 1 grep -c 'AtBeginEnvironment{tikzpicture}' defense.tex # 应该 = 1
若缺失,按"首选实现"补上。补完后只有大型 TikZ 诊断帧(例如 X→M→Y 框架图) 需要手工再加 frame body wrapper —— 通常就 1 张。
中文学术 PPT 的 §7 不能只有"研究结论"和"研究不足"。中文学术传统 (答辩、学术会议、组会汇报)对 §7 的预期结构里,\textbf{政策建议 / 实践启示}是必备环节——导师和听众会主动寻找"这项研究对政策 / 实践有 什么用"。缺失会被直接追问。
§7 至少按此顺序包含以下 4 类帧:
(见升级 4d),\textbf{不要用 F1 / F2 编号}。
enumerate自动编号。
可操作的建议。超过 10 行按升级 3 对半拆(上 / 下)。
常见的"政策建议"对半拆法:
学界),不要以"第一、第二、第三"或"P1 / P2"开头。
完善绿色基金监管体系。绿色专项基金,并将该分类写入基金募集说明书的披露要求。
配套;机制 → 治理与披露),不要脱离论文自创建议。
转型机制"这类概念式命名。
政策建议帧\textbf{必须用 itemize 结构},不要写成 3 段 3--4 行的粗体 段落——在 1.3 行距 + 3pt 段距下,3 段段落式写法几乎必然顶破页脚, 导致后面的帧被挤到下一页编译失败,表现为\textbf{页码停留在政策建议 帧的前一页,后续帧不出现在 PDF 中}。
正确写法(列表化、每条 1--2 行、帧正文总行数 ≤ 10):
latex\begin{frame}{政策建议:顶层设计与转型机制} \textbf{监管部门。} \begin{itemize} \item 制定统一的绿色基金认定标准,写入基金募集说明书披露要求; \item 区分泛 ESG 基金与绿色专项基金,明确运作边界; \item 按区域经济水平推行差异化监管策略。 \end{itemize} \textbf{基金管理人。} \begin{itemize} \item 重点支持原创性、突破性绿色发明专利研发; \item 将绿色责任履行水平纳入投资评价与绩效考核。 \end{itemize} \end{frame}
错误写法(连续段落 + 粗体引导 + 每段 3--4 行):
latex% 反例:实测会在编译时把后续帧挤丢 \begin{frame}{政策建议(上)} \textbf{顶层设计。} 建议由官方对"绿色基金"作出明确定义……(3 行) \textbf{转型机制。} 鼓励绿色基金重点支持……(3 行) 将\textbf{绿色责任履行水平}纳入……(3 行) \end{frame}
行数预算:政策建议帧正文 ≤ 10 行(含列表分隔)。超了就按升级 3 对半拆成"政策建议(上)/(下)"。
bashgrep -c '政策建议\|实践启示' report.tex # 必须 >= 1
若 §7 内无任何政策建议类帧,视为\textbf{结构性缺失},必须补齐。
帧标题\textbf{不要}用"(一)(二)(三)(四)"或"(1)(2)(3)" 这类机械顺序号来区分同一主题的多张帧。序号由帧顺序与目录页自动表达, 观众不需要再看数字才能理解帧间关系。序号前缀也是 AI 模板的强标记。
研究背景(一):双碳战略 / 研究背景(二):融资困境 / 研究背景(三):已有研究 / 研究背景(四):制度窗口研究背景:双碳战略与新质生产力 / 研究背景:绿色转型的融资困境 / 研究背景:绿色金融工具版图 / 研究背景:绿色基金的制度窗口规则:
表达差异,不要用数字 / 汉字序号。
的双重遏制")或括号点明视角("理论基础(代理视角)"),但\textbf{不 要用"理论基础(一)(二)(三)"}。
主要研究结论(上)/(下)、政策建议(上)/(下)这类\textbf{对半拆帧}的命名约定(见升级 3)—— 它们表达的是"同一帧被 拆成两页",不是"多个平行主题的顺序编号",语义不同,允许保留。
自检:
bashgrep -nE '\\begin\{frame\}\{[^}]*([一二三四五六七八九十0-9]+)' report.tex
命中行逐一改写为概念式标题。
X→M→Y 框架图是对\textbf{研究假设}的图示化总结,应当出现在读者已经 看过文献综述、理论基础、假设之后,而不是抢在文献综述之前。
强制顺序:
早期 chinese-ppt 模板把框架图放在 §1 研究问题之后,是一个应当纠正的 历史设计。在 chinese-ppt2 中,框架图一律进入 §2 末尾。
理由:观众在看到 X→M→Y 图之前,应当先理解"为什么是这些 X、这些 M、 这些 Y"——这需要文献缺口与理论基础铺垫。框架图抢在文献之前会让观众 误以为这是一项\textbf{事先假定好结构}的论证,而不是\textbf{从理论 推出}的框架。
\insertframenumber,不要用 "X / N" 格式(强制)页脚\textbf{不要写}成 \insertframenumber\,/\,\inserttotalframenumber。 \inserttotalframenumber 在 ctex + fandol + beamer 组合下会\textbf{偶发 返回诡异值}——实测观察到 34 帧的 deck 在页脚输出 32 / 80 这样的奇怪 分母(真实总数 34,aux 文件里写入了一个毫无根据的 80)。原因可能与 以下因素有关:
\c@framenumber 计数器在 AtBeginEnvironment{tabular} /{tikzpicture} hook 叠加时被污染;
\beamer@inserttotalframenumber 的 aux写入时机冲突;
无论根因,最稳的做法是放弃分母,直接只显示当前帧号。观众并不需要 "X / 总数"就能理解进度,目录页已经给出了整体结构。
正确写法:
latex\raggedleft{\color{cufenavy}\footnotesize% \insertframenumber}
禁止写法:
latex\raggedleft{\color{cufenavy}\footnotesize% \insertframenumber\,/\,\inserttotalframenumber} % ← 会输出 "X / 80"
自检:
bashgrep -n 'inserttotalframenumber' report.tex # 必须为空
理论基础\textbf{不能压成 1 帧大概念综述}。把两条理论视角(代理 / 融资 / 契约 / 信号 / 委托代理 / ...)合在一帧里各写 2--3 句话,观众 会感觉"理论没讲清楚"。中文答辩和学术会议对理论部分的详细度要求明显 高于英文 seminar。
强制结构:
逻辑之变"作收束;
禁止:
链的高度抽象话;
没引就停)。
时长调节:§2 帧数表(升级自 chinese-ppt)是\textbf{下限};理论视角 多的论文可上浮 2--3 帧而不违反规则。
生成 可直接在 Overleaf 编译的中文 Beamer PPT,适用于:
输出 确定性:同一篇论文 + 同一时长 ⇒ 同一套 PPT。
只交付 .tex + figures/ 文件夹,不写 compile.bat / Makefile / latexmkrc 等本地编译脚本——用户在 Overleaf 编译(compiler 必须设为 XeLaTeX,需连续编译两次让目录页对齐)。
xelatex(两次编译),禁止 pdflatex。\usepackage[UTF8,fontset=fandol]{ctex}。\usetheme{default} + \useinnertheme{circles} + 自建 CUFE金融学院模板。
aspectratio=169, 10pt。latex \definecolor{cufenavy}{HTML}{1F3A60} \definecolor{cufetext}{HTML}{2A2A2A} \definecolor{cuferule}{HTML}{7F8FAA}
anchor=east, yshift=-0.70cmanchor=north west, xshift=0.40cm, yshift=-0.50cmtext width=\paperwidth-5.0cm,字号 \large,颜色 cufetext\vspace*{0.55cm}(不是 1.35cm)\insertsectionhead + 右 页码| # | 章节名(默认) | |---|---| | 1 | 研究背景与问题 | | 2 | 文献综述与理论基础 | | 3 | 数据与变量 | | 4 | 第四章实证标题] | | 5 | 第五章实证标题] | | 6 | 第六章实证标题] | | 7 | 三章综合对比与研究结论 |
行业×年份 FE / N / Adj.R²,星号 //。
Thank You \& Q\,\&\,A。\linespread{1.15}\selectfont 把1.3 全局行距在目录页临时压回,防 7 条目溢出。
\begin{block}(除研究问题帧"核心问题"块)。
[TODO 0.xxx]。禁用占位符。height=0.62\textheight,双栏 0.55\textheight,本模板默认 0.50--0.55\textheight。
(1)(2)(3),第二行标签;4+ 列用multicolumn 组标题(见升级 6)。
$\times$ → ×,$\to$ → →,$\Rightarrow$ → ⇒,$+$ → +。表格内的 math 不受限。
若用户提供 PDF/docx,先读论文自动提取 7--12。
| 时长 | §1 背景帧 | §2 文献+理论帧 | |---|---|---| | 20 min | 2 | 2 | | 25 min | 3 | 2 | | 30 min | 4 | 3 | | 35 min | 5 | 3 | | 40 min | 5 | 4 | | 45 min | 6 | 4 | | 60 min | 7 | 5 | | 90 min | 8 | 6 |
§3--§7 不随时长变化。
每帧 2--4 段完整段落,每段 2--3 句、约 30--50 字,关键词用 \textbf{} 粗体。 禁止纯项目符号。升级 2 的 12 行预算仍然生效。
写完每一帧,在标记为"最终"之前,按顺序做 9 项检查:
严格对照升级 8 的列表化写法,正文 ≤ 10 行。
grep '关键比较:\|理论映射:\|核心机制:\|理论含义:\|政策含义:' —— 命中改写。grep '(第[四五六七]章\|(跨章'(非 \section 行)—— 命中删除。 · 、两个中文字之间的空格 —— 命中调整。grep -nE '\\textbf\{(F[0-9]|C[0-9]|P[0-9]|结论 ?[0-9]|发现 ?[0-9]|观察 ?[0-9])'—— 命中删除机械编号,改成自然短语。
grep -c '政策建议\|实践启示' 必须 ≥ 1;若为 0,§7 缺失政策建议帧,按升级 8 补齐。
itemize 结构,不能是 3 段连续粗体引导段落。若看到 \textbf{...。} ...\n\n\textbf{...。} ... 这种三段式,改为列表。
grep -nE '\\begin\{frame\}\{[^}]*([一二三四五六七八九十0-9]+)'—— 命中行除"(上)/(下)"外全部改为概念式标题。
X→M→Y 框架帧;X→M→Y 框架帧必须出现在 §2 的最末尾(在理论与假设之后)。
grep -n 'inserttotalframenumber' report.tex必须为空;页脚只显示 \insertframenumber。
对已有 deck 做 retrofit 时,按页号扫编译输出的 PDF,重复上述 4 项 + 越界检查 (PyMuPDF 提取每页文本 line,过滤掉 y ≈ 249 的 footer 行后,看 y1 是否 > 239 或 x1 是否 > 450)。
pythonimport fitz doc = fitz.open('defense.pdf') W, H = 453.54, 255.12 # 16:9 beamer page def is_footer(bbox): x0, y0, x1, y1 = bbox return 239 < y0 < 250 and (x0 < 70 or x0 > 400) for i, page in enumerate(doc): d = page.get_text('dict') crowd = h_over = None for b in d['blocks']: if 'lines' not in b: continue for line in b['lines']: bbox = line['bbox'] if is_footer(bbox): continue if bbox[3] > 239 and not crowd: crowd = bbox[3] if bbox[2] > 450 and not h_over: h_over = bbox[2] if crowd or h_over: print(f'Page {i+1}: crowd={crowd} h_over={h_over}')
§1 内,放在研究问题帧之后。参考 chinese-ppt 的三类 X / 六通道 M / 单 Y 模板, 本 skill 不变动。
(1)(2)(3)。Controls / FE行 / N / Adj.R²。***/**/*。6+ 列:\centering\scriptsize + \setlength{\tabcolsep}{3.5pt}; 4+ 列长列头:升级 6 的 multicolumn 组标题。
PyMuPDF + 正则扫 Table N 和 \d\.\d{3,4}\*{1,3},直接填 .tex。 grep -c '[TODO 0' .tex 必须为 0。
PyMuPDF page.get_images(full=True) 提取到 <outdir>/figures/:
| 论文图类型 | 文件名 | |---|---| | 框架图 | fig_framework.png | | 平行趋势 | fig_ch4_parallel.png | | PSM 平衡 | fig_ch4_psm.png | | CSDID 事件研究 | fig_ch4_csdid.png | | 安慰剂检验 | fig_chN_placebo.png | | CNKI 趋势 | fig_cnki_trend.png |
验证:每张 figures/*.png 在 .tex 中出现至少一次;零孤儿。
生成文件:<path>/defense.tex
时长:<N> min
总帧数:<count>
排版检查(chinese-ppt2 新增):
\linespread 1.3:已启用
parskip 3pt:已启用
enumitem 列表间距:已配置
行数预算超标帧:0
AI 味短语(关键比较:/理论映射:...):0
章节括号注释((第 N 章·XX)):0
CJK—CJK 空格:0
PDF 越界页(y>239 / x>450):0
数值覆盖率:
带真实系数的表格:X / Y
[TODO 0 剩余:0
占位符检查:0
图片处理:
从 PDF 提取:N 张
已插入 .tex:N 张
尺寸:0.62 / 0.55 / 0.50 \textheight
帧清单:
§1 研究背景与问题:X 帧
§2 文献综述与理论基础:X 帧
§3 数据与变量:X 帧
§4--§6 实证:各 X 帧
§7 三章综合对比与研究结论:X 帧
Overleaf 编译:
1. 新建 Blank Project
2. 上传 defense.tex + figures/
3. Settings → Compiler → XeLaTeX
4. Recompile × 2SKILL.md 和 templates/empirical_paper_cn.tex。基准系数、样本量。
对已经存在的 chinese-ppt 生成的 defense.tex:
\usepackage{enumitem}、\linespread{1.3}、\setlength{\parskip}{3pt...}、\setlist[...]。
bash grep -n '关键比较:\|理论映射:\|核心机制:\|理论含义:\|政策含义:' defense.tex 每一条改写成自然句。
bash grep -n '(第[四五六七]章\|(跨章' defense.tex 出现在非 \section 行的全部删除。
\setlist[itemize]{topsep=1pt,itemsep=1pt,parsep=1pt}\linespread{1.15}\selectfont 局部覆盖,防 7 条目在 1.3 行距下溢出。
继承 chinese-ppt 的全部理由,并追加:
段后 3 磅"(Word 标准学术排版手感)。
到不了一页,是否可以前面这一页拿出一半"。
AI 写的"。
chinese-ppt2/
├── SKILL.md # 本文件
└── templates/
├── empirical_paper_cn.tex # 模板 .tex(含占位符)
└── figures/
├── logo_cufe_full.png
└── logo_cufe_small.png模板复用 chinese-ppt 的 templates(本 skill 复制了一份)。 后续迭代可以在模板 .tex 里直接写死升级 1 的导言区配置。
Other measured skills in the registry, with their headline benchmark lift.