Cocoa Text System

[Cocoa Text System](http://www.hcs.harvard.edu/~jrus/site/cocoa-text.html),所有 Mac OS X 用户的必读,这篇文章对所有的 Cocoa 软件都有用,非常易读,简洁。

可以参考的还有:[Mac OS X Keybindings](http://www.lsmason.com/articles/macosxkeybindings.html), [Usable Selectors for Cocoa Key Bindings](http://www.hcs.harvard.edu/~jrus/site/selectors.html) 和 [Default Mac OS X System Key Bindings](http://www.hcs.harvard.edu/~jrus/site/system-bindings.html).

可惜还是不能解决它下层的键映射问题,比如右 enter 的作用,fn 键,等等。

xcp.py 的一个简单例子

有朋友问到 xcp.py 究竟怎么用,是我不对,说了半天连个例子都没举出来,光看两句介绍当然无法理解。我自己记性也不好,怕以后忘了,现在赶紧写下来:

\documentclass{article}

\usepackage{fontspec}

% 定义英文字体,更换为你希望使用的
\setromanfont{Minion Pro}

% 定义中文字体,可将 SimSun 更换为你希望使用的字体
\newfontinstance{\zhfont}{SimSun}
\newcommand{\zh}[1]{{\zhfont #1}}

% 设置中文断行,必备
\XeTeXlinebreaklocale “zh”
\XeTeXlinebreakskip = 0pt plus 1pt

\begin{document}

TeX 提供了一套功能强大并且十分灵活的排版语言,它多达 900
多条指令,并且 TeX 有宏功能,用户可以不断地定义自己适用的
新命令来扩展 TeX 系统的功能。许多人利用 TeX 提供的宏定义
功能对 TeX 进行了二次开发,其中比较著名的有美国数学学会推
荐的非常适合于数学家使用的 AMS-TeX 以及适合于一般文章、报
告、书籍的 LaTeX 系统。

\end{document}

将此文件存为 foo.tex,对它

python xcp.py foo.tex > foo.out.tex
xelatex foo.out.tex
mv foo.out.pdf foo.pdf

就可以得到你需要的 PDF 啦。如果你有兴趣,还可以看看 foo.out.tex 是什么样子的:

\documentclass{article}

\usepackage{fontspec}

% 定义英文字体,更换为你希望使用的
\setromanfont{Minion Pro}

% 定义中文字体,可将 SimSun 更换为你希望使用的字体
\newfontinstance{\zhfont}{SimSun}
\newcommand{\zh}[1]{{\zhfont #1}}

% 设置中文断行,必备
\XeTeXlinebreaklocale “zh”
\XeTeXlinebreakskip = 0pt plus 1pt

\begin{document}

TeX \zh{提供了一套功能强大并且十分灵活的排版语言,它多达} 900
\zh{多条指令,并且} TeX \zh{有宏功能,用户可以不断地定义自己适用的%
新命令来扩展} TeX \zh{系统的功能。许多人利用} TeX \zh{提供的宏定义%
功能对} TeX \zh{进行了二次开发,其中比较著名的有美国数学学会推%
荐的非常适合于数学家使用的} AMS-TeX \zh{以及适合于一般文章、报%
告、书籍的} LaTeX \zh{系统。}

\end{document}

可见导言区都没有修改,只是对正文区进行了预处理。

我们可以打开 PDF 看看,效果如图:

PDF produced

可见中文使用了宋体,英文使用了 Minion Pro,正是我们需要的效果。

好吧,写点什么

恩,还是得写点什么,在懒惰已经成为习惯,找借口找上瘾了的时候,看到勤奋的 midi 同学 blog 更新之快,我就不由得惭愧啊。

距离上次写 blog 又是两个月了,这两个月发生了什么事呢?

1. 推研的事情终于尘埃落定,如无意外,明年这个时候我就该在中科院研究生院上课了。未必是最好的结果,也未必是最坏的,还是非常感谢不少朋友和老师的无私帮助。感谢我的父母。
2. 买了一台 MacBook Pro,我和 lukhnos 这么说:新机器到手的时候,真有点手足无措的感觉。有种打开了一个憧憬已久的世界时,突然不知道该干什么的感觉。但也只是一阵子,这一阵子之后,我又给自己的 Mac 学习计划开了一个长长的单子——用 lighttpd 的作者 Jan 的话来说:hey … that’s why we are hackers 🙂
3. 申请了水木社区 的 TeX 版斑竹,欢迎大家多支持。
4. 下周又是一堆考试,还有恐怖的 12 分钟长跑,所以,你可以预料到… 下次更新时间不定!

XeTeX Chinese Preprocessor 0.2

#### 两个功能

1. 使用 Python 来对 XeTeX 文档进行处理,进行自动的中文与英文字体的切换。
2. 消除两行连续的中文之间多余的空格。

#### 如何获取

从下面的地址下载:

[http://xcp.googlecode.com/svn/trunk/xcp.py](http://xcp.googlecode.com/svn/trunk/xcp.py)

可以到 [http://code.google.com/p/xcp/](http://code.google.com/p/xcp/) 查看相关信息和提交 Issues。

#### 使用方法

现在这个版本应该可以处理任何包含中文的 XeTeX 文档了。使用方法很简单,在文档的导言区加上:

\usepackage{fontspec}

\setromanfont{Garamond Premier Pro} % 此处指定英文字体

\newfontinstance\zhfont{SimSun} % 此处指定中文字体
\newcommand{\zh}[1]{{\zhfont #1}}

然后调用:

python xcp.py foo.tex > bar.tex

编译得到的 bar.tex 即可。

#### 几点说明

1. 默认接受 UTF-8 格式的文档,如果你使用了其他编码,可以修改 xcp.py 第 5 行的 encoding=’utf-8′ 为你使用的编码,在 [http://docs.python.org/lib/standard-encodings.html](http://docs.python.org/lib/standard-encodings.html) 可以找到 Python 支持的所有编码。

2. 默认在 `\begin{document}` 之后才开始处理,到 `\end{document}` 结束处理,所以记住把 `\title{}` 之类放在这中间,其中的汉字才能被处理。如果你用的不是 LaTeX 而是 ConTeXt,可以相应的改成 `\starttext` 和 `\stoptext`。

3. 需要 Python 2.4。并建议把文件格式转换为 Unix 的。

4. 如果需要避免它处理部分代码,则可以使用 `@{}` 标记,这样 `{}` 中间的内容都不会被处理。比如 `@{中文}` 将被转换为 `{中文}`,而不是 `{\zh{中文}}`。