作者ChenMeng0518 (Ch'enMeng)
标题Re: [问题] 请问一下有没有tex哪一版支援日文编排呢??
时间Wed Jan 1 11:19:26 2014
※ 引述《laicc0225 (laicc)》之铭言:
: 各位tex玩家好....我想问一下怎样可以排版日文呢??
: 我想以tex的功能应该可以吧...最好是同时能排版日文及中文和英文这三种...
: 需不需要额外抓其他套件呢??
: 我目前在chitex测试是无法显示出来...但是不会发生error...
: 另外winedt(不确定正确名称)我这一两天在适应中...不确定有没有...
: 所以请版上的人帮忙回答一下我的问题...谢谢....
哎﹐我挖一下坟啊﹐这个问题原 po 和底下的推文都没有解决﹐我就稍微详细地说一下
好了。
TeX 本身只有 8 位(最早是 7 位﹐後来扩展到 8 位)﹐所以原生的 TeX (通常称为
Knuth TeX)是不能直接支持除掉英文之外的字符的。所以﹐如果想要在 TeX 文档中输
出非英文字符﹐就必须做两件事情﹕
1. 选择合适的编码(比如中国大陆地区的 GBK, 中国台湾地区的 Big5)让 TeX 能读懂
2. 选择包含有所需字符的字体
对於非东亚文字﹐这其实也算不上复杂。毕竟拼音文字也就那麽一些字母﹐多少不会超过
2**8=256 个字符。所以对於非东亚文字来说﹐这个工作基本上由 inputenc 等几个套件
就能解决了。
但是东亚文字太多﹐比如汉语常用字就有三千多﹐远远超出了 2**8 的范畴﹐更别说还有
不少不常用的字了。
因此我们陷入了困境﹐而走出困境唯有两个办法﹕
1. 让 TeX 能读懂更多的字符
2. 把字体文件分为若干区块﹐每个区块只有 256 个字符﹐再让 TeX 懂的如何寻找区块
和区块中间的字符
Knuth 老爹当时的建议是采用第二个方法(毕竟它不希望自己的 TeX 做改动)﹐当时中
文 TeX 社区使用的也就是这个方法。比如 CCT (中科院张林波)﹐又比如天元(华东
师范大学陈志杰)﹐以及各位可能很熟悉的 CJK (德国人)。
这种解决方案我们用了很多年﹐各位想必对他们也有无数的怨念。弊端是很明显的﹕
* 可能需要在编译之前进行预处理
* 一旦编译出错﹐出错信息变得完全不可读
* 字体分区安装极为复杂
以上是中文的情况﹐实际上日语韩语泰国语的情况也大致相仿。
CCT 和天元我不熟悉﹐但是 CJK 还有一个并不显而易见的弊端﹕
CJK 并没有将编码和语言区分开来(比如使用 GBK 就是中文简体﹐使用 Big5 就是中文
正体)﹐这样一来﹐一旦指定编码﹐语言也就指定了。於是﹐如果有人像原 Po 那样希望
同时排版中文和日文﹐CJK 就只能干瞪眼了。
Knuth 老爹也不是万能的﹐这些弊端他并没有完全预见到──毕竟他不适用这些文字。索
性﹐终於有 TeX 引擎尝试走第一条路﹐他们是 XeTeX 和 LuaTeX. 这两个引擎都直接支
持 Unicode 编码﹐并能够直接使用系统中的字体文件。於是之前说的那些弊端都消失。
-----------------------
我们回到中日文混排上来
-----------------------
前面说了﹐要让 TeX 排除东亚文字﹐一是要让 TeX 能认识相应编码﹐二是要选择合适的
字体。编码问题引擎已经帮我们解决﹐一个 Unicode 编码能覆盖所有东亚文字。剩下的
就是解决字体问题。
前文说过﹐XeTeX 和 LuaTeX 都能直接调用系统字体。於是就有人开发了相关套件
* xeCJK for XeTeX
* LuaTeX-ja for LuaTeX
我们能使用这些套件方便地切换字体。於是剩下的工作就是为他们挑选合适的字体了。
简体中文 Windows 系统下安装的中易宋体(SimSun.ttf)内就包含有日文字符﹐因此我
们选用这个字体即可(正体中文系统我没有使用过﹐所以很抱歉我不能给出一个直接的
例子)。
这是 XeTeX + LaTeX + xeCJK 的一个例子﹕
\documentclass{minimal}
\usepackage{xeCJK}
\setCJKmainfont{SimSun}
\begin{document}
这里是中文。
□□□日本□
\end{document}
【抱歉﹐日语假名貌似显示不出来】
然而﹐xeCJK 是中国大陆的孙文昌教授开发的(现在的维护者是刘海洋和李清)﹐他们对
日语并不太了解。所以有关日语的禁则、标点压缩等工作﹐xeCJK 做得并不太好。所以﹐
如果要排版日语﹐我更推荐日本 TeX 社区的 LuaTeX-ja. 不过因为这个套件是基於
LuaTeX 的﹐而 LuaTeX 在 Windows 系统下运行非常缓慢(字体太多的缘故)﹐所以请慎
重使用。
\documentclass{minimal}
\usepackage{luatexja-fontspec}
\setmainjfont{SimSun}
\begin{document}
这里是中文。
□□□日本□
\end{document}
以上两份代码保存为 UTF-8 编码之後﹐分别使用 XeLaTeX 和 LuaLaTeX 编译即可得到
结果。
----------------------
再来一个题外话
----------------------
中国和日本﹐很多古籍都是使用竖排进行书写的。TeX 对此的支持并不好。解决这个问题
的方法同样有两个
1. 选择一个直接支持竖排的引擎(比如日本的 e-upTeX)
2. 构造一个合适的套件
我在 XeTeX + LaTeX + xeCJK 的支持下﹐有过竖排的一些经验﹐并且实现了所谓割注。
然而﹐这一技术还不成熟﹐所以如果有感兴趣的同好﹐我们另开帖子交流吧。
: )
--
来自萌气四溢的 M 君~
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 183.217.24.14