标准 CJK 包仅提供 2 种简体中文字体,如下所述这里。
我的问题是如何为其创建更多字体?我正在使用 MacTeX 2013,并且 UTF8 + CJK + pdflatex 是预期环境。
应该有一种方法可以将字体(比如说ttf
)转换为 TeX 可以处理的字体。
答案1
字体的控制序列和包
(普通)字体的 TeX 级别控制序列
原始 TeX(TeX 原始和/或普通 TeX 级别命令)中有几个关于字体的控制序列(或说命令)。
\/
,可以用来调节后的空间斜体{\itshape italic} normal
字符(参见 LaTeX 中和的区别{\itshape italic}\/ normal
)。\font
是调用字体的原始命令。在 TeX 和 pdfTeX 中,\font
只能读取tfm
文件;在 XeTeX 中,它可以读取 TrueType、AAT 或 OpenType 字体文件;在 LuaTeX 中,也\font
只能读取tfm
文件,但是 LuaTeX 有一个名为的内置库callback
,因此可以使用与 XeTeX 一样多的字体文件。\fam
可以用来定义数学字体。在原始 TeX 中,仅能定义 16 种数学字体(XeTeX 中没有限制)。\fontname
将返回字体的名称。\nullfont
提供的字体没有字符。
pdfTeX 和 LuaTeX 可以使用预定义的将字体pdfTeX.map
映射tfm
到 Type1 或 TrueType 字体直接生成 PDF 文件。
\pdfmapline
:举个例子,如果有人试图使用,\pdfmapline{cmr10 CMR10 <cmr10.pfb}
它将嵌入到 PDF 文件中。cmr10.pfb
cmr10.tfm
\pdfpkresolution
:若没有.pfb
文件,.pk
则以文件为替代,该命令用于调整PK字体的分辨率。
LaTeX 和 NFSS
NFSS 是“新字体选择方案”的缩写(见这里)。由于这七种控制序列对于用户来说过于枯燥,NFSS定义了字体的五个特性——encoding,family,series,shape和size。事实上,NFSS的宏都是以这七个命令为基础的。
虽然 NFSS 为用户提供了更简单的字体选择方式,但直接使用 NFSS 可能会被贴上晦涩的标签。NFSS 的另一个缺点是 NFSS 是为西文设计的。
套餐
幸运的是,我们有包osf
(ConTeXt 风格,见这里)和包fontspec
(在 XeTeX 和 LuaTeX 下,请参阅这里)。
包xeCJK
(使用 XeTeX)和包LuaTeX-ja
(使用 LuaTeX,参见这里) 扩展功能fontspec
并更好地处理禁令和标点压缩。
由于为包设置字体的过程CJK/CJKutf8
是非常繁琐,我强烈建议您使用带有包的 XeTeXxeCJK
或使用带有包的 LuaTeX LuaTeX-ja
。
使用引擎 TeX/pdfTeX (原始 LaTeX 和 pdfLaTeX)
包裹CJK
8 位 TeX 系统假设2**8
一个文件只能包含 256 ( ) 种字符.tex
。因此,.tfm
字体文件最多只能包含 256 个字符。现在,糟糕的事情发生了——你知道,字符数多得多的 Aisa 字符集怎么能被包含在这样的文件中呢!
TeX 的先驱们将亚洲字符集和编码表分成了多个分区,每个分区只有 256 个字符。因此,每个字符的索引都有两部分:第一部分让 TeX 知道应该加载哪个分区,第二部分告诉 TeX 该分区中特定字符的索引。这就是 TeX 所做的CJK
。
流程
当你编译以下代码时,会发生什么?
\documentclass{article}
\usepackage{CJK}
\begin{document}
\begin{CJK}{GBK}{song}
汉字
\end{CJK}
\end{document}
当 TeX 读取 时\begin{CJK}{GBK}{song}
,它会加载UGBK.sfg
。UGBK.sfg
给出 Unicode 和 GBK 的对应关系,因为大多数中文字体内部都使用 Unicode。
现在,TeX 遇到了‘汉字’。这两个字符CJK
是\CJKchar[GBK]{"BA}{"BA}\CJKchar[GBK]{"D7}{"D6}
。这里 GBK 中的‘汉’是0xBABA
,而‘字’是OxD7D6
。
当 TeX 遇到 \end{CJK} 时,会读取UGBK.sfg
并发现 '汉' 在第 43 个分区(#199),也就是 subfont 中,而 '字' 在第 65 个分区(#105)中。因此,'汉字' 会被转换为(C19 inCJK
表示 GBK):
\C19/song/m/n/10/43 ╟\C19/song/m/n/10/65 i
注意,在扩展 ASCII 中,╟
是 199,而i
是 105。\C19/song/m/n/10/
表示 GBK 编码,字体名称song
,(m)edium(不是 blod)和 upright(不是 italic)。
在C19song.fd
(fd 是‘字体描述’的缩写)中,您可以看到:
\DeclareFontShape{C19}{song}{m}{n}{<-> CJK * gbksong}{}
因此,\C19/song/m/n/10/43 ╟\C19/song/m/n/10/65 i
将设置:
{\font\1="gbksong43"\1\char199}{\font\1="gbksong65"\1\char105}
文件
.sfg
:给出两种编码的对应关系。.fd
:声明应该使用哪种字体。.tfm
:定义字体的抽象部分,例如连字符、字距等。.pk
:定义图形部分,字体的字形。.map
:字体映射。.pfb
:Type1字体样式的文件。
如果要使用CJK/CJKutf8
,您必须生成/复制太棒了很多类型的文件。所以,再说一遍,不要使用它。
安装新字体
包裹zhmCJK
看这里,作者:LeoLiu。
使用引擎 XeTeX
警告:下面的文字描述了如何使用 XeLaTeX 和包xeCJK
和ctex
,正如 OP 要求我做的那样,然而,它有点离题。
排版一篇中文文章或书籍的工作可以分为三部分——选择字体、处理禁止和版式样式。XeLaTeX 的 packagexeCJK
解决了前两个部分,而ctex
package/documentclass (区分大小写) 完美解决了最后一个部分。
XeLaTeX 具有xeCJK
请按照以下步骤获取正确的输出:
- 打开系统终端并输入
fc-list :lang=zh-cn
(或者fc-list :lang=zh-tw
如果你在台湾)。 - 该结果的一行可能看起来像:
C:/WINDOWS/fonts/SIMLI.TTF: LiSu,隶书:style=Regular
--- 用两个冒号分隔成三部分。第一部分显示您可以在哪里找到特定的字体文件,第二部分显示<file name>
(用逗号分隔),最后一部分告诉您字体样式。 - 选择一种字体,并将其输入
<file name>
(\setCJKmainfont{<file name>}
区分大小写,见下面的示例)。 - 保存为编码UTF-8文件名为“
main.tex
”,然后使用 进行XeLaTeX
编译xelatex main.tex
。
例子:
%!TEX program = xelatex
\documentclass{article}
\usepackage{metalogo} % for the logo of XeLaTeX
\usepackage{showframe} % for showing page frames
\usepackage{xeCJK}
\setCJKmainfont{LiSu}
\begin{document}
这里是中文,这是隶书。我在使用\XeLaTeX 结合xeCJK排版中文。
\end{document}
这是输出:
尖端:
- 你做不是需要
~
在 CJK 字符和西方字符之间添加 来调节它们之间的间距,就像你在 中总是做的那样CJK/CJKutf8
。 - 在XeTeX引擎中,CJK字符可以作为命令使用,因此,如果任何命令后面跟着任何CJK字符,则必须留一个空格,否则
Undefined control sequence
会报错。
ctex
包/文档类
此包为您提供了一些功能,例如设置\parindent
为中文字符宽度的两倍(2\ccwd
),以简化您的布局设置。请参阅其文档最新版本。
此软件包由SimSun
/KaiTi
提供中国电子(中易中标电子信息技术有限公司)作为中国大陆用户默认字体,使用Windows操作系统,CN-Simp版本。如果正确安装了这些字体,排版中文就会变得相当容易。
%!TEX program = xelatex
\documentclass[UTF8]{ctexart} % instead of `article'
% `ctexbook' for `book', and `ctexrep' for `report'
\begin{document}
这里是中文。\\
段首缩进两个字符宽度。
这里是默认字体,中易宋体。\textit{这里是楷书},\texttt{还有仿宋}。
\end{document}
如果您没有这些字体,使用该nofonts
选项并手动选择字体将是一个不错的选择。以下是示例(无文本主体):
%!TEX program = xelatex
\documentclass[UTF8, nofonts]{ctexart}
% select fonts for western chars
\setmainfont{Minion Pro}
\setsansfont{Myriad Pro}
% select fonts for CJK chars
\setCJKmainfont[BoldFont={Adobe Heiti Std},ItalicFont={华文楷体}]
{华文中宋}
\setCJKsansfont{Adobe Heiti Std}
\setCJKmonofont{华文仿宋}
有关此问题的详细信息,请参阅这里。
在线文档
该包fontspec
(xeCJK基于它):http://texdoc.net/texmf-dist/doc/latex/fontspec/fontspec.pdf
包装xeCJK
:http://texdoc.net/texmf-dist/doc/xelatex/xecjk/xeCJK.pdf
包/文档类ctex
:http://texdoc.net/texmf-dist/doc/latex/ctex/ctex.pdf
答案2
我想,对你来说最简单的解决办法就是复制 Windows 中文字体
simsun.ttc
simfang.ttf
simkai.ttf
simhei.ttf
simli.ttf (optional)
simyou.ttf (optional)
到工作目录(如果您购买了 Windows 副本),并使用:
% Compile with pdflatex or latex+dvipdfmx
\documentclass{article}
\usepackage{CJKutf8}
\usepackage{CJKspace}
% for font mapping
\usepackage{atbegshi}
\AtBeginShipoutFirst{\input{zhwinfonts}}
\begin{document}
\begin{CJK*}{UTF8}{zhsong}
中文排版。
\clearpage\end{CJK*}
\end{document}
如果您没有 Windows 版本,您可能需要使用其他 TrueType 格式的中文字体。但是,Mac OS X 中预装的 SinoType(华文)字体无法使用。请参阅https://code.google.com/p/ctex-kit/issues/detail?id=81