Monday, July 27, 2009

CTeXKit: 尽情享受中文排版

这是一个始于2003年的古老项目, 那时的人们只是在零零散散地为LaTeX中文排版做着贡献. 2009年5月, CTeX正式在Google Code上建立ctex-kit项目, 标志着整合中文排版的开始.

作为汉语使用者, 一定会为在TeX/LaTeX中排版中文伤透脑筋, 幸好还有很多默默奉献的人们, 他们的努力为我们解决了这些苦恼. CJK, CCT, xeCJK, 这些熟悉的名字, 到现在我还能记得当初用上xeCJK时的喜悦与兴奋. 当我又发现了CTeXKit时, 我知道, 中文排版的荣耀来临了. CTeXKit带给我的是从未有过的舒适, 一切都是这样自然、平滑, 我豁然发现, 原来中文排版是如此值得享受的一件事情.

以下是CTeXKit的简介:
CTeXKit提供了一个统一的中文LaTeX文档框架, 底层支持CCT、CJK和xeCJK三种中文LaTeX系统. CTeXKit提供了编写中文LaTeX文档常用的一些宏定义和命令.
说简单一点, CTeXKit整合了现在几乎所有的中文排版宏包, 使得中文排版不再是一件费力的事情.

安装CTeXKit的步骤很简单, 先从Google Code上下载:
$ cd ~/texmf/tex/latex/
$ svn checkout http://ctex-kit.googlecode.com/svn/trunk/ ctex-kit-read-only
$ sudo mktexlsr
然后看你是用的CCT, CJK, 还是xeCJK, 这里只讲下我使用的xeCJK. 刚才svn下来的CTeXKit包含了最新版的xeCJK, 但需要XeTeX 0.9995.0以后版本才能使用. 我安装的TeX Live 2008里的XeTeX的版本为0.999.6 (很奇怪的版本号, 不知道该怎么和前面的比较...), 编译会报错, 应该是版本太低了, 可以到这里下载xeCJK 2.2.15, 这个版本是支持小于0.9995.0的最后一版xeCJK. 再把刚才svn里的xeCJK删了就行了, 所有步骤如下:
$ cd ~/texmf/tex/latex/
$ unzip ~/xecjk-2_2_15.zip
$ cd ctex-kit-read-only
$ svn rm xecjk
$ sudo mktexlsr

该如何使用呢? CTeXKit提供了三种额外的document class: ctexart, ctexbook, ctexrep, 你既可以直接使用这三种, 也可以调用相应的宏包:
\documentclass{ctexart}  % 推荐使用这种

或者

\documentclass{article}
\usepackage{ctex}
然后是字体设置, 默认的配置在ctex/cfg/ctexopts.cfg.template文件中, 共有4种字体选项: nofonts, cjkfonts, winfonts, adobefonts. 注意你的系统中一定要有相应的字体文件, 比如说使用adobefonts就必须有Adobe的四套中文字体: Adobe Song Std, Adobe Heiti Std, Adobe Kaiti Std, Adobe Fangsong Std. 以上都搞定以后, 就可以编译了. 同时CTeXKit还提供了很多选项可以设置, 详细内容请参考ctex/doc/ctex.pdf文件.

这里有一份我的TeX文件模板, 可以作为参考. 顺便预告下, 近期将会推出LaTeX Tips专题.

Saturday, July 25, 2009

通过Minicom接收文件的临时解决方法

前段时间我写了一篇[Minicom传送文件问题], 解决了通过minicom把文件传送到ARM板的问题. 前天SHE同学需要一些数据, 因此我要把ARM板上的文件传到我的电脑上. 本来以为在有了以前的设置之后, 接收文件 (receive file) 应该是顺理成章的事, 结果我把zmodem, ymodem, xmodem, kermit, ascii全部试完都不行. 真是恼火, 在网上搜了很久也没有发现什么好的方法可以解决. 暂时用的这个邮件列表里的方法:
$ cat < /dev/ttyUSB0 > data
不过这只对于纯文本有效, 要是想传二进制的就不行了. 不过也有人提出了使用uuencode将二进制文件先转化为纯文本文件的方法:
$ uuencode binary_file /dev/stdout > uu_file
$ uudecode -o binary_file uu_file
这样就能用刚才的方法传送二进制文件了. 不过还是没有直接通过minicom传送方便快捷, 希望以后能找到好的解决方法.

注: Ubuntu使用uuencodeuudecode需要安装sharutils软件包.

