幻灯片上的代码,多半是截图。看着还行,但它不会动:你要么直接给出最终结果,要么摆上三张图,指望观众自己看出差别。
Keynote 能做得更好。神奇移动会在两张幻灯片之间做插值,只要代码是真正的文本而不是图片,它就会逐个词地动起来——一行往下让出位置,一个值变了,整块内容出现,周围的一切随之挪动腾地方。
这就是两张幻灯片加一个过渡。没有 After Effects,没有视频轨道。
为什么截图做不到
神奇移动的原理,是把相邻两张幻灯片上的对象一一配对,再在两者之间做动画。一张图片就是一个对象。Keynote 可以移动它、缩放它、让它淡入淡出,却没法伸手进去单独动第四行——在 Keynote 看来,根本不存在什么第四行。
文本不一样。文本框里装的是一个个词,神奇移动能把它们分别配对。
所以整个做法的关键,是把带颜色的代码以文本形式弄进 Keynote。手敲一遍再手动上色是折磨。从编辑器里拷贝又会丢掉高亮,因为编辑器往剪贴板里放的是纯文本。
把带颜色的代码作为文本导出
Codeshot 能导出两样东西。PNG 是合成好的图:背景、窗口外框、阴影都在里面。RTF 只有代码本身,是带颜色的文本。
把格式设为 RTF,按拷贝 RTF。RTF 里没有背景,这是故意的——背景由幻灯片自己提供,文字后面再压一层只会碍事。
有个细节值得知道,因为粘贴过去的代码通常就毁在这上面:RTF 用名字来指定字体,而系统等宽字体用的是一个私有名称,别的 App 解析不了。解析失败之后,它们会替换成某种比例字体,于是让代码之所以像代码的列对齐就塌了。Codeshot 在导出时会换成 Menlo,避免这种情况。如果字体是你自己挑的,那个名字本来就是公开的,会原样带过去。
做出两张幻灯片
粘贴到幻灯片上。 ⌘V。颜色会一起过来。文本框可以随意调整大小,但别重新敲一遍——神奇移动是靠词本身来配对的。
复制这张幻灯片。 在导航器里选中它,按 ⌘D。现在你有两张一模一样的幻灯片。
编辑其中一张。 可以往第二张上补还没有的行;也可以——这样往往更省事——先把写好的代码粘上去,再从第一张上删行,直到它呈现出更早的状态。你没动过的部分,就是神奇移动要动画的部分;你加上或删掉的,就是它要淡入淡出的部分。
倒着做更值得推荐。神奇移动是靠词本身配对的,所以该待着不动的行,在两张幻灯片上必须一模一样。从副本里删就能保证这一点;手动重敲一行,则是让某个词悄悄配对失败、于是跳一下而不是滑过去的典型做法。
顺序很重要:过渡属于你离开的那张幻灯片,所以要先做之前的状态。
决定成败的那一个设置
选中第一张幻灯片,打开动画效果边栏,添加神奇移动。
然后把匹配从默认值改成按单词。
整个效果全靠这个设置。不改的话,神奇移动会把文本框当成一个整体对象来做交叉淡化——你得到的是两个状态之间的一团模糊,而不是会动的代码。按单词是让它把两张幻灯片上的词逐个配对、分别做动画,行会滑动、值会就地变化,都是从这儿来的。
代码的时长取 1.5 到 2 秒读起来正合适。再快,观众就跟不上是哪一行动了,而这恰恰是整件事的意义所在。
使不匹配的对象渐变保持勾选。新行的出现和旧行的消失之所以是渐变而不是硬弹出来,靠的就是它。
串成一个序列
三张幻灯片、两次神奇移动,你就能带着观众一步一步走完一次重构:朴素的写法、抽出函数之后的写法、最终形态。每次过渡都把没变的行原样带过去,观众的视线便始终落在真正变了的地方。
每一步都要小。一次过渡差个两三行就够了——一张换掉一半内容的幻灯片,动起来只会变成噪声。
什么时候该用图片
不是每张代码幻灯片都需要这么做。
如果代码根本不会变,PNG 更简单、更锐利,还自带那些让画面显得像是设计过的窗口外框和背景。以 2× 导出就完事了。那条路子在完整流程里讲过。
当重点是变化本身时,才该用 RTF 加神奇移动:你在展示一处 diff、在一点点搭起某样东西,或者在解释这一版为什么变成了下一版。
不止于 Keynote
同样的 RTF 也能放进 Pages、Word,以及任何接受多信息文本的地方。它是带颜色、可选中、可搜索的文本,而不是一张图——这也意味着它对屏幕阅读器依然可读,别人还能从你的文档里拷走一行直接运行。