归隐中看到一个很好笑的笑话,于是发过来,原文在某个Google Groups里,但天朝人民应该看不到,我Google的时候看见的。如下:
Never use spaces (or other odd characters) in directory or file names.
They make your teeth and hair fall out, start nuclear wars, and stop the trains running on time. Stick to A-Z, a-z, 0-9, “.”, “-”, and “_” for best results.
要是你不笑,咱们见了面估计也就只能谈谈天气了。
这类问题,就像我前些日子说到的PATH问题一样,提出来只想让人像李大嘴一样,垫着枕头撞柱子,一边撞一边念叨:空格!空格!空格!空格!……蕙兰!……
一个多月以前,我向LyX官方提交了三个基于ctex宏包的layout文件(见#7495号“传票”),分别用来写中文论文、书籍和报告,熟悉ctex的一看就明白这是什么意思。这些新的layout将在2.0.1中被收录,顺利的话,六月份(可能是下旬)会发布出来。到时候,只要你的LaTeX中安装了ctex宏包,LyX文档设置中就会出现三个类:
- article (CTeX)
- book (CTeX)
- report (CTeX)
如果你用模板新建文档(Ctrl+Shift+N),那么将会看到一个模板文件:
- ctex.lyx
用模板的好处在于可以省去一些繁琐设置,对中文文档来说,这些设置包括:
- UTF8编码(推荐),包括Class Options中的Custom一栏填入UTF8(这个选项将传送给ctex宏包),另外,还要把语言修改为简体中文,语言的编码设置为XeTeX (utf8)
- 如果用Adobe中文字体并且用pdflatex编译,那么上面的Custom一栏还需要填入
,adobefonts,此处不解释,我假设你熟悉ctex宏包;否则要用XeTeX字体并用XeTeX编译 - 语言包的设置最好清空(设置为Custom,填入%),据我所知,LyX采用的babel宏包对中文文档完全是累赘(多出来一些
\selectlanguage{}的命令,很讨厌) - 导言区可能需要加入
\DeclareRobustCommand\nobreakspace{\leavevmode\nobreak\ },我不知道这是谁的bug
最重要的是第一项设置,就是编码,如果出错,再看后面三项。
知道的越多,迷惑就越多。今天研究了一天Tufte的样式(真的是很漂亮),搞定了所有中文和Sweave问题,不过接下来就要面临选择,要么做苦力,再把一百多幅图一个个调整一遍(主要是压缩宽度和裁左右白边),要么原地踏步走,把几个没有浮好的瓢按到合适的位置上去完事。
还是DJ兄给力,给的这篇关于如何使用LaTeX浮动召唤术的神帖相当的有用。书中的那些稍微高一点的图形现在都乖乖浮动到页面上方去了,下面的文字如流水般淌过。这事情,只能用《十全九美》第5分06秒的场景描述了:
对于“按下葫芦浮起瓢”(卢编语,非常贴切)的LaTeX浮动,现在我们可以引用《疯狂的石头》10分17秒的场景来描述:
尽管前面我说参考文献很可恶,但长期在此溜达的客官也许可以发现以上两部老片子是我常用的参考文献。
又及:晚上做了真正意义上的红烧肉,红烧肉呀么红烧肉,没得五花肉,果然是烧不成的。
又又及:关于LyX和pgfSweave的工作似乎惊动了LyX中央,今天“上面”来人了,也许LyX 2.0里面我能把pgfSweave给整进去。这是个好事。
再及:MSG包已经扔到CRAN上了,不过Windows版本的包目前还没编出来。这本书的最后一节也已经收到,但关于R介绍的一章要大幅度重写,然后才真正算是初稿完成,万里长征走完了一步。
上周调整书稿的时候被LaTeX的浮动环境整疯了。我有一百三十多幅图,忐忑地调啊调,一不小心尺寸稍调大一点,LaTeX就把一幅图给安排到单独的页面中了,而我又是偏执狂,不想规定[!hbp]之类的强制固定位置的参数,但有时候就是闹心,明明上下空白边距高度都超过半页纸了,干嘛要让一幅图占一整页的篇幅?因为书稿用Sweave写的,所以每调一幅图都要重新跑一遍R(当然,这是自动的),实在考验耐力。有时候就感觉像玩打地鼠似的,把这个按下去,那个又冒出来了。
这个,有没有办法让LaTeX大爷的规则稍微宽松一点,尽量利用空间啊?只要能排得下三四行字就不要让一幅图单独占一页。我猜Knuth大神一定很少用图,可我这是平均每隔两页就有图啊。
~~~~~~~~~~~~~~~~外一篇:有钱能使鬼建模~~~~~~~~~~~~~~~~
今天Netflix头奖得主(之一)Robert Bell来系里报告,教室人山人海,从未有过的景象。我一边听一边在想,咱们这“第一届全国大学生数据挖掘邀请赛”实际上在做类似的事情。神马?你还不知道这个数据挖掘竞赛?速速操起你的键盘,快去注册参加吧,虽说没个百万美金,这个竞赛的奖金也够你乐呵一阵子了。不过不幸的是,国外学生不能参加。我等只能打酱油了。
周老师分享文章一篇,《谈谈时间管理–陶哲轩》。跑题党眼中的两处问题:一、新浪的PageRank不可能是6,我后来特地看了一下,是8,陶的博客PR要是能赶上新浪,那新浪就得关门了,吹捧不带这么吹的;二、陶曰:正在研究宏,以便能够快速输入\begin{theorem}…\end{theorem}之类的LaTeX代码,我心想,嗨,费那事儿干嘛,LyX不是现成的吗。时间紧,话题不展开,不过陶的确是个牛人。
又及:最近心中有些不安分。这种不安分加密之后就是:余弦!余弦!余弦!
又又及:谁来给我讲讲木遥是谁?傅立叶变换写得很好,再具体一点就更好了,得拉到统计之都来。
圣诞节上传了animation v1.1-5到CRAN FTP,不过估计管理员都度假去了,要等一阵子才能放出来了。这次更新主要有两个变化:一是增加了命名空间(NAMESPACE),这玩意儿是我以前没太搞明白的东西,现在明白它的优势了(控制哪些对象是对用户可见的);二是把saveLatex()函数大幅度改写了一下,尤其是用“黑魔法”让它能自动应付Sweave,如果它探测到自己是在Sweave环境中,那么会自动根据代码段的标签和前缀生成动画文件并插入LaTeX文档,而且有选项overwrite = TRUE/FALSE控制是否重画动画(可以看作是最初级的“缓存”方法)。从此以后,在Sweave文档中动态生成动画就方便了,如此一来,也算不辜负这个包被收录在ReproducibleResearch的CRAN Task View中。至于怎么在Sweave中生成动画,若有人感兴趣,我也可以下次在统计之都主站上介绍一下,这东西应该对一些人有用。
我一直在找如何在Git中永久删除某些文件(包括它们的历史记录)的办法,这个问题也是花费我时间最多的一个Git问题,所幸最后终于在GitHub的帮助页面“Removing sensitive data”中找到了答案。尽管我并不完全明白工作原理,但好歹这个办法管用了:
## 注意Windows下用双引号 git filter-branch --index-filter 'git rm -r --cached --ignore-unmatch path/to/your/file' HEAD git push origin master --force rm -rf .git/refs/original/ git reflog expire --expire=now --all git gc --prune=now git gc --aggressive --prune=now
当时从SVN迁到Git的时候犯了个错误:把整个库都迁过来了(我应该只迁一个子目录),但实际上很多文件都是我不想放到这边来的,比如那些二进制图片文件。它们让整个库的体积增大了太多,而版本控制工具的特点就是记录你对文件的所有操作,包括删除,即使在当前版本中删除了,Git也会在历史记录中记下这些文件,以便随时可以恢复回去。对于这些几十兆的大文件我一直“耿耿于怀”,现在GitHub上的库终于轻松了,大小只有1M了。
我回忆了好半天,还是想不起当初我为什么对LyX留下了一个错误的印象:它生成的LaTeX文档的前四行是无效的。即这样的代码:
\batchmode
\makeatletter
\def\input@path{{\string"path/to/some where/\string"/}}
\makeatother
当年我并没有仔细研究第三行,但凭感觉,它是用来定义文档中的外部文件的输入路径的,比如\includegraphics{}的根路径。这个感觉并没有错,但当年阴差阳错失败了。我发现LyX的文件名弄乱机制(filename mangling)是因为当时想在Sweave中输出动画,因而需要使用animate包和\animategraphics{}命令,但是死活由于找不到输入文件而报错,我花了好几天时间,终于发现原来有这么个机制,以及LyX的编译过程(先复制到临时文件夹再编译)。于是我只好想办法把动画文件先复制到临时文件夹再编译,这当然不是个好办法。还有Sweave,我都是用R脚本把需要的文件复制到LyX的临时文件夹下再让LyX编译,比如需要读入的数据和需要引用的图片文件等。这都是为了让LyX不要抱怨找不到文件。
今天在考虑animation包中的saveLatex()如何在Sweave中使用,于是再度看了一下LaTeX的animate宏包的文档,看着看着,突然见到其中有个单词“Important”可以闪动,于是好奇它是怎么做到的,自然也就把源文档找出来看;打开源文档,无意看到这么一句:
\graphicspath{{files/}}
凭直觉,我觉得这是指定图片文件的根路径,即:文档中的图片引用都以files/为基准,在这个文件夹下去寻找。抬手Google了一下,没错,是这样。我想,这不就是我很久以来想要的东西么,只要定义了图片的输入路径,就不必发愁在LyX文档目录和临时文件目录下拷来拷去了。试了一下,对图片\includegraphics{}的确管用,但由于我用pgfSweave,图片都是用\input{}的方式,这招不管用。
恍惚间,想起了本文开头的那几行命令,琢磨着为什么它们不管用呢,难道有bug?再在LyX中输入了几行LaTeX代码试了试,\includegraphics{}和\input{}都不写绝对路径,只写相对于LyX文档的相对路径,编译,居然成功了!这简直是个灵异事件。
这下R代码中可以setwd()到文档目录了,解决了许久以来的一大麻烦——这是跟人说不清道不明的麻烦。缓存也有了(包括R对象的缓存和图片的缓存),代码高亮也有了,这下可以理直气壮说pgfSweave好用了。
早上收到某师弟来信,问我用什么软件做的幻灯片,貌似和Andrew Gelman的幻灯片很像。嚯哦,我能跟Gelman有点联系,三生有幸注1。实际上我只不过是用beamer而已。回想早些年,我同样是用PowerPoint(PPT注2),地球人都知道,PowerPoint的特点是“它既没有power也没有point”。用PPT最头疼的就是总是找不到好看的模板,Office自带的那几个傻了吧唧的模板早就看得恶心厌烦了;设计飞来飞去的动画又很耗时间;页面很难安排或展示章节逻辑(PPT中根本就没有这概念);换台机器还发现页面变形了。总之是花里胡哨、吃力不讨好。它好用么?好用,傻瓜都会用。它好看么?有专家设计的模板确实也好看。你见过多少好看的?是否总是见到那个夹着公文包的洋人,或是两个握手的洋人?
当然,好看与否纯粹是个主观判断。我不敢妄言PPT是否好看,只能说它不够精致。beamer是LaTeX注3的一个宏包,在学术界经常看见它的身影。其实我也只是近一年来开始大规模用它,原因仍然是LyX,以前只是偶尔在正式场合用用,还是嫌敲代码麻烦。关于计算机方面的技术问题,很多都不容易用写的方式讲清楚,这里我也不多说了,我理解的beamer除了美观之外,最重要的是逻辑。我的LaTeX入门得益于CTeX翻译的那份《不太简短的LaTeX介绍》,随后就是Google。用惯了Office的人学习LaTeX似乎都有个毛病,就是不关心警告和错误信息,几年前某师姐对我说,老师说了,遇到错误就拼命回车回车回车,只要最后能生成PDF就行。
挑剔有挑剔的好处,但也有坏处。挑剔最怕的就是对什么都挑剔,把任何事情都做到完美,陷于细节不能自拔。我对文档样式和拼写都比较挑剔,平日各家溜达也时不时发现一些好玩的事情。比如刚看到阮一峰网站上的袜子广告:
它有个非常隐蔽的问题,估计也只有我这样无聊的人才会看到:We too是错误的写法,按照上下文,生搬硬套应该写作We neither,再顺一顺的话我觉得最好写作Neither do we。否定句中的“也”不应该是too。我向来反对无理由的口语/书面语中英文混杂(参见微波炉不work故事),这大概是避免中英文混杂的一个例证吧。话说回来,此处追究语法问题其实也没太大意义,因为中土大唐人士看到这句话肯定会正确理解它的意思,不会因为英文写得不对而不买袜子。
———————————————————
注1:这里有个巧合。其实我刚好今天中午邀请他给我们做了报告——用Skype和电话,他在哥伦比亚,我们在Ames。Skype显示视频,电话保证声音质量,报告效果非常好,没有出现断线或听不清的情况。这事情开了一个先例,下学期可以考虑邀请更多牛人用这种方式来给我们报告了。
注2:PPT不等价于幻灯片,它只是PowerPoint的缩写。这句话我重复了无数遍了。
注3:说起LaTeX,最近突然发现Google对我的网站生成了Sitelinks,不关心搜索引擎优化的客观可能不知道这是什么意思或有什么意义;有时候用Google搜索一些关键词,搜索结果的第一条链接下会列出几条“站内链接”,这便叫做Sitelinks。例如搜索统计之都、统计学论坛等都会列出COS的一些站内链接。能让Google生成站内链接的网站,一般都是质量比较高(至少是搜索引擎优化做得比较好)的网站。有点王婆卖瓜的味道了,不过我要说的不是这件事,而是Google眼中的我——竟然链接之一是我的LaTeX标签。
不夸张地说,我看过的几乎所有人的beamer幻灯片都有一个明显的问题:图形和表格的编号缺失了。也就是它们看起来是这样:
Figure: 标题内容
或者
Table: 标题内容
在(挑剔的)我看来,这是难以容忍的缺陷。图表怎么能没有编号呢?既不好看,又不方便交叉引用。beamer自身默认图表是没有编号的,如果需要把编号调出来,只需要在导言区加上:
\setbeamertemplate{caption}[numbered]



近期评论