为什么从编译的pdf复制时“fi”不能分开?

为什么从编译的pdf复制时“fi”不能分开?

我注意到,在用 Latex 编译的 pdf 文件中,从 pdf 文件中复制文本时,“field”中的“fi”不能分离为“f”和“i”。我想知道为什么,这是否可以改变?谢谢,问候!

答案1

以下内容逐字摘自 TeX Book(第9 TeX 的罗马字体,第 51 页):

\rm让我们从普通罗马字体(或 )的规则开始\tenrm;除非您另有说明,否则普通 TeX 将使用此字体进行所有操作。您需要的大多数普通符号都很容易获得,您可以用普通方式输入它们:没有什么特别的

  • AZa致的信z
  • 数字09
  • 常见标点符号: ; ! ? ( ) [ ] - * / . , @

但 TeX 会将某些组合识别为连字

  • ff产量
  • fi产量
  • fl产量
  • ffi产量
  • ffl产量
  • --产量(短破折号)
  • ---产生(破折号)
  • ‘‘产量
  • ’’产量
  • !‘产量¡
  • ?‘产量¿

当然,TeX 也为大多数重音符号写连字,例如\^o。理解连字的最佳方式是,它们代表字体中的单个字符。因此,MS Word 的“插入符号”对话框可能很好地代表了这一点:

在此处输入图片描述

请注意,有些符号出现在一个框中,这意味着它们“紧密相连”,代表排版输出中的单个字符(或连字符)。此外,这是字体特定的,不同的字体有不同的(或多或少)连字符。

答案2

cmap 包就是为解决这个问题而编写的。摘自文档:

cmap 包旨在使 pdflatex 生成的 PDF 文件在 acrobat reader 和其他兼容的 PDF 查看器中“可搜索和复制”。

只需在序言的开头放置 \usepackage{cmap} 行,它将预先加载文档中使用的字体所需的 CMap 翻译,前提是存在字体编码的 .cmap 文件。

CMap 包的当前版本包括以下 LaTeX 字体编码的 CMap 文件:T1、T2A、T2B、T2C、T5、OT1、OT1tt、OT6、LGR、LAE、LFE。

这对我有用:

\documentclass{article}
\usepackage{cmap}
\usepackage[T1]{fontenc}
\begin{document}
final
\end{document}

更新:Ulrike Fisher 在评论中表示 pdfglyphtounicode 更好,请参阅使 Linux Libertine 中的连字符可复制(和可搜索)

答案3

你写了:

我注意到,在用 Latex 编译的 pdf 文件中,从 pdf 文件中复制文本时,“field”中的“fi”不能分离为“f”和“i”。我想知道为什么,是否可以更改这种情况?

如果它已经在编译的 pdf 中,那么您无能为力。考虑以下 MWE:

\documentclass{standalone}
\usepackage[OT1]{fontenc}
\begin{document}
iffy fig flat office baffle
\end{document} 

如果你使用 pdflatex 编译该程序,你应该得到以下内容:

在此处输入图片描述

注意这五个连字符的外观。但是,如果你复制粘贴输出(我在写这篇文章时使用 TeXLive 2011 和 TeXworks 作为前端),你将得到:

iy g 
at oce bae

恐怕这个网站的数据输入系统似乎无法正确呈现各种奇怪的符号,所以当我说我看到一对音符、一个阳性和一个阴性性别符号以及一些无法识别的形状时,你必须相信我。(有趣的是,“fl”字形似乎由一个不可见的换行符表示,因此字符“at”出现在第二线。)

但是,如果我在 MWE 中将“OT1”更改为“T1”(英语文本的更现代的字体编码方案 - 对于许多非英语语言也适用),重新编译它,然后将生成的 pdf 文件的输出复制并粘贴到 ascii 编辑器中,我得到:

iffy fig flat office baffle

正如人们希望的那样,所有五个连字符组合现在都已正确恢复。

我还没有用其他现代字体编码重复这个实验,但我怀疑问题——即从 pdf 文件复制到纯文本文件时,连字符呈现不正确——是特定于 OT1 字体编码方法。如果您遇到使用 latex 创建的 pdf 文件,并且连字符看起来很奇怪,并且如果有机会,您可能希望询问论文的作者是否愿意使用序言\usepackage[T1]{fontenc}中的说明重新编译它...

答案4

仅供参考:以上方法都不适用于我,但是这个线程:http://www.latex-community.org/forum/viewtopic.php?f=5&t=953

正是这些行:

 \usepackage{microtype}
    \DisableLigatures[f]{encoding=T1}

在该\usepackage[T1]{fontenc}线之前。

如果其他方法都失败了,这可能是一个快速而粗略的解决方案。

保重,B

相关内容