临时记录一下XeTeX的中文解决方案。一些包的文档只是走马观花得到的解决方法,所以可能有诸多纰漏。
另个人还是比较看好LuaTeX,但是在里边鼓捣中文还是一团糟,等探索一下再回来补充。
我使用的包是xeCJK, 推荐的调用方法是
\usepackage[LocalConfig=name]{xeCJK}
其中的LocalConfig=name表示在搜索路径中寻找名为"xeCJK-name.cfg"的配置文件。这样就可以复用关于中文自体的配置了。
在xeCJK中写有:
使用TeX Live的用户, 可以新建下列目录, 然后再把xeCJK-<name>.cfg放在里面:
texlive/texmf-local/tex/xelatex/xecjk
最后还需要在命令行下执行mktexlsr,刷新文件名数据库以便TeX系统能找到它。
问题在于在类Linux系统中, 一般不会把文件写到~以外的地方的。关于在~应该放在那里,现在能从安装sty的guide里得到点提示。我直接把相关的命令扔在这里好了,有时间搞清楚了再整理~ 可以看出来的是TeX Live有些特别的环境变量。
kpsewhich -var-value=TEXMFHOME texhash `kpsewhich -var-value=TEXMFHOME`
xeCJK的文档有几个奇怪的地方:复制中文出来的时候是乱码。虽然这间接实现了保护内容的作用,但是鉴于复制英文没有问题这显然是个bug,况且也有违开源精神,(⊙_⊙)有时间再看看神马情况、
OK 回归正题。xeCJK设置字体有两个常用的命令:
\setCJKmainfont{KaiTi}
\newCJKfontfamily[hei]\heiti{SimHei}
详细解释看文档, 简要的说明是第一行设定默认的CJK字体, 第二行实际上定义了一个新的 \heiti, 可以改变当前环境的字体为SimHei。两点说明:
为了实现\textbf \emph, 对应的字体family要有Bold & Italic face, 但是很多中文字体实际上是没有这些face的,那么xeCJK提供了两个选项
AutoFakeBold=true, AutoFakeSlant=true
来实现一个“伪”粗体和斜体。
但是中文环境中用该字体加粗和斜体是很难看的(至少我这么认为)。通常的做法是用黑体表示“加粗”来实现“重点”的作用。那么其实可以这样:
\setCJKmainfont[BoldFont=SimHei]{KaiTi}
OK 相信不用解释了。
另外提到的第二个命令,个人实际上不推荐。LaTeX的思想更多的是按逻辑组织文档而不是dive into design,所以我一般会尽量避免在文档中出现直接控制排版的语句。遇到这样的需要我会首先考虑是不是我的文档组织或者逻辑的问题。