Categories
日常应用

LyX2+XeTeX/LaTeX若干中文问题

最近琢磨着用sweave写一篇中文报告,结果打开LyX 2.0之后华丽丽的发现已然不知道一份中文的文档应该怎么写了。上一次用Latex玩中文的东西怕是要追溯到本科毕业论文了。而后一年的时间,就从来没用latex编译过任何中文的文档,也难免突然不知所措了。

LyX 2.0相比1.6x变化还是蛮大的,折腾了半天我也没弄明白怎么可以调出中文来。原来的时候觉得XeTeX慢,就一直用ctex+pdflatex的解决办法。可是不知道为什么,这一次中文总是乱码,改成UTF-8也是,弄得我好痛苦。于是一边折腾texlive,一边先在LyX里面用英文写报告。往后再慢慢翻译好了。

终于,在这个中秋假期临近尾声的时候,我没理由再拖着不把中文搞定了。于是,先调回到ubuntu去,从简单的linux软柿子捏。装完texlive 2011,找着网上的若干教程一步步走下来,比如这个,却发现我总是遇到一个莫名其妙的错误问题。错误提示大致如下:

! Undefined control sequence. <argument> ExplFileName

网上哗啦啦的搜了一番,发现原因大概是l3kernel, l3package和fontspec这个包之间的兼容问题。然后照着网上的步骤删除掉expl3这个文件夹,华丽丽的错误又出现了:

