CJK 系统有一个 CJKvert 宏包,是专门设计用来排版直排文字的。
CJKvert 宏包的原理是利用 graphicx 宏包的盒子旋转功能,把所有的汉字逆时针旋转 90°,这样打印出来的文档就是直排的了。命令 \CJKvert(默认)和 \CJKhorz 用来切换直排和横排两种模式。如果需要把少量直排文字插入横排文字,则可以把直排的内容放进一个盒子,再顺时针旋转 90°。
为了适应直排习惯,纸张大小、页码形式都需要进一步调整。预览直排的 PDF 文档一般需要旋转 90 度。
一个利用 CJKvert 直排的简单例子如下:- %# -*- coding: gbk -*-
- % cjk-gbsn.tex
- % 需要:cjk、cjk-fonts
- \documentclass[11pt,a5paper]{article}
- \usepackage[pdftex,landscape]{geometry}
- \usepackage{fancyhdr}
- \usepackage{CJK,CJKnumb,CJKvert}
- \pagestyle{fancy}
- \cfoot{\begin{CJK}{GB}{gbsn}\CJKdigits{\value{page}}\end{CJK}}
- \renewcommand{\headrulewidth}{0pt}
- \renewcommand{\footrulewidth}{0pt}
- \begin{document}
- \begin{CJK}{GB}{gbsn}
- 屈原《离骚》:『朝发轫于苍梧兮,夕余至乎县圃。』
- 中英文混排 Chinese mix with English. 中英文 $\sin x^2$ 混排
- \end{CJK}
- \end{document}
复制代码
可以看到,使用 CJK-fonts 中的 gbsn,CJKvert 可以排出良好的直排文字。
不过,如果把上面的 gbsn 换成通常安装的 SimSun 字体,情况就变得惨不忍睹:标点错误、字距不准、中英文基线不齐。事实上,正如 CJK 文档 vertical.txt 中所说,利用 CJKvert 包得到的直排内容,在标点设置、盒子大小和基线位置都会有问题。

造成这两个字体的不同表现的原因,并非是字体的优劣不同,而是因为 CJK 宏包专门为 gbsn 字体做了直行排版的配置。直行排版的字体配置文件(.fdx 文件)是字体定义文件(.fd 文件)的一种扩充,它定义了 \CJKvdef、\CJKvlet 等命令对字符进行精调,其描述可见 CJK 的文档 fdxfiles.txt。
例如,为了解决盒子大小不准和基线不齐的问题,在 c10gbsn.fdx 文件中就有命令- \CJKvdef{fullheight}{1em}
- \CJKvdef{height}{.88em}
- \CJKvdef{offset}{.5em}
- \CJKvdef{simpleoffset}{-.1em}
复制代码 进行设置。而中文逗号、句号的位置,以及不应旋转的括号、引号的设置,也在 c10gbsn.fdx 文件中逐一设置。
由于通常安装 CJK 的 SimSun 字体时,只编写了字体定义文件 gbksong.fd,而并没有编写相应的直行设置文件 gbksong.fdx,所以直行排版的质量不佳。
但是,编写 .fdx 文件必须对字体的特性有所了解,偏移的数值要进行细微的调整,尤其要对每个标点用内码设置,十分困难。即使对标点本身居中的字体(如 MingLiU),也有括号引号的问题。因而有必要寻找其他的解决方法。
[ 本帖最后由 milksea 于 2008-9-1 13:44 编辑 ] |