乳胶

乳胶

您能否推荐一本书/教科书来帮助我了解字体在 LaTeX 中的工作原理?

接下来的问题就是:两年内我将用西里尔文写我的硕士论文(作为开始)。这封信上有几种写法,但这些方法对我来说不够好。作为一名数学家,我是一个非常严谨的人,我希望一切都完美。所以我决定学习它们的工作原理,这样我就可以改变它们以满足我的需求。

我希望你能理解我(因为我的英语很差)。

谢谢

答案1

乳胶

LaTeX 的传统字体只能有 256 个字形,这显然不足以覆盖多个字母表。这是一个类似于操作系统的旧代码页的问题。但是,LaTeX 可以使用多种字体。

通过引入,问题已经(未完全)得到解决字体编码。LaTeX 社区抛弃了旧的、过时的七位编码,开发了一套编码。

什么是字体编码?

字体有 256 个插槽,用于放置字形。字体编码是插槽和字形之间的对应关系。有了这种预先确定的对应关系,LaTeX 可以定义指向正确插槽的宏,而无需用户知道字形的位置。例如,当编码为 T1 时,\'a会生成指令以打印插槽八进制 301(十进制 193)中的字符。但是,当编码为 T2A 时,不包含“á”字形,同样\'a会指示 TeX 在“a”上叠加一个尖音符。

主要的字体编码有哪些?

  • T1涵盖了许多使用拉丁字母的欧洲语言

  • T2A涵盖使用西里尔字母的欧洲语言(俄语、乌克兰语、塞尔维亚语、保加利亚语、白俄罗斯语)

  • T2BT2C涵盖使用西里尔字母的亚洲语言

  • T3涵盖 IPA 音标

  • T4涵盖使用(改良的)拉丁字母的非洲语言

  • T5涵盖越南语

  • 大肠杆菌涵盖希腊语

还有其他编码,特别是 LY1,它是经过修改的 T1。

用户是否需要担心编码?

既是也不是。为了向后兼容,默认编码是旧的七位 OT1。必须规划文档需要哪些语言。因此,对于使用西里尔文脚本的塞尔维亚语文档,初始声明

\usepackage[T2A]{fontenc}

应该签发。如果说需要英文摘要,则应该

\usepackage[T1,T2A]{fontenc}

因此该文档的主要编码将是T2A,即最后指定的编码。

以下声明

\usepackage[serbianc]{babel}

将设置 LaTeX 使用连字符模式和关键字(例如“chapter”或“figure”的连字符模式和关键字)。请注意,对babel西里尔文塞尔维亚语的支持是最近才推出的,因此需要更新的 TeX 发行版。

我如何选择字体?

文档使用的字体系列应支持所需的编码。对于 T1 编码,选择范围很广,但对于 T2? 编码则不然;请参阅哪些字体与 T2A(西里尔文)编码兼容?了解更多信息。

如果字体不包含 T2A 编码集,则无法用它书写西里尔文。因此,除非有可用的商业字体,否则必须拒绝使用西里尔时区的请求。但是,正如链接问题的答案所示,支持西里尔文的免费字体系列。例如,

\usepackage[T2A]{fontenc}
\usepackage[utf8x]{inputenc}
\usepackage[serbianc]{babel}
\usepackage{paratype}

将使用 ParaType 字体设置文档。此inputenc调用与字体及其编码无关,而是与 LaTeX 输入文件的形式有关;如今,使用 UTF-8 保存文件是首选格式。

XeLaTeX 和 LuaLaTeX

如果选择较新的排版引擎(例如预装了 LaTeX 格式的 XeTeX 或 LuaTeX),字体选择会有所不同。对于这些引擎,字体编码的概念无关紧要,因为推荐使用它们的方式是通过 OpenType 或 TrueType 字体和软件包fontspec。例如,可以通过以下方式设置使用 ParaType 字体的文档:

\usepackage{fontspec}
\setmainfont{PT Serif}
\setsansfont{PT Sans}
\setmonofont{PT Mono}

前提是 (TrueType) ParaType 字体已作为系统字体安装。不过,字体已包含在 TeX Live 中,也可以从其文件名调用,请参阅 的文档fontspec

对于使用西里尔字母的塞尔维亚语,我的选择是 XeLaTeX,因为对该语言的支持babel有些有限。然而,情况正在发展。

假设西拉特克斯,这里有一个最基本的文档:

\documentclass[a4paper]{article}

\usepackage{fontspec} % use OpenType or TrueType fonts
\usepackage{polyglossia} % support for different languages

% use the ParaType fonts (or change for other fonts)
\setmainfont{PT Serif}
\setsansfont{PT Sans}
\setmonofont{PT Mono}

\setmainlanguage[Script=Cyrillic]{serbian}

如果你在文档中使用数学,选择 ParaType 字体,因为没有配套的数学字体。以下是一些可能性。

计算机现代字体

\documentclass[a4paper]{article}

\usepackage{fontspec} % use OpenType or TrueType fonts
\usepackage{unicode-math} % use OpenType math fonts
\usepackage{polyglossia} % support for different languages

% use the CMUnicode fonts for text
\setmainfont{CMU Serif}
\setsansfont{CMU Sans Serif}
\setmonofont{CMU Typewriter Text}

\setmathfont{Latin Modern Math}

\setmainlanguage[Script=Cyrillic]{serbian}

像字体一样的时代

\documentclass[a4paper]{article}

\usepackage{fontspec} % use OpenType or TrueType fonts
\usepackage{unicode-math} % use OpenType math fonts
\usepackage{polyglossia} % support for different languages

% use the Times font for text
\setmainfont{Times New Roman}
% \setsansfont{Arial} % ???
\setmonofont{CMU Typewriter Text}

\setmathfont{TeX Gyre Termes Math}

\setmainlanguage[Script=Cyrillic]{serbian}

Palatino 类字体

\documentclass[a4paper]{article}

\usepackage{fontspec} % use OpenType or TrueType fonts
\usepackage{unicode-math} % use OpenType math fonts
\usepackage{polyglossia} % support for different languages

% use the Palatino font for text
\setmainfont{̦Palatino}
% \setsansfont{Arial} % ???
\setmonofont{CMU Typewriter Text}

\setmathfont{TeX Gyre Pagella Math}

\setmainlanguage[Script=Cyrillic]{serbian}

进一步阅读

LaTeX 伴侣广泛涵盖了 LaTeX 的字体、编码等。此外fntguide.pdf有详细信息

答案2

据我所知,详细描述非常广泛。如果你懂日语或者几年后就能学会,这里有一个全面但简短的总结:http://www.geocities.co.jp/texuttex/font_elementary.html

相关内容