Bera 字体和 fontenc 包的问题

Bera 字体和 fontenc 包的问题

我正在使用\usepackage[T1]{fontenc}LaTeX 排版一篇文章。使用默认字体,输入

Erd\H{o}s 

产生所需的

Erdős

在输出中,我可以正确复制和粘贴。根据我的理解,这要归功于包,但是,当我除了fontenc使用字体外,相同的输出现在复制并粘贴为\usepackage{bera}\usepackage[T1]{fontenc}

Erd ̋
os

\usepackage[T1]{fontenc}如果我一开始没有使用,我就会得到这个。我遗漏了什么吗?无论我先加载哪个包,都会发生这种情况。

编辑:下面是我所指的一个例子。根据我是否使用 Bera 字体,输出结果会有所不同。

\documentclass{amsart}

%\usepackage{bera}
\usepackage[T1]{fontenc}

\begin{document}

Erd\H{o}s

\end{document}

答案1

如果 DejaVu Serif、Sans 和 Mono 是一种选择,但您不希望(或不能)切换到其他引擎,或者只是不想弄乱fontspec并延长编译时间,那么您可以完美地将这些字体与 pdfTeX 一起使用。

\documentclass{amsart}

\usepackage{dejavu}
\usepackage[T1]{fontenc}

\begin{document}

Erd\H{o}s

\end{document}

此外,如果您确实想将 opentype 版本与 XeTeX 或 LuaTeX 一起使用,建议的方法是使用相关包:

\documentclass{amsart}

\usepackage{dejavu-otf}

\begin{document}

Erd\H{o}s

\end{document}

还请注意,如果您愿意,您可以Erdős在源代码中写入。这将在 XeTeX 或 LuaTeX 中立即生效。对于 pdfTeX,添加

\usepackage[utf8]{inputenc}

如果使用此行或使用 XeTeX 或 LuaTeX,您必须确保您的.tex文件以 UTF8 编码保存。这通常是当今大多数编辑器的默认设置,但也有一些例外,例如 TeXShop。

答案2

当@egreg 在评论中诊断出您的问题时,让我给您一个解决方法。

Bera 系列字体是 Bitstream Vera 的克隆版。DejaVu 字体也是如此,它们采用现代编码,对 Unicode 的覆盖范围极佳。您可以在 lualatex 或 xelatex 中使用这些字体。

\documentclass[varwidth, preview]{standalone}
\usepackage{fontspec}

\setmainfont{DejaVu Serif}
\defaultfontfeatures{Scale=MatchUppercase}
\setsansfont{DejaVu Sans}
\setmonofont{DejaVu Sans Mono}

\begin{document}
Paul Erd\H{o}s \textit{Paul Erdős} \textbf{Paul Erdős \textit{Paul Erdős}}

\textsf{Paul Erd\H{o}s \textit{Paul Erdős} \textbf{Paul Erdős \textit{Paul Erdős}}}

\texttt{Paul Erd\H{o}s \textit{Paul Erdős} \textbf{Paul Erdős \textit{Paul Erdős}}}
\end{document}

Paul Erdős

甚至还有两种与之匹配的数学字体 TeX Gyre DejaVu Math,您可以在 中使用unicode-math。不幸的是,它不支持无衬线字母。

由于这会将编码设置为 Unicode,因此复制粘贴即可。事实上,我用它将 Erdős 粘贴回了文档中。

将输出与 Bera 进行比较,其复制和粘贴失败:

\documentclass[varwidth, preview]{standalone}
\usepackage[T1]{fontenc} % Redundant with bera.
\usepackage{textcomp}
\usepackage[utf8]{inputenc} % The default since 2018
\usepackage{bera}

\begin{document}
Paul Erd\H{o}s \textit{Paul Erdős} \textbf{Paul Erdős \textit{Paul Erdős}}

\textsf{Paul Erd\H{o}s \textit{Paul Erdős} \textbf{Paul Erdős \textit{Paul Erdős}}}

\texttt{Paul Erd\H{o}s \textit{Paul Erdős} \textbf{Paul Erdős \textit{Paul Erdős}}}
\end{document}

PDFlatex sample

预计到达时间:

@cfr 指出还有dejavudejavu-otf包。加载dejavu而不是bera修复了您的问题,并且也适用于 pdflatex,而这种方法不行。有关详细信息,请参阅她的回答。话虽如此,请考虑升级到现代工具链。

