如果加载了 tgpagella 和 utf8,则磅 = $:为什么?

如果加载了 tgpagella 和 utf8,则磅 = $:为什么?

我正在尝试让磅符号出现在用 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 吗?可以将T1fontenc与 Pagella 一起使用吗?有什么问题吗?

答案1

正如 JosephWright 所解释的,你可以完美地同时使用inputencfontenc

\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 尝试加载 的形状uitgpagella由于不存在,它会替换为直立的形状,当然,这会给您美元符号。这表明相关字体尺寸未正确设置,因为代码应该使其尝试\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 可以解决问题。

相关内容