字体的控制序列和包

字体的控制序列和包

标准 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.pfbcmr10.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.sfgUGBK.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 和包xeCJKctex,正如 OP 要求我做的那样,然而,它有点离题。

排版一篇中文文章或书籍的工作可以分为三部分——选择字体、处理禁止和版式样式。XeLaTeX 的 packagexeCJK解决了前两个部分,而ctexpackage/documentclass (区分大小写) 完美解决了最后一个部分。

XeLaTeX 具有xeCJK

请按照以下步骤获取正确的输出:

  1. 打开系统终端并输入fc-list :lang=zh-cn(或者fc-list :lang=zh-tw如果你在台湾)。
  2. 该结果的一行可能看起来像:C:/WINDOWS/fonts/SIMLI.TTF: LiSu,隶书:style=Regular--- 用两个冒号分隔成三部分。第一部分显示您可以在哪里找到特定的字体文件,第二部分显示<file name>(用逗号分隔),最后一部分告诉您字体样式。
  3. 选择一种字体,并将其输入<file name>\setCJKmainfont{<file name>}区分大小写,见下面的示例)。
  4. 保存为编码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

包装xeCJKhttp://texdoc.net/texmf-dist/doc/xelatex/xecjk/xeCJK.pdf

包/文档类ctexhttp://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

相关内容