我正在使用\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}
甚至还有两种与之匹配的数学字体 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}
预计到达时间:
@cfr 指出还有dejavu
和dejavu-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)
)
)
没有组合字形!好极了!