! LaTeX Error: File `expl3.sty' not found.

只有各种崩溃啊。最后忍无可忍,一个 rm -dR * 命令删掉了texlive文件夹下所有的文件。重新开始!

这一次学乖了,不用基于internet的网络安装texlive,改成ISO镜像安装(我下的是20110705版的),怎么也是打包好的镜像,不会出什么问题吧?吸取教训坚决不去tlmgr update -all了,就这个版本能用就行。话说,在ubuntu下配置环境变量$PATH的方法有许多,我最后发现还是直接改/etc/environment这个文件来的比较快,比改/home/username/.bashrck(看不到这些文件的话请在窗口上面选View -> Show Hidden Files)方便很多。不过ubuntu真的感觉还是离开了terminal寸步难行啊,总得sudo -i一下才能过得比较舒服。

然后打开LyX,什么乱码之类的浮云都不见了,顺利的编译中文文档。我是在language那里直接选择不用任何语言包,很清爽啊。导言区加了几行字来适应中文。看了一下对应的latex源代码,也蛮简单的,

documentclass{article}
makeatletter
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% User specified LaTeX commands.
usepackage {fontspec}
setmainfont {WenQuanYi Micro Hei}
XeTeXlinebreaklocale “zh”%中文断行
XeTeXlinebreakskip = 0pt plus 1pt minus 0.1pt%左右弹性间距
makeatother
usepackage{xunicode}
begin{document}

只是记得要在文档选项那里把output选成xetex就好了。然后华丽丽的文驿泉中文文档出现……好吧,我去研究一下怎么用宋体。

至此,LyX 2 配合Xetex的中文问题就顺利的搞定了,感觉在linux下编译xetex还是蛮快的。先这么凑合着用吧,接下来研究sweave的中文支持问题去。

Categories
日常应用

更改LyX的快捷工具栏(加入“导出”按钮)

最近被LyX弄得有点烦,2.0确实好用,有实时拼写检查、拼写提示等等方便的功能,但是始终没搞明白那个“更新PDF (update PDF)”为啥只更新临时文件夹里面的,一点都不实用(我不用adobe reader,foxit里面好像不支持直接更新)。我要的功能在“文件->导出->pdf(pdflatex)”那儿(对应英文版“File->export->pdf(pdflatex)”)。菜单栏折磨了半天,干脆把快捷工具栏的update按钮改成导出算了!想起来当年折腾中文版xetex的时候改过菜单栏和工具栏,找回去,果然:lyx成功升级到v1.6.2中文版[lyx+xetex配置图文指引]

改LyX的工具栏还是比较方便的,打开lyx安装目录下的stdtoolbars.inc, 我的位于默认的“C:Program FilesLyX20Resourcesui”文件夹下,然后找到这行:

Toolbar "view/update" "View/Update"
Item "View" "buffer-view"
Item "Update" "buffer-update"

把红字部分改为 "buffer-export pdflatex",或者在其后面加上这一行:

Item "Export" "buffer-export pdflatex"

效果图如下:

我是觉得“更新”没啥必要,干脆就把那一行注释掉了。新的代码为:

Toolbar "view/update" "View/Update"
Item "View" "buffer-view"
Item "Export" "buffer-export pdflatex"

这下世界可清净多了。喜欢快捷键操作的童鞋们,可以在“工具-选项-编辑-快捷键”(Tools->Preferences->Editing->shorcuts)里面定义一个新的快捷键。位置大概在function列表的document and window下,找到buffer-update,先把它remove掉,然后找到buffer-export-custom,点击modify,然后改成buffer-export pdflatex,快捷键设置为ctrl+shift+R(我是把原来的更新快捷键替换掉了,各位酌情而视)。这样,无论是工具栏还是快捷键就都有的用了!

希望多少能帮大家省一些时间~嗯。以此类推,如果需要别的功能大概也都可以通过增加工具栏和快捷键节省时间!

补一句:刚发现LyX 2.0正式发布了!终于不再是RC了!大家可以欢欣鼓舞的去用新版了!(其实RC在我机子上也挺稳定的说~)呃,刚改过那个stdtoolbars.inc不妨考虑备份一下,不知道新版安装后会不会自动覆盖掉!

Categories
日常应用

在LyX里面使用分章节的子文档

不知道各位用latex有没有分章节写书的习惯……一本书若是近10个章节(chapter)甚至更多到后面可是会让人蛮抓狂的。所以就有了主控文档(main document)和子文档(child documents),所以就造福了吾等懒人……

latex里面标准的命令有两个:include和input(怎么看怎么像php里面的include和require),两者的差别简而言之就是include =newpage input。

然而在这个懒人泛滥的时代,我们已然不用latex的文本编辑器们,转投了可视化编辑器LyX。这东西所见即所得的好处多得很,就不赘述了。但是今天我遇到的问题是,如何把一本书各章节分开写?最后再整合到一块儿去?

分开写的好处很多,比如打开文件之后不用先点鼠标翻到想写的那一行,不用为了调试某一处而忍受漫长的整个文档编译过程(尤其是动辄上M的中文文档),不用一下子把所有章节都放出来(在后面的没完工的时候)等等。
好在我们有LyX如此神器……插入子文档也变得格外简单,“插入> 文件 >子文档”即可。这个时候需要选择插入子文档的路径和模式。所以我们需要提前建立好N个LyX文档,分别命名为chapter1, 2, ....即可。然后按按鼠标把它们按顺序插入。这里其实还有个好处,比如我想把第三章模型A提前,放到第二章模型B之前,那么我们只需要在LyX里面改改include的顺序,所有的编码就调过来了……这比整本书一个文档需要剪切/粘帖一大块方便许多吧?所以其实我们子文档的命名也可以按照内容来,最后只是排序的事儿嘛!

Snap4

LyX第一神奇的地方就在于,不仅仅支持子文档,而且在打开主文档并在左侧显示目录的时候(“文档 > 目录”),子文档的目录也是即时更新的,可以直接通过鼠标点击在各个子文当之间跳转。
当然,它最最神奇地方就是子文档是可以单独编译的,这可比传统的Latex方便多了。这样,若是只改了某一小部分,想看效果就不必要编译整个文件了。再者,子文档也是单独有导言区的,这就意味着我们可以给子文档用不同于主控文档的样式(比如字体啊,页面大小啊)去编译。

最后的最后,LyZ此等神器也是支持子文档的……只是你需要稍稍辛苦点在每个子文档后面都加上参考文献数据库。

目前已知的问题就是超级链接及交叉引用……诸位可以暂时参考此帖(用LaTeX写过书的朋友帮帮忙 ),等我完善了之后再补充上。

Categories
日常应用

打破语言坚冰,LyZ引用中文文献!

不久以前介绍过LyZ这个神奇的firefox插件,成功的沟通了Zotero和LyX,让工作效率又翻番了。可是最近在处理中文的时候发现它并不是那么完美,中文文献的引用还是存在问题的。所以我就跑到原作者Petr博客上去厚颜无耻的留言,问他能不能升级一下眷顾我们这些非拉丁语系的贫苦大众们。Petr很快的给我直接回了邮件,在我发过去一个测试的中文文件(UTF-8编码)之后仅仅两天,他就升级了LyZ。现在新版已经可以从Firefox插件网上下载了

在这个新版本中,主要加入的就是对UTF-8编码的支持,即可以通过Firefox的about:config里面改变extensions.lyz.use_utf8的值,从false到true,然后LyZ就不会过滤掉UTF-8编码的非拉丁语系的文字了。

有了对于UTF-8的支持,那么接下来对于中文的支持就水到渠成了。这个时候在Zotero里面可以直接引用中文文献,会按照作者姓氏第一个字符的编码引用到LyX里面。然后我们就可以在LyX里面顺顺利利的按照通常的方式改一下格式,比如改成“作者 年份”。

这个时候除了感动到无以复加,我还能说什么呢?万事俱备,只欠把Sweave和LyX配合好,就可以舒舒服服的开始敲键盘了。

Categories
日常应用

LyZ的官方说明档翻译版

在上一篇博文 [cref %e6%96%b0%e5%b9%b4%e7%9a%84%e6%83%8a%e5%96%9c%e2%80%94%e2%80%94lyz%ef%bc%81]里面介绍了LyZ之后,索性一同连官方的说明档也翻译一下,供大家节省时间之用。

LyZ: 一个整合LyX的Zotero插件

LyZ是一个Zotero的插件,用来更好的整合LyX和Zotero。

特性

  • 在LyX里面插入Zotero的文献引用
  • 当有新的引用增加的时候BibTex会自动更新
  • 当文献信息更改的时候BibTex会自动更新
  • 定义的BibTex关键字格式
  • 独特的BibTex关键字检查
  • 在LyX、BibTex数据库和LyZ之间同步
  • 编辑主文档和子文档(使用同一个BibTex数据库)和多个文件(每个文件使用不同的BibTex数据库)
  • LyX和BibTex数据库之间的永久合作
  • 支持小组协作

安装和配置

请在Firefox Addons汇报您的体验

1. 从Firefox Addons安装LyZ并重启Firefox。
2. 打开LyX并设定LyX服务器路径(在LyX里面,工具>配置>路径,将LyX管道目录设置为:Windows下可以使用默认路径“\.pipelyxpipe”,Linux and Mac 用户可以使用“~/.lyxpipe”,并在LyZ里面改为一样的配置)。
3. 重启LyX并打开一个文档。

添加并且插入引用

1. 打开Zotero,选中一篇或多篇文献,并点击LyZ菜单中的引用,或者也可以直接按右键在弹出菜单上选择“在LyX中引用”。
2. 当你试图在一个新文档(第一次告诉LyZ的文档)中插入文献的时候,你必须选择一个BibTex数据库。你可以创造一个新的数据库或者选择以前创建的数据库。然后键入数据库的名字(.bib的后缀会自动生成)并且按“确定”。然后这个引用就被加入你刚刚建立的BibTex数据库了,并且已经插入到LyX文档中了。这个时候打开LyX看看,该引用是不是已经出现了?
3. 插入数据库到LyX文档(译者注:可以参见我的这篇文章:[cref %e5%8f%82%e8%80%83%e6%96%87%e7%8c%ae%e8%87%aa%e5%8a%a8%e6%90%9c%e9%9b%86%e5%85%a8%e6%94%bb%e7%95%a5%ef%bc%88%e5%9b%be%e6%96%87%e7%89%88%ef%bc%89%ef%bc%9alatexlyxzotero])
4. 加入更多的引用或者新的引用的时候,可以直接通过LyX界面或者依旧通过Zotero(重复第一步)
5. 如果你在Zotero里面更改了文献的信息,可以在LyZ那里单击“更新BibTex”,从而刷新你的BibTex数据库。

自定义BibTex 关键字格式

1. 自定义的BibTex关键字:在LyZ>配置弹出的对话框里
2. 默认的格式是“作者 年代 标题(author year title)”。如果你使用natbib这个包那么最好设置为“zotero”,它将生成“非人类可阅读”的非主流型BibTex关键字。
3. 关键字格式可以使用下面这些 “author”, “year”, “title”, “zotero” 以及分隔符例如“_” 。下面这些也可以使用,不过请小心:a-z, 0-9!$&*+-.:;<>?[]^`|
例子:“author year title” 将生成形如“作者 年代 标题”,即“ tichy1988thefoundations”。如果你更喜欢Zotero导出BibTex的默认格式,(tichy_thefoundations_1988),请在这里设置为“author _ title _ year”。这些关键字和分隔符之间请用空格隔开。

