skills/67-econfin-workflow-toolkit/chinese-ppt/SKILL.md
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 脚本。
npx skillsauth add brycewang-stanford/Awesome-Agent-Skills-for-Empirical-Research chinese-ppt2Install this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
本 skill 继承 chinese-ppt 的全部硬规则,并追加 7 项一级强规则。新规则均来自 实践中发现的排版问题与用户反馈,不得关闭。
导言区必须包含:
\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 长项)
按溢出幅度分档处理。优先级从上到下:
| 溢出程度 | 首选做法 |
|---|---|
| 溢出 ≤ 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 模板,后者是重复编号。xeCJK 默认会对 CJK—Latin 过渡插入小空格;不要在 CJK—CJK 之间人为加空格。
我们 重点 看 两者 差异我们重点看两者差异中 · 英 混排(中点两侧空格让视觉突兀)中·英混排 或 中、英混排·)使用规则第五章 · 基准讨论:GII 主要在下游)Fama · French)(第四章 · 信号传递))、、+、/)HSGT 显著提升 GTFP、N = 7{,}551、2012 年 这类英文 / 数字两侧的空格
不要去,xeCJK 依赖它们正确排版。
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
或拆帧。
\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 的配置块里)加:
\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 来不及更新的边缘场景。
自检:
grep -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 截断递归:
\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 + 手工 {\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。
{\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:
grep -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 类帧:
enumerate
自动编号。常见的"政策建议"对半拆法:
完善绿色基金监管体系。监管部门应制定统一的绿色基金认定标准,区分泛 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{结构性缺失},必须补齐。
帧标题\textbf{不要}用"(一)(二)(三)(四)"或"(1)(2)(3)" 这类机械顺序号来区分同一主题的多张帧。序号由帧顺序与目录页自动表达, 观众不需要再看数字才能理解帧间关系。序号前缀也是 AI 模板的强标记。
研究背景(一):双碳战略 / 研究背景(二):融资困境 / 研究背景(三):已有研究 / 研究背景(四):制度窗口研究背景:双碳战略与新质生产力 / 研究背景:绿色转型的融资困境 / 研究背景:绿色金融工具版图 / 研究背景:绿色基金的制度窗口规则:
主要研究结论(上)/(下)、政策建议(上)/(下)
这类\textbf{对半拆帧}的命名约定(见升级 3)—— 它们表达的是"同一帧被
拆成两页",不是"多个平行主题的顺序编号",语义不同,允许保留。自检:
grep -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 / 总数"就能理解进度,目录页已经给出了整体结构。
正确写法:
\raggedleft{\color{cufenavy}\footnotesize%
\insertframenumber}
禁止写法:
\raggedleft{\color{cufenavy}\footnotesize%
\insertframenumber\,/\,\inserttotalframenumber} % ← 会输出 "X / 80"
自检:
grep -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。
色板锁定:
\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 + 右 页码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 不受限。
标点符号:中文内容全角,表格内数字英文半角。
若用户提供 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 项检查:
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]+)'
—— 命中行除"(上)/(下)"外全部改为概念式标题。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}')
§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 × 2
SKILL.md 和 templates/empirical_paper_cn.tex。对已经存在的 chinese-ppt 生成的 defense.tex:
\usepackage{enumitem}、\linespread{1.3}、
\setlength{\parskip}{3pt...}、\setlist[...]。grep -n '关键比较:\|理论映射:\|核心机制:\|理论含义:\|政策含义:' defense.tex
每一条改写成自然句。grep -n '(第[四五六七]章\|(跨章' defense.tex
出现在非 \section 行的全部删除。\setlist[itemize]{topsep=1pt,itemsep=1pt,parsep=1pt}\linespread{1.15}\selectfont 局部覆盖,
防 7 条目在 1.3 行距下溢出。继承 chinese-ppt 的全部理由,并追加:
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 的导言区配置。
tools
Recommend AND run open-source AI tools, agents, Claude Code / Codex skills, and MCP servers for any stage of a literature review — searching, reading, extracting, synthesizing, screening, citation-checking, and paper writing. Use when the user asks "what tool should I use to..." OR "install/run/use <tool> to ..." for research/lit-review work: automating a survey or related-work section, PDF→Markdown extraction for LLMs (MinerU/marker/docling), PRISMA / systematic review (ASReview), citation-backed Q&A over PDFs (PaperQA2), wiring papers into Claude/Cursor via MCP (arxiv/paper-search/zotero servers), or chatting with a Zotero library. Ships a launcher (scripts/litrun.py) that installs each tool in an isolated venv and runs it. Curated catalog of 70+ vetted projects. 支持中英文(用于「文献综述工具选型」与「一键安装/运行」)。
development
Route empirical-research requests through the Auto-Empirical Research Skills catalog when this whole repository is installed as one skill in Codex, CodeBuddy, Claude Code, or another IDE. Use to choose and load the right vendored AERS skill for causal inference, econometrics, replication, data acquisition, manuscript writing, peer review and referee responses, citation checking, de-AIGC editing, or full empirical-paper workflows without reading the entire repository at once.
documentation
Use when the project collects primary data or runs a field, lab, or survey experiment, before the intervention begins — write the pre-analysis plan, size the sample from a power calculation, and register with the AEA RCT Registry. Apply after the design is chosen in aer-identification and before any outcome data are seen.
tools
Guide economists to authoritative data sources with explicit, confirmed data specifications before retrieval; interfaces with Playwright MCP to navigate portals and extract real data, not articles about data.