2009.9.1 更新:
如果板子上有网线接口的话可以选择通过FTP的方式传输, 这种方法既满足了传, 也满足了接, 还是很不错的. 不过我一般比较懒, 不想把我的网线拔来拔去的, 不到万不得已是不会用这招的, 呵呵~ 还有, U盘、SD卡也行, 只要板子满足条件.

Thursday, July 23, 2009

调教Firefox 3.5

昨天换上了Firefox 3.5 (以下简称FF 3.5), 是因为昨天才发现比较好的过渡方法, 是不是有点out了...
$ sudo apt-get install firefox-3.5

当我怀着兴奋与喜悦的心情打开FF 3.5时, 我不禁发现这页面是不是有点走样了. 如下图:
New Tab Button
那个打开新标签的图标很碍眼地挡在了第一个和第二个标签之间, 而且由于Vimperator的缘故, 当打开新标签的时候, 那个加号图标不会像正常的那样一直跟着走, 不过对于Vimperator来说这个图标也用不上. 于是我想把它隐藏了, 还原成以前的样子. 在这篇帖子的帮助下解决.

首先进入你的Firefox的Profile folder, 比如我的是: ~/.mozilla/firefox-3.5/5p41abxo.default, 然后修改chrome子目录下的userChrome.css文件, 没有则新建. 添加以下内容:
.tabs-newtab-button
{
  display: none;
}
重启浏览器即可.

接下来出现问题的是"我最喜爱的Firefox扩展"之一的TwitterFox, 很可恶的, FF 3.5的隐私模式 (后面还会再次谈到它) 的快捷键和TwitterFox默认的弹出窗口快捷键是一样的. 不过更可恶的是当我想要改变TwitterFox的默认快捷键时, 它却一直弹出这样一句话: New keyboard shortcut affects only new windows. 没怎么搞懂这句话是什么意思, 反正就是改不了. 在Twitter上发了问题, 不过没人回我. 但我还不想就这样罢休, 终于让我找到了方法. 打开"about:config", 搜索"twitternotifier.togglePopup", 将Value改为"P,,control alt"就行了, 你可以根据你自己的情况修改一下, 我这里把快捷键改为了Ctrl+Alt+P.

最后来说说FF 3.5新增的隐私模式 (Private Browsing). 在我看来, 这是一个完全鸡肋的功能. 虽然我很喜欢隐私模式的浏览方式, 但是FF 3.5设定的这种方式简直太"别出心裁"了, 每次从隐私模式退回来的时候原来的所有标签都要重新加载一次, 这个不仅浪费了时间, 还可能因此丢失掉以前页面上的一些东西, 所以说是完完全全的鸡肋. 相比之下, 我就更喜欢Chrome/Chromium的隐私模式 (incognito), 而且那个图标也挺酷的. 这里有一篇详细比较FF 3.5和Chrome 3的隐私模式的文章.

继续试用FF 3.5中, 昨天TX因为FF 3.5频繁假死已经快抓狂了...

Saturday, July 18, 2009

怎样搭建ARM交叉编译环境?

2009.9.12 更新:
请转到[关于搭建ARM工具链 (ARM Toolchain)]查看.

今天师兄叫我再传一份当初我搭好的交叉编译环境时, 才发现以前都没记下来, 害的今天又去网上找了好久才找到原来的方法. 这里简记之.

我搭的这个ARM交叉编译环境很简单, 可以支持C和C++的编译. 先在这里下载以arm-linux-gcc开头的压缩包, 然后解压放到对应的目录就行了.

然后你可以选择修改PATH变量的方式把bin目录添加进去, 或者像我一样在现有的PATH里面放上符号链接. 这样就算搭建完毕了.

Minicom传送文件问题

好了, 有了上一篇文章的方法, 现在可以好好来调试程序了. 该怎么把PC上的文件放到板上去呢? 方法倒是很多啦, 由于板上自带了USB和SD卡接口, 所以可以通过U盘和SD卡拷过去. 板上还有一个网线接口, 通过网络也行, 挂载PC的NFS. 但是... 最简单的方法当然是通过minicom直接传送啦! (我以前怎么没想到...)

可我在选定好文件, 确定传送之后, 画面就一直卡在那了, 看来是不能传送. 这次又是LinuxSir.Org帮助了我, 请看: minicom无法上传文件,需要做什么设置吗?, 荣耀属于话语精简的3楼:
$ sudo apt-get install lrzsz
原来是缺少了一个软件, 这下好了, 障碍基本上扫清了, enjoy coding!

USB转串口线在Linux下的使用问题

由于这台台式电脑上神奇般的没有串口接口, 导致我调试ARM板那是相当得麻烦, 昨天从师兄那借了跟USB转串口的线, 就方便多了, 哇哈哈~ 不过这线很贵的说...

