Typography
两个功能
使用 Python 来对 XeTeX 文档进行处理,进行自动的中文与英文字体的切换。 消除两行连续的中文之间多余的空格。
如何获取
从下面的地址下载:
http://xcp.googlecode.com/svn/trunk/xcp.py
可以到 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 即可。
几点说明
默认接受 UTF-8 格式的文档,如果你使用了其他编码,可以修改 xcp.py 第 5 行的 encoding=’utf-8′ 为你使用的编码,在 http://docs.python.org/lib/standard-encodings.html 可以找到 Python 支持的所有编码。 默认在 \begin{document} 之后才开始处理,到 \end{document} 结束处理,所以记住把 \title{} 之类放在这中间,其中的汉字才能被处理。如果你用的不是 LaTeX 而是 ConTeXt,可以相应的改成 \starttext 和 \stoptext。 需要 Python 2.4。并建议把文件格式转换为 Unix 的。 如果需要避免它处理部分代码,则可以使用 [...]
自从第一部分贴出以来,受到了很多朋友的鼓励,令我感到非常高兴: 看来尽管我拙于表达,对于 TeX 系统的构建感兴趣的朋友还是不少的。不过有一点需要说明:撰写此文的主要目的并非是“构建一个最小的 TeX 系统”,只不过正巧 web2c 系统符合我们讲解的需要而已,我所希望证明的是,TeX 的构建看似复杂,其实也不过是有许多细小的“砖石”一块块搭成,并无什么神秘的地方,尽管大家的兴趣多数是在 TeX 的基础上撰写宏包,但其实参与到 TeX 系统的开发中去也并非那么困难。
web2c 只是用 YACC 写的一套简单的分析程序,由于无法作复杂的分析,所以类似 autotools 的那套“由 A 生成 B,B 生成 C,C 再生成 D”这样化学反应链一般的恐怖过程便被设计出来。
一开始,因为没法直接从 Pascal 代码中分析出其中的变量与函数,所以不得不在一些称为 .defines 的文件中专门说明这些,比如我们如果要用 web2c 转换 etex.p,就得把 common.defines, texmf .defines 和 etexdir/etex.defines 再加上 etex.p 四个文件连接起来送给 web2c 这个程序的标准输入。
然后编写 web2c 的人发现,就算这样还是不好直接通过 web2c 生成的方式搞定所有 C 程序里需要的定义,还是另外把一些内容写在 .h 头文件里,让生成的 .c 程序 #include 它就好了。于是就有一个叫做 texmf.h [...]
这个东东首发在水木社区的 TeX 版,反响还不错,就贴来大家一同讨论吧
谈谈 TeX 系统的构建过程,不过这个其实挺没意思的,如果只是用 TeX,而不打算修改 TeX 的代码的人完全不需要了解这个,我也不会涉及什么 TeXBook 里的内容,不知道有人有兴趣不?先贴一小段,要是大家有兴趣我就继续贴。呵呵,也算是一个开发了几十年的软件如何演化的一点掌故。
偶尔,你可能会突发奇想:平时自己用的这些 tex, latex, pdftex 是怎么来的?——是怎么写出来的,又是怎么编译出来的?
愿意究根问底的话,可以先自己动手试一试,目前可以工作的最小的 TeX 系统是 web2c,我们常用的发行版中的二进制程序,都是根据 web2c 中提供的代码,基本不作修改,或者只作很小修改编译而来的,所以,你可以先从 http://www.tug.org/ftp/tex/web2c.tar.gz 下载一份 web2c 的代码,解压开来,听我一步步的讲。
众所周知,Knuth 最早是在一台 DEC PDP-11 上用一种叫做 SAIL 的语言编写的 TeX,尔后他和一些合作者,开始在 Stanford 大学实验一种叫做 literate programming (文学编程) 的新式编程方法,他们设计了一套叫做 WEB 的系统,用 Pascal 语言来编写程序,用 TeX 来编写文档,将两者交织为一张“网”。
经过几年的不断修改,WEB 系统和 TeX 系统相互的影响下逐渐成熟,到 1982 年的时候,两者都基本上稳定下来,此时的 TeX 系统,核心就是一个 tex.web 文件。OK, 看看你刚刚解压出来的 web2c [...]
其实这个东西早就该写了,只不过我既是一个懒人,也是一个看不惯不完美东西的人,所以一直不好意思去写。
For the impatient: 脚本在这里
XeTeX 是 Johnathan Kew 一开始在 Mac OS X 上开发的一套 TeX 系统的扩展,主要的特点是使用 ATSUI 支持了操作系统 native 的字体,而后使用 ICU 加入了对 complex scripts 等多语言排版的直接支持,算是 TeX 世界中很振奋人心的更新,我也一直在关注着,因为没有 Mac 用,所以不大了解详情。
直到最近 Johnathan 公布了 Linux 系统下的 XeTeX,结合 fontconfig 和 freetype、ICU 一起支持了 Linux 系统下的 native fonts 和多语言排版,并在 Jin Wan Cho (dvipdfmx 的作者之一) 的帮助下扩展了 dvipdfmx,支持 xetex 的“.xdv”输出。所以近期在我的 Arch Linux 上,好好把玩了一阵子 XeTeX (中间的经历,在 [...]
最近 FreeType 2.2.1 刚刚发布,尽管由于 API 的变化 (许多内部函数被隐藏起来了),多数的 distro 并未把系统使用的 FreeType 升级到这一版本——我相信要过很长一段时间才有可能这 么做。但使用源代码编译的版本,我做了一点小小的对比分析。
因为精力有限,只对 FreeType 2.1.10 (目前绝大多数发行版正在使用的版本) 进行了比较,试图给出基于 FreeType 的程序 (如 fontconfig) 应当如何配置字体 才能获得最好的效果的一点建议。而事实上,font rasterizer (字体光栅化工具) 必须和其他的 rasterizer 比较才能看出明显的区别来,例如 ATSUI, Win32 GDI 等等。
同时,我也只对随 Windows 附的 simsun.ttc 做了测试。如果你有兴趣,欢迎分享 更多的测试结果。
测试的截图在 flickr 上。
经过比较,我们可以给出这样一些建议:
必须打开 anti-alias,gamma 才会起作用。 gamma = 0.0 时启用 sRGB (次像素反锯齿) 模式,这种模式要比默认的 gamma = 1.0 显示得更清晰锐利一些。 绝大多数情况下,打开 hinting 能达到更好的效果。 小于 12px 的情况下,关闭 anti-alias,打开 hinting 能使字体勉强可读, 但仍然建议绝对不要使用这么小的字体。 12px 以上,即 [...]
© jjgod / blog. Powered by WordPress using the DePo Skinny Theme.