---
title: 讲稿和文章不是同一份东西
date: 2026-09-21
summary: 一份源文件渲染成文章和幻灯片，看起来省事，实际把对应关系搞错了。
hero: https://liuzhengdong.babelgo.cn/talk-vs-post/assets/hero.jpg
heroAlt: 崖顶上的讲台和摊着笔记本的小桌，面对同一片海湾
---

想把一个 idea 既写成文章又讲成演示，最容易想到的办法是写一份源文件，渲染出两种形态。Quarto 和 reveal.js 的 scroll view 都提供这个能力。用下来会觉得别扭，原因不在工具，在于它假设文章和幻灯片是同一份内容的两种样子。

## 工具把对应关系搞错了

演讲里承担论证的是你说出来的话，幻灯片只是视觉锚点。文章里承担论证的是正文。所以真正同构的两样东西是文章正文和讲稿，幻灯片在文章那边根本没有对应物。

![左右对照：一份源文件两种渲染，和文章正文对应讲稿的正确关系](https://liuzhengdong.babelgo.cn/talk-vs-post/assets/mapping.svg "把幻灯片当成文章的另一种渲染，等于要求同一段文字既能读完又能当锚点。")

这个错位在写的时候就能感觉到：为了让幻灯片能读，你会往页面上加字，讲的时候听众在读屏幕不听你说；为了让页面干净，你把字删到只剩关键词，导出成文章就什么都没说。

## 两边真正共用的只有证据

图表、截图、录屏、那几个关键数字——这些两边完全一样，而且是最费工的部分。叙述不一样，载体不一样，只有证据一样。

![三层结构：载体和叙述各两份，证据共用一份](https://liuzhengdong.babelgo.cn/talk-vs-post/assets/layers.svg "证据层横跨两边，上面两层各写各的。")

叙述为什么不能共用，差别在这几行：

|  | 讲稿 | 文章 |
| --- | --- | --- |
| 谁控制节奏 | 讲的人 | 读者 |
| 能不能回看 | 不能，过去就过去了 | 能，随时往回翻 |
| 论证放在哪 | 你说出来的话 | 正文 |
| 因此需要 | 重复、铺垫、明确的段落提示 | 标题和目录来导航 |
| 密度 | 低，一次只能进一个意思 | 高，读者自己调速 |

这两种需求没法用同一段文字满足。

## 落地：一个主题三样东西

```
topics/<主题>/
  assets/     图表和截图，两边共用
  talk.md     幻灯片放证据，论证写在 speaker notes 里
  post.md     文章，同一批图，配更完整的图注和上下文
```

`assets/` 用相对路径引用，幻灯片和文章各自解析到同一批文件。改了图，两边同时更新；改了叙述，只影响一边。

`talk.md` 里一页长这样——页面上只有一句话和一张图，论证全在最后那个注释里：

```markdown
---
layout: center
---

## 两边真正共用的只有证据

![三层结构](https://liuzhengdong.babelgo.cn/talk-vs-post/assets/layers.svg)

<!--
图表、截图、录屏——这些两边完全一样，而且是最费工的部分。

上面两层各写各的。听众不能回看，所以讲稿要重复、要铺垫；
读者能跳着看，所以文章可以更密，但要靠标题导航。
-->
```

`pnpm notes` 把这些注释按页倒出来，就是文章的初稿。

## 先写散文，再抽幻灯片

先写文章或者长 speaker notes，把论证想清楚，再从里面抽幻灯片。抽的过程本身在逼你决定每页只留哪一个视觉锚点。

反过来先堆幻灯片，容易得到一批看着挺满、但拼不成文章的页面——因为那些页面从来没有承担过论证，它们只是关键词的排列。
