我正在尝试让磅符号出现在用 TG Pagella 撰写的文本中。
\documentclass[11pt]{article}
\usepackage{tgpagella} % alternative to MinionPro
%\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\begin{document}
The pound sign one way : \pounds, or another \textsterling
\end{document}
产生一个美元符号。但是如果我将其转换[utf8]{inputenc}
为[t1]{fontenc}
,我会得到一个漂亮的英镑符号。问题:为什么会这样?Pagella 不支持 utf8 吗?可以将T1
和fontenc
与 Pagella 一起使用吗?有什么问题吗?
答案1
正如 JosephWright 所解释的,你可以完美地同时使用inputenc
和fontenc
:
\documentclass[11pt]{article}
\usepackage[T1]{fontenc}% generally best to load this before loading the font
\usepackage{tgpagella}% alternative to MinionPro
\usepackage[utf8]{inputenc}
\begin{document}
The pound sign one way : \pounds, or another \textsterling
\end{document}
inputenc
设置输入编码即你输入的字符是如何编码的。fontenc
设置输出编码告诉 TeX 特定字形应该位于字体的什么位置。
fontenc
当你不使用编码加载时,你得到一个美元符号的原因T1
是你使用了默认编码,OT1
和字体配置中似乎至少有一个错误,但可能是两个tgpagella
(也可能是其他 TeX-Gyre 字体,因为它们都共享相同的编码文件)。
OT1
只有 128 个位置,而T1
有 256 个。这意味着没有空间同时容纳美元和磅符号。最初,TeX 无法处理包含超过 128 个字符的编码。TeX 最初应对这一限制的方法是将美元符号放在直立字体中,将磅符号放在斜体中。因此,如果OT1
处于活动状态(例如,因为您没有fontenc
使用其他编码加载),您的代码将产生美元符号而不是磅符号,因为美元占据了直立字体中的那个位置。为了避免这种情况,LaTeX 使用以下代码:
\DeclareTextCommand{\textsterling}{OT1}{\hmode@bgroup
\ifdim \fontdimen\@ne\font >\z@
\itshape
\else
\fontshape{ui}\selectfont
\fi
\char`\$\egroup}
\pounds
并根据您是否\mathsterling
处于\textsterling
数学模式来进一步定义。
因此\pounds
和\textsterling
应该表现得符合预期。然而,事实并非如此。出于某种原因,TeX 尝试加载 的形状ui
。tgpagella
由于不存在,它会替换为直立的形状,当然,这会给您美元符号。这表明相关字体尺寸未正确设置,因为代码应该使其尝试\itshape
而不是尝试加载不存在的ui
形状。但是,即使您强制\itshape
,您也不会得到英镑符号,而是斜体美元。因此,配置显然在编码的斜体字体中放置了斜体美元,而不是OT1
直立的英镑符号。
建议避免这种复杂性的原因之一是T1
。其他原因包括,许多重音字符都包含在内,T1
而如果您使用OT1
,TeX 必须从无重音字形加上重音来创建它们。这在视觉外观(在许多情况下)和复制粘贴方面都不太令人满意。同样,这是由于 128 个插槽限制造成的限制。
答案2
不要忽略乳胶警告:-)
\documentclass[11pt]{article}
\usepackage[OT1]{fontenc}% generally best to load this before loading the font
\usepackage{tgpagella}% alternative to MinionPro
\usepackage[utf8]{inputenc}
\begin{document}
The pound sign one way : \pounds, or another \textsterling
\end{document}
生产
LaTeX Font Warning: Font shape `OT1/qpl/m/ui' undefined
(Font) using `OT1/qpl/m/n' instead on input line 6.
在 OT1 编码中,斜体字体有一个£
,非斜体字体有一个$
,因此 LaTeX2e 避免出现默认倾斜£(就像 LaTeX2.09 和普通 TeX 一样)使用直立斜体字体。但大多数字体集都没有这种字体,因此字体机制正在替代它
不幸的是,它取代了直立罗马字体(m/n
),因此失去了磅字,最好用斜体代替
您可以添加
\AtBeginDocument{\DeclareFontShape{OT1}{qpl}{m}{ui}{<->sub*qpl/m/it}{}}
那么替换就是
LaTeX Font Warning: Font shape `OT1/qpl/m/ui' in size <10.95> not available
(Font) Font shape `OT1/qpl/m/it' tried instead on input line 7.
但似乎你仍然会得到一个 $,这可以说是此字体中 OT1 内部字体编码的一个错误,但实际上根本没有理由使用 OT1 编码,它只是为了应对 Computer Modern 字体使用的编码的有趣特性,因此切换到 T1 可以解决问题。