您能否推荐一本书/教科书来帮助我了解字体在 LaTeX 中的工作原理?
接下来的问题就是:两年内我将用西里尔文写我的硕士论文(作为开始)。这封信上有几种写法,但这些方法对我来说不够好。作为一名数学家,我是一个非常严谨的人,我希望一切都完美。所以我决定学习它们的工作原理,这样我就可以改变它们以满足我的需求。
我希望你能理解我(因为我的英语很差)。
谢谢
答案1
乳胶
LaTeX 的传统字体只能有 256 个字形,这显然不足以覆盖多个字母表。这是一个类似于操作系统的旧代码页的问题。但是,LaTeX 可以使用多种字体。
通过引入,问题已经(未完全)得到解决字体编码。LaTeX 社区抛弃了旧的、过时的七位编码,开发了一套编码。
什么是字体编码?
字体有 256 个插槽,用于放置字形。字体编码是插槽和字形之间的对应关系。有了这种预先确定的对应关系,LaTeX 可以定义指向正确插槽的宏,而无需用户知道字形的位置。例如,当编码为 T1 时,\'a
会生成指令以打印插槽八进制 301(十进制 193)中的字符。但是,当编码为 T2A 时,不包含“á”字形,同样\'a
会指示 TeX 在“a”上叠加一个尖音符。
主要的字体编码有哪些?
T1涵盖了许多使用拉丁字母的欧洲语言
T2A涵盖使用西里尔字母的欧洲语言(俄语、乌克兰语、塞尔维亚语、保加利亚语、白俄罗斯语)
T2B和T2C涵盖使用西里尔字母的亚洲语言
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