直到她向我指出这一点,我才意识到这一点dejavu-otf,并且如果它的设置适合​​您,那么加载它可能是一个好主意,正如她建议的那样。如果您加载字体所需的命令发生变化,它可能会更新。而且,如果您安装软件包并时不时更新,您肯定会拥有最新版本的字体。

答案3

\usepackage{bera}加载时,输出字体编码会自动切换为 T1,因此\usepackage[T1]{fontenc}是否明确加载无关紧要。

问题出在哪里?让我们看看beraserif子包,发现字体系列名称是fve;因此我们查找t1fve.fd,它显示

\DeclareFontShape{T1}{fve}{m}{n}{
   <-> \fve@@Scale fver8t
}{}

好的8t,根据 Karl Berry 的字体名称方案, 表示 T1 编码字体。但是,我们可以使用来检查它,以vftovp fver8t获得以 开头的输出

(VTITLE )
(FAMILY UNSPECIFIED)
(FACE F MRR)
(CODINGSCHEME EXTENDED TEX FONT ENCODING - LATIN)
(DESIGNSIZE R 10.0)
(COMMENT DESIGNSIZE IS IN POINTS)
(COMMENT OTHER SIZES ARE MULTIPLES OF DESIGNSIZE)
(CHECKSUM O 10526223250)
(FONTDIMEN
   (SLANT R 0.0)
   (SPACE R 0.318)
   (STRETCH R 0.191)
   (SHRINK R 0.076)
   (XHEIGHT R 0.519)
   (QUAD R 1.0)
   (EXTRASPACE R 0.076)
   (PARAMETER D 8 R 0.729)
   (PARAMETER D 9 R 0.76)
   (PARAMETER D 10 R 0.928)
   (PARAMETER D 11 R 0.222)
   (PARAMETER D 12 R 0.928)
   (PARAMETER D 13 R 0.236)
   (PARAMETER D 14 R 0.636)
   (PARAMETER D 15 R 0.0)
   (PARAMETER D 16 R 1.2)
   )
(MAPFONT D 0
   (FONTNAME fver8r)
   (FONTCHECKSUM O 12607565666)
   (FONTAT R 1.0)
   (FONTDSIZE R 10.0)
   )

这是一个虚拟字体,使用“原始”fver8r作为基础并重新映射。现在我们可以查看表格并发现在 T1 编码中ő分配了插槽'245(八进制);因此让我们O 256在虚拟字体的人类可读形式中查找:

(CHARACTER O 256
   (CHARWD R 0.602)
   (CHARHT R 0.7955)
   (CHARDP R 0.020499)
   (MAP
      (PUSH)
      (MOVEDOWN R -0.014)
      (MOVERIGHT R 0.051)
      (SETCHAR O 5)
      (POP)
      (SETCHAR C o)
      )
   )

嘿!看来我们找到问题了!“ő”字形由原始字体中的两个字形组成。让我们尝试最后的实验。使用pdftex以下测试文件进行编译

\pdfcompresslevel=0
\pdfobjcompresslevel=0
\nopagenumbers

\font\test=fver8t \test

\char'256

\bye

前两个指令将生成几乎人类可读的 PDF 文件。在它的开头我们发现

3 0 obj
<<
/Length 74        
>>
stream
BT
/F52 9.9626 Tf 92.433 760.067 Td [(\005)]TJ -0.508 -0.14 Td [(o)]TJ
ET

endstream
endobj

问题就变得清晰了:PDF 文件编码字形。为什么在复制和粘贴时重音符号会出现在“o”后面,取决于 PDF 查看器的功能和启发式方法。

如果你看一下输出vftovp,你会看到每一个重音字符的实现方式与 类似ő

对于其他字体,这种情况不会发生。例如,\usepackage{dejavu}字体系列名称为,并且与之前类似的路径会导致检查我们找到的DejaVuSerif-TLF输出vftovp DejaVuSerif-tlf-t1

(CHARACTER O 256
   (CHARWD R 0.6021)
   (CHARHT R 0.7925)
   (CHARDP R 0.0137)
   (MAP
      (SETCHAR O 256)
      )
   )

没有组合字形!好极了!

相关内容