更新BibTex

菜单中有“更新BibTex”这个命令,可以用来更新使用中的LyX文档的BibTex数据库。Zotero中的任何变化将被反映在更新中,包括BibTex关键字——如果你更改了关键字的格式。
当一个单独的BibTex数据库被多个作者共享的时候——例如使用版本控制系统(SVN、CVS等),LyZ的数据库将依据本地的BibTex数据库更新。

LyX/BibTex/LyZ之间的同步

当Zotero中的文献信息被更改的时候,BibTex数据库和LyX文档都可以被更新。这项功能在较好的BibTex关键字被使用的时候(如‘author year title’)可以发挥作用。例如当标题或者第一作者的姓被更改的时候,BibTex关键字也将随之更改。当“更新BibTex”的时候,你必须选择是否更新LyX文档中的引用信息(因为影响到了BibTex关键词)。在更新之前,使用中的LyX文档会自动生成一个备份(*.lyz),LyZ将会保存、关闭并重新打开你的文档。

注意事项

1. 致谢:LyZ的灵感有由Lytero激发,我开始只是加以改良,后来干脆从头开始,所以有了这个新的名字。
2. 请一直在Zotero中更新你的文献信息。如果你手动更改了BibTex数据库或者使用其他软件该管理,当使用“更新BibTex”的时候LyZ将覆盖你的所有更改。
3. 请让你的Zotero中的各个文献保持唯一性。LyZ并不会识别重复的项目,他们将会被认为是不同的项目并且各自生成一个BibTex关键词。
4. 当使用主/子文档的时候,你需要对每个子文档设置BibTex数据库。可能这个和主文档的数据库是一样的,但是很不幸LyZ并没有识别各个文档之间联系的魔力。
5. 你可以从LyZ的菜单中删除以前的项目。当BibTex数据库记录被删除了,所有的相关的LyX文档的记录也被一并删除。当LyX文档被删除了,相关的BibTex数据库将保留并可以被其他文档使用。
6. 如果BibTex数据库需要包括一些外文,请把LyX文档编码设置为“Unicode (utf8)”。
7. LyZ把所有的文档和BibTex数据库信息储存在Zotero安装目录下的lyz.sqlite 文件。如果你使用一些同步软件备份Zotero,你需要一同备份这个文件。

原文见:http://www.klubko.net/?page_id=945&amp;cpage=1&lang=cs-cz