我已经使用 LaTeX 有一段时间了,并且阅读了很多关于字体编码的讨论。
一些人建议使用 T1 字体\usepackage[T1]{fontenc}
,其他人建议什么都不添加,其他人建议T1
在包之外使用ae
,而其他人说这已被弃用,应该使用其他字体......
我很困惑,是否有一些更新的资源可以很好地解释这个问题并解决这个问题?
根据我的经验,不添加任何内容都可以正常工作,但有时我需要额外的字符集,例如粗体小写字母,在这种情况下,我可以使用 T1 编码,但质量很差。如果我使用ae
或lmodern
包,一切似乎都得到了解决。到底发生了什么,我到底应该怎么做?
附言:如果之前已经问过这个问题,我很抱歉,我发现了很多关于这个问题的讨论,但我发帖是希望得到一个明确的答案。
PPS:目前我正在使用latex
++ dvips
。如果可以的话ps2pdf
我更喜欢使用pdflatex
,但是当我与其他人合作时,这并不总是可行的。
答案1
基本规则是:如果\usepackage[T1]{fontenc}
在您的文档中使用可以获得更好的结果,请尝试。
解释:当您编写英文文本时,您可能不需要这一行,并且在大多数情况下您不会遇到任何差异/困难。
当 Knuth 推出 TeX 时,他将其与名为“Computer Modern”的字体一起发布。与当今的 OpenType 字体相比,此字体的字符集非常有限。例如,没有“ö”和“ü”等字符。如果您不排版使用这些字符的任何语言,这不会造成任何损害。但是,一旦您必须呈现它们,您可以通过在“o”或“u”上方组合两个点“¨”来提供帮助。有一个 TeX 原语可以做到这一点:\accent
。这会产生禁用连字符的副作用,这是不可接受的。
因此,有一天,TeX 用户就如何对能够呈现大多数欧洲语言的字体进行编码达成了一致(T1 编码)。当用户请求“ö”或“ü”时,此编码会告知应将哪种代码放入 DVI 或 PDF 文件中。现在这些字符不再需要由两个字形组成,它们不会破坏连字符。
现在,如果没有这些有趣的字符,为什么还要使用 T1 呢?当您为 LaTeX 准备字体时,您必须创建字体度量文件 ( tfm
)。由于 T1 是目前使用最广泛的编码(当然在欧洲),有些人不再使用非 T1 编码,因此字体可能无法在旧的默认编码中使用OT1
。
但是:当您坚持使用 Computer Modern 时,您可能希望保留旧编码(而不是使用 T1),因为 PostScript 变体(可带来更好的渲染效果)仅适用于 OT1 编码。对于 T1 编码的 Computer Modern(当您需要在包含这些特殊字符的单词中使用连字符时,您必须使用它),您可以使用ae
或将字体更改为 cm-super(通过不是加载ae
并将编码更改为 T1 - 但我不想这样做)。我强烈建议使用 Computer Modern 替代品“Latin Modern”,它有几种版本(PostScript Type 1、OpenType 字体)。通过 激活它\usepackage{lmodern}
。
答案2
替代XeLaTeX
方案
OPLaTeX
在问题标题中明确指出了这一点。有一个名为的相关编译器,XeLaTeX
旨在以比更流畅的方式处理外来字符LaTeX
。我认为在这里提到它会很有用。我已经用它排版法语一段时间了,非常成功。序言中的以下代码将检查是否XeLaTeX
正在被调用并相应地加载程序。
在下面的代码中,为了插入序言,我加载了公共域字体Libertine
。这只是一个例子:在这种情况下,使用setmainfont
命令选项设置字体非常繁琐,因此libertine
创建了一个名为的特定包,以便更轻松地设置字体。
\usepackage[oldstyle]{libertine}% public domain font % alternative to \setmainfont line commented out below
\usepackage{ifxetex}% load different packages with/without XeLaTex
\ifxetex
\usepackage{fontspec}% provides \setmainfont
%\setmainfont[Numbers=OldStyle,Ligatures=Common,Mapping=tex-text]{Linux Libertine O}% public domain font % or use the libertine package instead
\else % packages below are not needed with utf8 based engines
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\fi%
前段时间我查了一下,发现这是一个很好的组合(如果我错了,请专家纠正我)。我并不是专家XeLaTeX
,我只是发现它对我的法语文本有很大帮助,所以最近才采用它。