师兄跟我说在Win下需要先安装驱动, 我就在想了, 就这么一根线居然还要驱动... 于是有点担心没有Linux下的, 到官网上去看了看, 还挺不错的, Win、Linux、Mac都提供有. 下了几个试试 (因为不知道这根线的具体型号), 结果都出现了严重的编译错误, 在试着修正了一番后, 还是没有安上, 囧.

抱着试一试的心态去Google了下, 发现还真的有. 来自LinuxSir.Org的帖子: 在linux下如何驱动usb转串口线?, 6楼的回复道出了真谛啊~ Linux根本就不需要再额外安装驱动了! 当你把USB线插上时, 请输入以下命令:
$ dmesg | grep 'usb'
...
[14364.501032] usb 6-2: new full speed USB device using ohci_hcd and address 3
[14364.672886] usb 6-2: configuration #1 chosen from 1 choice
[14364.673609] usb 6-2: Detected FT232BM
[14364.673667] usb 6-2: FTDI USB Serial Device converter now attached to ttyUSB0
看到最后一句没? 现在就找到了设备名了, 然后再设置一下minicom就行了.

从这个故事我们了解到, 有时候看看内核的输出还是很有好处的, :)

Thursday, July 16, 2009

飞檐走壁

中国的网民真幸福, 能在不知不觉中练就各种"神功", 渐渐得我们拥有了高强的武艺.

这真是一个复杂的国度, 昨晚跟小淫魔讨论了很久逃脱这里的方法, 今天看到Picobird的Ubuntu 中 UltraVPN 以及 AlonWeb的配置和笑来的域名被114劫持的解决方案之一, 还有很萌的绿坝娘T-shirt. 哪里才是自由的归宿? 这里混沌一片, 想起TX以前的邪恶轴心, 挺搞的~

现在的我已经学会好几套"神功"了, 代理、VPN、修改hosts, 反正换着用, 期待逃离的那一天...

Tuesday, July 14, 2009

Chromium极速安装指南

$ sudo apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 4E5E17B5
$ cat /etc/apt/source.list.d/chromium.list
# Chromium Daily Builds
deb http://ppa.launchpad.net/chromium-daily/ppa/ubuntu jaunty main
deb-src http://ppa.launchpad.net/chromium-daily/ppa/ubuntu jaunty main
$ sudo apt-get update
$ sudo apt-get install chromium-browser

设置GNOME Terminal启动的大小

我有个习惯, 开机第一个启动的程序就是Terminal, 而默认的窗口太小, 于是我还要加上另一个重复性的操作: 调整窗口的大小. 一直在想要是能自动调整大小就爽了, 那天去找了下, 在这篇文章中找到了方法.

点击菜单System -> Preferences -> Preferred Applications, 将System选项卡下的Terminal Emulator改为Custom, 然后在Command处填写:
gnome-terminal --geometry=132x43

当然, 这只是针对用快捷键来打开Terminal的, 你要是用鼠标点的话, 直接加上后面的参数就行了.

javascript:void(0);

如果你想在网页上放一个链接, 但又不想点击的时候让浏览器跳转, 大部分人的做法都是:
<a href="javascript:void(0);" onclick="someFoo();">Click!</a>

我也是. 不过那天在网上搜的时候无意发现了这篇文章: a href=”javascript:void(0);” — avoid the void, 文章作者说他以前一直都是用上面的方法来实现, 不过有一天他发现在IE中会导致错误, 于是他本着生命在于折腾的原则, 花费了半天大好青春来寻求解决方法, 最后在微软的网站上找到了一条建议: 请避免使用这种方法! 正确的做法是:
<a href="#" onclick="someFoo(); return false;">Click!</a>
关键就在于那个"return false;"所起的作用.

有没有人遇到过相同的情况?

为Blog增加了"划词搜索"

在安装SmarterFox这个扩展时发现官方网站上还提供了一个有用的Widget: FinderFox, 可以实现鼠标选定一些词之后在Google、Wikipedia、Twitter等中搜索, 或者Tweet选定的部分, 如下图:
FinderFox

于是把这个功能加到了我的Blogger上, 在模板里添加以下JS代码:
<script type="text/javascript">
var finderfoxConfig = {
version: "1.0.0",
key: "ed1abb67243a4ca30000012276fecd47"
};
document.write(unescape('%3Cscript type="text/javascript" src="'+
('https:'==document.location.protocol?'https://ssl.':'http://')+
'finderfox.smarterfox.com/finderfox.js"%3E%3C/script%3E'));
</script>
此外, 还可以到网站上自己去定制一些搜索引擎.