082010

我不确定这是不是R和Sweave能达到的最漂亮的境界:

下载:一份由pgfSweave生成的人模狗样的动态文档

这两天花了点时间,把跟LaTeX、LyX、Sweave有关的一系列中文问题从头到脚翻了个遍,目前为止,明白并解决了如下问题(基于带有MikTeX 2.8的CTeX 2.8.0.125、LyX 1.6.5、R 2.10.1、R包pgfSweave 1.0.3,操作系统Win XP,从头到尾一直用UTF-8编码):

  1. LaTeX说中文了)LaTeX生成可复制粘贴的中文PDF文档:由于我的惰性,还用着N年前的CTeX,那个老版本CTeX中的MikTeX貌似一直有问题,比如无法更新LaTeX宏包,更不必说那些dvipdfmx之类的程序了,估计人家作者都已经更新了无数个版本我还不知道。在我陈旧的印象中,要用LaTeX生成可复制粘贴的中文只有一种办法,就是用dvipdfmx把dvi转为pdf,而我陈旧的印象又记得dvi文件只能由latex命令生成,并且用latex编译的文档必须用EPS图形,这一直让我觉得很不爽,因为我实在不爱用EPS,比如R的postscript()设备(可生成EPS图形)不支持半透明色,而且图形中要用中文字符的话配置非常麻烦(N年前我请教了Paul Murrell,虽然搞明白了,但心里仍有疙瘩)。我的偏好是用pdflatex命令编译文档,图形也用PDF格式(pdflatex默认支持PDF和PNG图形),用R生成PDF图形也方便、漂亮,所以配合Sweave很容易生成一篇干净利索的PDF文档;但pdflatex命令直接编译生成的中文文档中,中文字符是不能复制粘贴的,因为复制出来就是乱码。所以呢,我陈旧的知识让我的这个“麻烦问题”一直没有得到解决。
十二 082009

来有些奇怪,有几位R core们居然给本小子写邮件,让本小子着实感到吃惊。比如,首先是Brian Ripley,这是R core中的core,前面提到过他在R源代码中的突出贡献,这位真人不露面、网上找不着照片的大佬,前段时间给我发封邮件说,你小子的animation包的启动消息不正规啊,因为我用suppressPackageStartupMessages()无法屏蔽启动消息;我一看,R里面居然还存在这么长名字的函数,顺便学习了message()函数,从此不再用老土的cat()函数了,后来考虑了一下,干脆把启动消息去掉了,library(animation)不会再有任何提示消息。

然后是我发现Duncan Temple Lang这位不靠谱的大叔做着一些我很喜欢的不靠谱的事情,于是乎对Omegahat心向往之,一来二去聊了聊,将来有机会一定要会一会他。

Sweave对注释的处理是要么完全去除,然后R代码会被整理整齐,要么完全保留,但R代码也保留原样,而我一直希望既能保留注释又能整理代码,这才诞生了animation包中tidy.source()函数(在小邱聪明的技巧下),前段时间想想给Friedrich Leisch,也就是Sweave的作者,发封邮件说了这个事情,打探一下是否能多设置一些Sweave选项,比如把parse()deparse()函数以选项的形式抽象出来,这样就可以实现既整理代码又保留注释的功能了,不过大叔貌似很忙,回了一封邮件就再也没有音信了,后来由于Michael Friendly对Sweave的一些功能请求在R-help上发了邮件,我们一干人等通过Duncan Murdoch间接了解到Friedrich的确很忙,不过好消息是圣诞节过后Sweave可能会有更新,届时用户可以自行设置图形设备,不必局限在PDF和EPS。但整理代码的事情仍然遥遥无期……唉,还得用硬性Hack的方法。

Martin Maechler前面提过,看到我们开R会,说要向The R Journal交报告啊,回头再跟他谈谈明年R会议的事情。

最意想不到的是,Duncan Murdoch刚才居然给我发个邮件问问题,额滴神啊,这位大叔可是Rtools的管理者、若干个包的作者(rgl等)啊。不过大叔问的是Flash的问题,还好我知道那么一点点,算是能解决。趁此机会,干脆回问两个C语言问题,子曾经曰过:问一个够本,问两个赚一个。

052009

些LaTeX用户可能觉得敲代码太费事了,那么这里推荐一下LyX。LyX是一个所见即所得的编辑器,因为它基于LaTeX,所以排版质量没啥好说的。关键是它可以和Sweave结合起来用,只要到CRAN下载LyX相关配置文件就可以了。

详细使用方法参见R News 2008年第1卷的第一篇文章”Using Sweave with LyX”。

WWW.YIHUI.NAME XIE@YIHUI.NAME © 2007 - 2010 by Yihui Xie