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 / fixed-geometry frames. Use for "做中文学术PPT 2 版"、"中文 Beamer 改进版"、"答辩 PPT chinese-ppt2"、"防越界 PPT"等请求。用户在 Overleaf 编译,只产出 .tex + figures/,不要附加 compile 脚本。
Resources
1Install
npx skillscat add brycewang-stanford/auto-empirical-research-skills/chinese-ppt2 Install via the SkillsCat registry.
chinese-ppt2
相对 chinese-ppt 的升级点(先读这一节)
本 skill 继承 chinese-ppt 的全部硬规则,并追加 7 项一级强规则。新规则均来自
实践中发现的排版问题与用户反馈,不得关闭。
升级 1 — 全局行距与段距(强制)
导言区必须包含:
\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)。
升级 2 — 帧内容行数预算(强制)
启用 \linespread{1.3} 后,每帧的可用行数(正文,不含标题、页脚)
严格按下表上限。超过 → 强制拆帧(见升级 3)。
| 帧类型 | 最多正文行数 | 备注 |
|---|---|---|
| 纯段落(§1 / §2) | 12 行 | 每段 2--3 句,不超 4 段 |
| 段落 + 列表 | 10 行 | 列表 ≤ 4 项 |
| 纯列表 | 列表 ≤ 4 顶层项,每项 ≤ 2 行 | 嵌套 subitem ≤ 2 层 |
| 表格 + 讨论 | 表格 ≤ 6 中间行,讨论 ≤ 2 行 | 超了拆讨论帧 + 表格帧 |
| 表格单帧 | 表格 ≤ 10 中间行 | 超了拆两张表 |
行数估算(重要):
- 短项(一句半以内、无括号引用) ≈ 1.5 行
- 中项(一个英文括号引用
(Xxx, 20xx)或一句完整陈述) ≈ 2 行 - 长项(2--3 个串联引用
(A 等, 2022;B 等, 2023;C 等, 2024)或双分号
的复合句) ≈ 3 行 - 每段 2--3 句正文引子 ≈ 2 行
写前先数:3 长项 × 3 行 = 9 行 已占满纯列表帧预算。
文献综述类(每条几乎都是长项)再加引子就必超 10 行,要么压引子、
要么按主线再拆。典型反例:一帧里塞 主线 A(2 长项)+ 主线 B(3 长项)
- 两段引子 = 约 14--16 行,必然越界,应拆成主线 A 单帧 + 主线 B 单帧。
升级 3 — 越界时的"均分拆帧"策略(强制)
按溢出幅度分档处理。优先级从上到下:
| 溢出程度 | 首选做法 |
|---|---|
| 溢出 ≤ 1 行 | 帧内局部 \setlist[itemize]{topsep=1pt, itemsep=1pt, parsep=1pt};必要时把一个长句拆短 |
| 溢出 2--4 行(不够撑满新帧) | 对半拆:前帧只留一半内容,另一半到新帧,新帧用一段 2--3 句的承接话 + 结论扩展把空间填匀。不能前 90% 后 10% |
| 溢出 > 4 行 或 含表格 | 自然拆两帧,各自完整 |
对半拆的具体做法(关键)
- 按概念维度拆,不是按机械位置切一刀:
- 4 个 bullet 的机制帧 → 拆成"(上) 披露 + 责任" / "(下) 认知 + 治理",每帧 2 项
- 2 个表格的变量定义帧 → 拆成"核心 X" / "控制 X_it",各 1 表
- 两条主线 + 交叉空白 → "(一) 两条主线" / "(二) 交叉空白 + 本文切入"
- 每个半帧补一段承接 / 小结,避免稀疏:
- 后帧开头:一句"X—Y 的外部压力继续传导到决策层:"(衔接)
- 后帧结尾:一句"机制推论:…"(把下沉的结论留给后帧)
- 命名约定(任选其一,一份 deck 内统一):
- 序号式:
变量定义(二)/变量定义(三) - 概念式:
机制(软实力):披露与责任/机制(软实力):认知与治理 - 上下式:
主要研究结论(上)/主要研究结论(下)
- 序号式:
错误示例(禁止):
- 禁止前帧 5 条 bullet、后帧只有 1 条 bullet + 1 句话(后帧空虚)
- 禁止后帧完全是前帧的续写、没有独立的引子(观众看页码以为漏了内容)
- 禁止用
\begin{frame}[allowframebreaks]自动分页(破坏手工设计的章节页码)
升级 4 — 禁止 AI 味表达(强制)
观众和导师一眼能识别"AI 写的"PPT。以下模式必须全部清除:
4a. 结论前的标签式短语 → 改成自然句
| AI 味 | 自然表达 |
|---|---|
\textbf{关键比较:} ...的符号与显著性差异。 |
我们重点看 β₁ 与 β₂ 在符号和显著性上是否不同。 |
\textbf{理论映射:} 验证可观察性推论——... |
这与前文的可观察性逻辑一致:... |
\textbf{核心机制:} ...传导路径... |
传导路径是这样的:... |
\textbf{理论含义:} ... |
这说明 ... |
\textbf{政策含义:} ... |
对政策制定者而言,... |
规则:不要以"关键 X:/ 理论 Y:/ 核心 Z:"开头 + 冒号 + 一句话 的三段式
模板写结论。直接用完整陈述句。
4b. H1/H2/H3 假设后不加章节括号
- 错:
\textbf{H1(第四章·信号传递):} HSGT 显著提升 GTFP。 - 对:
\textbf{H1:} HSGT 显著提升 GTFP。
章节归属在下面的 \section{} 和页脚 \insertsectionhead 已经显示,
在假设旁边再标一遍是 AI 的冗余模式。
4c. 概念后不加"(xxx)"型自注释
- 错:
\textbf{政策窗口(样本中部):} - 对:
\textbf{政策窗口:} - 错:
双碳目标(碳达峰 + 碳中和) - 对:
双碳目标 —— 碳达峰 + 碳中和(用破折号自然衔接)
规则:如果括号内是对前面短语的同义复述,删;如果是补充事实
(人名、年份、缩写英文名),保留。
4d. 结论 / 创新 / 建议页禁用 "F1 / F2 / F3" 编号前缀
主要研究结论、创新点、政策建议这类总结页,不要在每个 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{...(自然短语)。} ... |
规则:
- bullet 的序号已经由
\begin{itemize}/\begin{enumerate}自动表达,
不要在正文里再手写 F1 / C1 / P1 / 发现 1 / 结论 1 这类机械编号。 - 起始粗体只写自然主语短语 + 句号 / 冒号:如"主效应成立。"、
"情境依赖明显。"、"视角创新。"、"顶层设计。"、"监督机制。" - 创新点帧用
\begin{enumerate}让 1. 2. 3. 自动编号,不要 再写创新 1:/1. 视角创新:—— 前者是 AI 模板,后者是重复编号。 - H1/H2/H3(研究假设)可以保留(它们是论文里的正式假设编号,读者
有预期);但结论页对应假设时用"主效应成立 / 转型驱动获验证"等
自然短语,不要再出现"F1 / F2 / F3"这种并行编号。
升级 5 — CJK 空格与中点(·)严守规则
xeCJK 默认会对 CJK—Latin 过渡插入小空格;不要在 CJK—CJK 之间人为加空格。
5a. 中文之间不能有空格
- 错:
我们 重点 看 两者 差异 - 对:
我们重点看两者差异 - 错:
中 · 英 混排(中点两侧空格让视觉突兀) - 对:
中·英混排或中、英混排
5b. 中点(·)使用规则
- 允许:frame 标题的视觉分层(
第五章 · 基准讨论:GII 主要在下游) - 允许:作者姓名缩写(
Fama · French) - 禁止:正文括号内当章节注脚(如
(第四章 · 信号传递)) - 禁止:并列概念之间(改成
、、+、/)
5c. 中英混排空格保留
HSGT 显著提升 GTFP、N = 7{,}551、2012 年 这类英文 / 数字两侧的空格
不要去,xeCJK 依赖它们正确排版。
升级 6 — 表格横向越界处理
4+ 列 + 长列头("超效率 GTFP"、"非重污染子样本")横向很容易越界。
首选做法:组标题行 + \multicolumn + \cmidrule,而不是把全部
文字塞进第二行:
\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
或拆帧。
升级 7 — TikZ / 固定几何环境必须重置 \linespread{1.0}(强制)
为什么会有这条规则。 全局 \linespread{1.3}(升级 1)作用在任何会读\baselineskip 的地方,包括:
- TikZ 节点里的
\\换行 —— 节点内容按 1.3× 行高排版,撑破minimum height设计的节点框,把整张画布顶进页脚; - tabular 的行高 —— 每行
\\多占 30% 垂直空间,6 行的表变成 8 行的高; \begin{center}的topsep—— 画布整体向下偏移;\includegraphics后 caption 的垂直间距;\node文本与minipage里的 baseline。
这些都是按 linespread=1.0 设计 的固定几何元素。升级 1 的 1.3 只应该
作用在正文段落与列表项。
首选实现:全局 hook(升级 1 已内置)
在导言区(升级 1 的配置块里)加:
\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 的默认
方案。
⚠ 不要在 hook 里加 \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 来不及更新的边缘场景。
自检:
grep -n 'AtBeginEnvironment{tabular}{\\\\linespread{1.0}\\\\selectfont' report.tex
grep -n 'AtBeginEnvironment{tikzpicture}{\\\\linespread{1.0}\\\\selectfont' report.tex
# 命中任何一行说明用了老版本 hook,必须删掉 \selectfont⚠ enumerate 必须显式指定 label(实战教训 2)
只写 \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 截断递归:
\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 那条被污染的路径。
自检:
grep -n 'setlist\[enumerate\]{' report.tex # 命中说明没带 ",1" + label=,必须改
grep -n 'setlist\[enumerate,1\]{label=' report.tex # 必须 >= 1不要在 hook 已生效时再手工包装(实战教训 3)
早期版本建议"hook + 手工 {\linespread{1.0}\selectfont ... } 双保险"。
实测证明这会触发 TikZ 整帧变白(X→M→Y 框架帧编译后空白)。怀疑原因:
\selectfont在 frame body 开头触发时,beamer 还在做 frame 初始化,
字体状态未就绪;- 外层
{...}与\begin{center}嵌套后,TikZ 的remember picture
overlay 坐标锚点错位; - 或者
\selectfont与\AtBeginEnvironment注入的\selectfont在
TikZ 节点字体切换时互相抵消。
规则:全局 hook 已经处理好 tabular / tikzpicture 内部行距,不要 在
frame body 再包一层 {\linespread{1.0}\selectfont ... }。如果外层的\begin{center} 或 \vspace 让画布偏下,用 \vspace*{-0.4em} ~\vspace*{-0.8em} 向上微调,不要动 linespread。
不要用的做法
- 不要 在已有全局 hook 的前提下,再手工
{\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。
检测(retrofit 时)
确保导言区有 \AtBeginEnvironment{tabular} 和 \AtBeginEnvironment{tikzpicture}
两条 hook:
grep -c 'AtBeginEnvironment{tabular}' defense.tex # 应该 = 1
grep -c 'AtBeginEnvironment{tikzpicture}' defense.tex # 应该 = 1若缺失,按"首选实现"补上。补完后只有大型 TikZ 诊断帧(例如 X→M→Y 框架图)
需要手工再加 frame body wrapper —— 通常就 1 张。
升级 8 — §7 必须包含"政策建议"帧(强制)
中文学术 PPT 的 §7 不能只有"研究结论"和"研究不足"。中文学术传统
(答辩、学术会议、组会汇报)对 §7 的预期结构里,\textbf{政策建议 /
实践启示}是必备环节——导师和听众会主动寻找"这项研究对政策 / 实践有
什么用"。缺失会被直接追问。
强制结构
§7 至少按此顺序包含以下 4 类帧:
- 主要研究结论(1 帧)—— 对照 H1/H2/H3 逐条收束,用自然短语起头
(见升级 4d),\textbf{不要用 F1 / F2 编号}。 - 主要创新点(1 帧)—— 视角 / 方法 / 结论三选一到三,用
enumerate
自动编号。 - 政策建议 / 实践启示(\textbf{1--2 帧,必填})—— 分层给出具体
可操作的建议。超过 10 行按升级 3 对半拆(上 / 下)。 - 研究不足与未来展望(1 帧)—— 样本、变量、机制、外部推广。
常见的"政策建议"对半拆法:
- "顶层设计 + 转型机制" 为一帧;
- "监督机制 + 差异化配套" 为一帧。
政策建议的写法
- 以实施主体为锚点(监管部门 / 行业协会 / 企业管理层 / 金融机构 /
学界),不要以"第一、第二、第三"或"P1 / P2"开头。 - 每条 = 对象 + 动作 + 抓手,避免空洞的"加强、完善、促进":
- 错:
完善绿色基金监管体系。 - 对:
监管部门应制定统一的绿色基金认定标准,区分泛 ESG 基金与 绿色专项基金,并将该分类写入基金募集说明书的披露要求。
- 错:
- 每条建议对应一个具体实证发现(主效应 → 顶层设计;异质性 → 差异化
配套;机制 → 治理与披露),不要脱离论文自创建议。 - 帧标题允许"政策建议(上)/ 政策建议(下)"或"政策建议:顶层设计与
转型机制"这类概念式命名。
政策建议帧的排版(严格列表化,不用连续段落)
政策建议帧\textbf{必须用 itemize 结构},不要写成 3 段 3--4 行的粗体
段落——在 1.3 行距 + 3pt 段距下,3 段段落式写法几乎必然顶破页脚,
导致后面的帧被挤到下一页编译失败,表现为\textbf{页码停留在政策建议
帧的前一页,后续帧不出现在 PDF 中}。
正确写法(列表化、每条 1--2 行、帧正文总行数 ≤ 10):
\begin{frame}{政策建议:顶层设计与转型机制}
\textbf{监管部门。}
\begin{itemize}
\item 制定统一的绿色基金认定标准,写入基金募集说明书披露要求;
\item 区分泛 ESG 基金与绿色专项基金,明确运作边界;
\item 按区域经济水平推行差异化监管策略。
\end{itemize}
\textbf{基金管理人。}
\begin{itemize}
\item 重点支持原创性、突破性绿色发明专利研发;
\item 将绿色责任履行水平纳入投资评价与绩效考核。
\end{itemize}
\end{frame}错误写法(连续段落 + 粗体引导 + 每段 3--4 行):
% 反例:实测会在编译时把后续帧挤丢
\begin{frame}{政策建议(上)}
\textbf{顶层设计。} 建议由官方对"绿色基金"作出明确定义……(3 行)
\textbf{转型机制。} 鼓励绿色基金重点支持……(3 行)
将\textbf{绿色责任履行水平}纳入……(3 行)
\end{frame}行数预算:政策建议帧正文 ≤ 10 行(含列表分隔)。超了就按升级 3
对半拆成"政策建议(上)/(下)"。
自检
grep -c '政策建议\|实践启示' report.tex # 必须 >= 1若 §7 内无任何政策建议类帧,视为\textbf{结构性缺失},必须补齐。
升级 9 — 帧标题禁用"(一)(二)(三)"数字 / 汉字序号前缀(强制)
帧标题\textbf{不要}用"(一)(二)(三)(四)"或"(1)(2)(3)"
这类机械顺序号来区分同一主题的多张帧。序号由帧顺序与目录页自动表达,
观众不需要再看数字才能理解帧间关系。序号前缀也是 AI 模板的强标记。
- 错:
研究背景(一):双碳战略/研究背景(二):融资困境/研究背景(三):已有研究/研究背景(四):制度窗口 - 对:
研究背景:双碳战略与新质生产力/研究背景:绿色转型的融资困境/研究背景:绿色金融工具版图/研究背景:绿色基金的制度窗口
规则:
- 同主题的多帧用\textbf{"主题:核心概念"结构}区分,由冒号后的概念名
表达差异,不要用数字 / 汉字序号。 - 理论基础分多帧时,用概念副题(如"理论基础:代理视角——漂绿与私利
的双重遏制")或括号点明视角("理论基础(代理视角)"),但\textbf{不
要用"理论基础(一)(二)(三)"}。 - 允许的例外:
主要研究结论(上)/(下)、政策建议(上)/(下)
这类\textbf{对半拆帧}的命名约定(见升级 3)—— 它们表达的是"同一帧被
拆成两页",不是"多个平行主题的顺序编号",语义不同,允许保留。
自检:
grep -nE '\\begin\{frame\}\{[^}]*([一二三四五六七八九十0-9]+)' report.tex命中行逐一改写为概念式标题。
升级 10 — 章节顺序:文献必须在 X→M→Y 框架之前(强制)
X→M→Y 框架图是对\textbf{研究假设}的图示化总结,应当出现在读者已经
看过文献综述、理论基础、假设之后,而不是抢在文献综述之前。
强制顺序:
- §1 只放 "研究背景帧 × N + 研究问题帧"(不放框架图);
- §2 按此顺序:
- 文献综述(主线 / 缺口)
- 理论基础(至少 2 帧,见升级 11)
- 研究假设(H1/H2/H3)
- X→M→Y 研究框架帧(放在 §2 末尾)。
早期 chinese-ppt 模板把框架图放在 §1 研究问题之后,是一个应当纠正的
历史设计。在 chinese-ppt2 中,框架图一律进入 §2 末尾。
理由:观众在看到 X→M→Y 图之前,应当先理解"为什么是这些 X、这些 M、
这些 Y"——这需要文献缺口与理论基础铺垫。框架图抢在文献之前会让观众
误以为这是一项\textbf{事先假定好结构}的论证,而不是\textbf{从理论
推出}的框架。
升级 10.5 — 页脚只显示 \insertframenumber,不要用 "X / N" 格式(强制)
页脚\textbf{不要写}成 \insertframenumber\,/\,\inserttotalframenumber。\inserttotalframenumber 在 ctex + fandol + beamer 组合下会\textbf{偶发
返回诡异值}——实测观察到 34 帧的 deck 在页脚输出 32 / 80 这样的奇怪
分母(真实总数 34,aux 文件里写入了一个毫无根据的 80)。原因可能与
以下因素有关:
- beamer 的
\c@framenumber计数器在AtBeginEnvironment{tabular}/{tikzpicture}hook 叠加时被污染; - ctex 的中文章节注入机制与
\beamer@inserttotalframenumber的 aux
写入时机冲突; - 编译轮次不足时 aux 缓存的陈旧值被直接读取。
无论根因,最稳的做法是放弃分母,直接只显示当前帧号。观众并不需要
"X / 总数"就能理解进度,目录页已经给出了整体结构。
正确写法:
\raggedleft{\color{cufenavy}\footnotesize%
\insertframenumber}禁止写法:
\raggedleft{\color{cufenavy}\footnotesize%
\insertframenumber\,/\,\inserttotalframenumber} % ← 会输出 "X / 80"自检:
grep -n 'inserttotalframenumber' report.tex # 必须为空升级 11 — §2 理论基础必须具体详细(最少 2 帧)
理论基础\textbf{不能压成 1 帧大概念综述}。把两条理论视角(代理 /
融资 / 契约 / 信号 / 委托代理 / ...)合在一帧里各写 2--3 句话,观众
会感觉"理论没讲清楚"。中文答辩和学术会议对理论部分的详细度要求明显
高于英文 seminar。
强制结构:
- §2 理论基础\textbf{最少 2 帧},每帧聚焦一条理论视角;
- 视角丰富的论文(≥ 3 条视角)可扩展到 3 帧,并可加 1 帧"理论整合 /
逻辑之变"作收束; - 每帧\textbf{必须包含}:
- 视角名称(帧标题或首行粗体);
- 核心文献引用(2--3 篇代表文献);
- 该视角下 X → Y 的具体传导链(2--4 条,每条 1--2 行);
- 可观察预期 / 落地到 H 的映射(一句话)。
禁止:
- 禁:一帧内把代理视角 + 融资视角压成两段 3 行的段落;
- 禁:只讲"绿色基金可以缓解融资约束、提升企业治理"这种无具体传导
链的高度抽象话; - 禁:不引用具体文献的纯宏大叙事("基于委托代理理论,……"后面
没引就停)。
时长调节:§2 帧数表(升级自 chinese-ppt)是\textbf{下限};理论视角
多的论文可上浮 2--3 帧而不违反规则。
以下内容继承自 chinese-ppt(原硬规则全部保留)
用途
生成 可直接在 Overleaf 编译的中文 Beamer PPT,适用于:
- 博士 / 硕士学位论文答辩
- 中文学术会议 / 研讨会汇报
- 课题汇报、开题答辩、中期答辩
输出 确定性:同一篇论文 + 同一时长 ⇒ 同一套 PPT。
何时调用
- "做一份中文 PPT / Beamer"(新版)
- "中文 Beamer 改进版 / chinese-ppt2"
- "答辩 PPT 排版优化 / 防越界"
- "Retrofit 已有 chinese-ppt deck 到新版规范"
- 任何"做中文学术 PPT"类请求,默认优先 chinese-ppt2
输出规则
只交付 .tex + figures/ 文件夹,不写 compile.bat / Makefile /latexmkrc 等本地编译脚本——用户在 Overleaf 编译(compiler 必须设为
XeLaTeX,需连续编译两次让目录页对齐)。
硬规则(不得偏离)
引擎锁定:
xelatex(两次编译),禁止pdflatex。字体锁定:
\usepackage[UTF8,fontset=fandol]{ctex}。主题锁定:
\usetheme{default} + \useinnertheme{circles}+ 自建 CUFE
金融学院模板。宽高比锁定:
aspectratio=169, 10pt。色板锁定:
\definecolor{cufenavy}{HTML}{1F3A60} \definecolor{cufetext}{HTML}{2A2A2A} \definecolor{cuferule}{HTML}{7F8FAA}框架样式锁定:
- 顶部 0.15cm 深蓝色窄带
- 右上角小 logo,
anchor=east, yshift=-0.70cm - 帧标题 TikZ 绝对定位:
anchor=north west, xshift=0.40cm, yshift=-0.50cm - 帧标题
text width=\paperwidth-5.0cm,字号\large,颜色cufetext - 帧标题模板末尾
\vspace*{0.55cm}(不是 1.35cm) - 页脚:左
\insertsectionhead+ 右 页码 - 左下角不放东西
7 章节大纲锁定:
# 章节名(默认) 1 研究背景与问题 2 文献综述与理论基础 3 数据与变量 4 [第四章实证标题] 5 [第五章实证标题] 6 [第六章实证标题] 7 三章综合对比与研究结论 X→M→Y 框架帧必填(§1 内)。
所有回归表 Control Yes/No 格式,底部
Controls / Firm FE / 行业×年份 FE / N / Adj.R²,星号***/**/*。每个实证结果 = 讨论帧 + 表格帧 二元对。例外:小表合并单帧。
每个异质性维度 = 1 帧,按概念维度归并指标。
每个机制通道 = 1 对帧(讨论+表,或合并)。讨论侧 > 12 行按升级 3 拆。
每个进一步分析 = 1 对帧,不得合并缩水。
标题页格式:大 logo 左上、主标题深蓝加粗、副标题斜体、底部日期。
致谢页格式:正中"敬请各位老师批评指正!" +
Thank You \& Q\,\&\,A。目录页:footline 局部覆盖为空;
\linespread{1.15}\selectfont把
1.3 全局行距在目录页临时压回,防 7 条目溢出。无 emoji / 无图标 / 无 tcolorbox / 无
\begin{block}(除研究
问题帧"核心问题"块)。数值必须真实或标
[TODO 0.xxx]。禁用占位符。每张从 PDF 提取的图必须插入(零孤儿)。
图片尺寸锁定:全屏
height=0.62\textheight,双栏0.55\textheight,
本模板默认0.50--0.55\textheight。表格列标题必须两行:第一行
(1)(2)(3),第二行标签;4+ 列用
multicolumn 组标题(见升级 6)。中文帧标题禁止 math mode:
$\times$→×,$\to$→→,$\Rightarrow$→⇒,$+$→+。表格内的 math 不受限。标点符号:中文内容全角,表格内数字英文半角。
输入收集(一次性问全)
- 论文标题
- 答辩人 / 作者
- 指导教师(1--2 人)
- 机构(默认"中央财经大学金融学院")
- 场合(默认"博士学位论文答辩 · 20XX")
- 时长(分钟)— 20 / 25 / 30 / 35 / 40 / 45 / 60 / 90
- 研究问题
- X 和 Y
- 机制通道 M
- 异质性维度
- 进一步分析 / 扩展
- 样本区间与来源
- 输出目录
若用户提供 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 不随时长变化。
前置章节(§1 § 2)必须用段落文字
每帧 2--4 段完整段落,每段 2--3 句、约 30--50 字,关键词用 \textbf{} 粗体。
禁止纯项目符号。升级 2 的 12 行预算仍然生效。
生成前的自检流程(新增)
写完每一帧,在标记为"最终"之前,按顺序做 9 项检查:
- 行数估算:对照升级 2 的表,超了就按升级 3 拆。政策建议帧尤需
严格对照升级 8 的列表化写法,正文 ≤ 10 行。 - AI 味扫描:
grep '关键比较:\|理论映射:\|核心机制:\|理论含义:\|政策含义:'—— 命中改写。 - 章节括号扫描:
grep '(第[四五六七]章\|(跨章'(非\section行)—— 命中删除。 - CJK 空格 / 中点扫描:正文行内
·、两个中文字之间的空格 —— 命中调整。 - 编号前缀扫描(升级 4d):
grep -nE '\\textbf\{(F[0-9]|C[0-9]|P[0-9]|结论 ?[0-9]|发现 ?[0-9]|观察 ?[0-9])'
—— 命中删除机械编号,改成自然短语。 - 政策建议存在性(升级 8):
grep -c '政策建议\|实践启示'必须 ≥ 1;
若为 0,§7 缺失政策建议帧,按升级 8 补齐。 - 政策建议排版检查(升级 8):政策建议帧正文必须是
itemize结构,
不能是 3 段连续粗体引导段落。若看到\textbf{...。} ...\n\n\textbf{...。} ...
这种三段式,改为列表。 - 帧标题序号前缀(升级 9):
grep -nE '\\begin\{frame\}\{[^}]*([一二三四五六七八九十0-9]+)'
—— 命中行除"(上)/(下)"外全部改为概念式标题。 - 章节顺序(升级 10):§1 最后一帧必须是"研究问题"类,不是
X→M→Y 框架帧;X→M→Y 框架帧必须出现在 §2 的最末尾(在理论与假设之后)。 - 页脚格式(升级 10.5):
grep -n 'inserttotalframenumber' report.tex
必须为空;页脚只显示\insertframenumber。
对已有 deck 做 retrofit 时,按页号扫编译输出的 PDF,重复上述 4 项 + 越界检查
(PyMuPDF 提取每页文本 line,过滤掉 y ≈ 249 的 footer 行后,看 y1 是否 > 239
或 x1 是否 > 450)。
越界检测脚本模板
import 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}')框架帧(X→M→Y)锁定模板
§1 内,放在研究问题帧之后。参考 chinese-ppt 的三类 X / 六通道 M / 单 Y 模板,
本 skill 不变动。
表格格式自适应
自适应项
- 括号内容:SE 或 t,论文用什么就写什么。
- 固定效应行:用论文实际结构。
- 第二行列标签:用论文实际变量或分组。
不变项
- 第一行永远
(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 × 2工作流(新建 deck)
- 读本
SKILL.md和templates/empirical_paper_cn.tex。 - 若用户提供 PDF/docx,先读论文提取 X、Y、机制、异质性、进一步分析、
基准系数、样本量。 - 一次性询问缺失的输入项。
- 按时长表确定 §1/§2 帧数。
- 按论文实际展开 §4/§5/§6。
- 按升级 2 的行数预算逐帧估行数;预判要拆的帧,按升级 3 均分拆。
- 按升级 4 审查每一帧:无"关键比较 / 理论映射"标签,无章节括号注释。
- 按升级 5 扫空格与中点。
- 升级 1 的导言区配置写入。
- 复制模板 + 填充 + 图像提取 + 系数填充。
- 编译前做自检 4 项 + 越界检测脚本。
- 输出交付清单。
- 不生成 compile 脚本——用户在 Overleaf 编译。
工作流(retrofit 已有 chinese-ppt 的 deck)
对已经存在的 chinese-ppt 生成的 defense.tex:
- 注入导言:加
\usepackage{enumitem}、\linespread{1.3}、\setlength{\parskip}{3pt...}、\setlist[...]。 - 扫 AI 味:
每一条改写成自然句。grep -n '关键比较:\|理论映射:\|核心机制:\|理论含义:\|政策含义:' defense.tex - 扫章节括号:
出现在非grep -n '(第[四五六七]章\|(跨章' defense.tex\section行的全部删除。 - 编译、用 PyMuPDF 扫每页(见上方检测脚本)。
- 按升级 3 分级处理:
- 溢出 ≤ 1 行:帧内
\setlist[itemize]{topsep=1pt,itemsep=1pt,parsep=1pt} - 溢出 2--4 行:按概念对半拆帧(见升级 3 的对半拆做法)
- 溢出 > 4 行或含表:自然拆两帧
- 溢出 ≤ 1 行:帧内
- 再编译、再扫,收敛到 0 越界。
- 注意目录页:加
\linespread{1.15}\selectfont局部覆盖,
防 7 条目在 1.3 行距下溢出。
为何锁定这些约束
继承 chinese-ppt 的全部理由,并追加:
- 行距 1.3 + 段距 3pt —— 用户反馈:"行间距:多倍行距 1.3,段前 3 磅,
段后 3 磅"(Word 标准学术排版手感)。 - 越界均分拆帧 —— 用户反馈:"只超出一点点就另起一页,但这一点点也
到不了一页,是否可以前面这一页拿出一半"。 - 禁 AI 味短语 —— 用户反馈:"关键比较和理论映射,这两个东西就很像是
AI 写的"。 - 禁章节括号注释 —— 用户反馈:"研究假设提出,后面别加括号"。
- CJK 中点空格 —— 用户反馈:"中间空格显得很突兀"。
文件
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 的导言区配置。