---
title: animation v1.2-0：里程碑
date: '2010-12-29'
slug: animation-v1-2-0-milestone
---

从圣诞节前一天到现在，我一直在更新animation包。在这五整天时间里，我提交了60次更新，完善了无数我曾想完善的细节，也增加了一些我期待的功能；到这个版本我才真的觉得可以开始正式宣传它了，以前都觉得灰头土脸，不可示人。这次在用户界面（也包括函数接口和文档）和程序逻辑、风格一致性上花了大工夫，尽量降低学习难度，尽量重用代码。具体说来有这么些变化：



	
  * 新增`saveHTML()`函数，作为古老的`ani.start()`和`ani.stop()`的替代。现在包中的`save*()`系列函数的用法都基本上统一，它们本身不再涉及动画参数，而是统一交给`ani.options()`去处理。`saveHTML()`做了这么几件工作：

	
    * 利用一个基于jQuery的JS库SciAnimator播放动画；本来这次我打算亲手用jQuery重写我的动画JS脚本的，结果就在我动手前几分钟，我去jQuery网站上看了一眼，发现有个人前几天刚刚发布了一个JS库，它做的工作跟我做的极其相似，这下省了我不少时间，正好直接拿来用；要是他晚发布几天，我肯定就要浪费时间了。SciAnimator这个库做得非常精致，不细看还真以为是个影音播放器，充分利用了现代CSS技术（你看，我就是以貌取人），扩展性也非常强。我用R生成一段JS脚本插入HTML页面，再调用这个库就可以播放动画了；

	
    * 将制作动画的R代码以及部分`sessionInfo()`也写入HTML页面，并用SyntaxHighlighter高亮之；这样保证动画的可重复性——别人双击代码复制，粘贴到R里面就可以重现动画了；高亮的代码看起来也漂亮一些；

	
    * 另外，`saveHTML()`也有一定智能性，如果两次调用这个函数都指定了同样的HTML文件名（`ani.options('htmlfile')`），那么两个动画就会被合并到同一个HTML页面中，这样，我们可以把多个动画放在同一个页面中，有时候一些动画的主题都相同，那么就可以合并在同一个页面中；




	
  * 改写了`ani.options()`函数，它不再依赖于`options()`来设定选项，而是自己有专门的选项变量供修改和读取，另外，它也不再限于给定的参数，可以设定任意选项；

	
  * 增加`ani.pause()`函数，功能为提供动画画面间的暂停，如果当前动画在一个非交互的图形设备中，那么这个暂定会被忽略，这样能在很多情况下节省等待时间；只有在交互式图形设备（如窗口设备）中才会停顿；

	
  * `saveLatex()`可以很方便在Sweave环境中使用了，它会自动检测自己是否在Sweave环境中并给自己智能命名；

	
  * `saveMovie()`和`saveSWF()`都会尽最大努力在Windows下去自动找相应的软件的位置（如ImageMagick和SWF Tools），如果你装了这些软件，但这些函数仍然找不到，那你可就真的打败我了；


这次更新才明白了Emacs的fill的意思，每次我写[NEWS文件](https://github.com/yihui/animation/blob/master/inst/NEWS)都很痛苦，因为要自己调整空格，昨天才意识到，原来M-q是这个意思！……娘的，不早说。先用`M-x text-mode`，然后`M-q`，一切搞定。

源代码包和Windows二进制包都可以在[GitHub的下载页面](https://github.com/yihui/animation/)中找到，感兴趣的客官可以先玩玩。可惜CRAN管理员似乎还在度假中，24号以来传上去的包都没动静。

下一步还有三大任务：



	
  1. 既然有了方便的`saveHTML()`函数，那么我的[动画维基网站](http://animation.yihui.org)基本上可以抛弃了——可以改用这个函数直接生成网页，这是个苦力活儿，希望有客官能和我合作；

	
  2. 重新开始写包的vignette——现在有了LyX，有了pgfSweave，有了自动配置脚本，有了`saveLatex()`，可谓万事俱备只欠东风；一年多以前请左辰研究cacheSweave期待能写出动态的动画文档，后来一忙就搁下了，现在杀回来肯定很容易了；看这一年时间里，技术发生了翻天覆地的变化；

	
  3. 两年多以前给JSS投了一篇关于这个包的论文，后来编辑返回了意见，但我一直没有修改，现在有底气可以修改论文重投了；


貌似寒假只剩十来天了，计划更新的书还没开动呢。昏死。

另：这次搞了个大显示器，分辨率1600 x 900，十分适合写代码——Emacs中C-x 3窗口一分为二，宽敞得很。
