当从我的 Latex 文档生成的 PDF 中复制粘贴文本时,文本会显示乱码。这可能是什么原因造成的?
这是原文的一个例子:
最后,冒着过于抽象的风险,我应该指出,进化算法的灵感来自大自然的进化过程。这是一个很好的机会来了解这个比喻的深度。特别是因为生命本身并不是优化功能的现象,而更多的是利用你已经拥有的东西获得良好的结果,同时不对内部和外部的变化过于敏感。最后一个方面一定不能妨碍获得具有生物学意义的表型,但无论如何都是相关的。
以下是乱码的复制粘贴:
❆t ❧❛st✱ ❛♥❞ t❛❦✐♥❣ t❤❡ r✐s❦ ❛ ❜❡✐♥❣ t♦♦ ❛❜str❛❝t✱ ■ s❤♦✉❧❞ ♣♦✐♥t ♦✉t t❤❛t ❡✈♦❧✉t✐♦♥❛r2 ❛❧❣♦r✐t❤♠s ❛r❡ ✐♥s♣✐r❡❞ ❜2 ♥❛t✉r❡✬s ❡✈♦❧✉t✐♦♥❛r2 ♣r♦❝❡ss✳ ❚❤✐s ✐s ❛ ❣♦♦❞ ♦♣♣♦rt✉♥✐t2 t♦ ❣❛✐♥ s♦♠❡ ✐♥s✐❣❤t ❤♦✇ ❞❡❡♣❧2 ❝❛♥ t❤❛t ♠❡t❛♣❤♦r ❤♦❧❞✳ ❙♣❡❝✐❛❧❧2 s✐♥❝❡ ❧✐❢❡ ✐ts❡❧❢ ✐s ❧❡ss ❛ ♣❤❡♥♦♠❡♥❛ ♦❢ ♦♣t✐♠✐s✐♥❣ ❢✉♥❝t✐♦♥❛❧✐t2 ❜✉t ♠♦r❡ ♦❢ ❣❡tt✐♥❣ ❣♦♦❞ r❡s✉❧ts ✇✐t❤ ✇❤❛t 2♦✉ ❛❧r❡❛❞2 ❤❛✈❡ ✇❤✐❧❡ ♥♦t ❜❡❝♦♠✐♥❣ t♦♦ s❡♥s✐t✐✈❡ t♦ ✐♥t❡r♥❛❧ ❛♥❞ ❡1t❡r♥❛❧ ✈❛r✐❛t✐♦♥✳ ❚❤✐s ❧❛st ❛s♣❡❝t ♠✉st ♥♦t st❛♥❞ ✐♥ t❤❡ ✇❛2 ♦❢ ♦❜t❛✐♥✐♥❣ ♣❤❡♥♦t2♣❡s ✇✐t❤ ❜✐♦❧♦❣✐❝❛❧ ✐♥t❡r❡st ❜✉t ✐s r❡❧❡✈❛♥t ♥♦♥❡t❤❡❧❡ss✳
我运行的生成 pdf 的命令是:
pdflatex thesis.tex
bibtex thesis
pdflatex thesis.tex
pdflatex thesis.tex
我正在使用来自 debian wheezy 的 debian 软件包。
这是有问题的最小例子。
\documentclass{article}
% The Unicode character encoding UTF8 includes several special characters and characters with accents.
% The following code specifies that the encoding of the LaTeX document source file is UTF8.
% Font encoding is specified as T1, because it supports the encoding of extended character sets in fonts.
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{textcomp}
\title{A optimisation tool for the functional improvement\\ of Biological Models}
\begin{document}
Some garbled text with an accented à.
Some garbled text.
\end{document}
答案1
这取决于您使用的字体:
pdffonts test.pdf
Type 3 字体
尽量避免使用它们,因为它们是位图字体,缩放效果不佳。此外,这些字符没有字形名称,因此文本提取工具无法轻松提取它们。
如果您使用的\usepackage[T1]{fontenc}
是标准字体,那么您将获得 EC 字体。安装cm-super
以获取 Type 1 版本。或者使用后续字体 Latin Modern ( \usepackage{lmodern}
)。
包裹cmap
它基于 LaTeX 的字体编码,并将映射条目从插槽位置添加到 Unicode 插槽。
该包应该在一开始就加载:
\RequirePackage{cmap}
\documentclass{...}
该包不依赖于字体或字体类型中的正确字形名称。另一方面,未定义的编码(对于符号字体等)得不到很好的支持。
\pdfgentounicode
pdfTeX 的这一原语根据字体字形名称添加 Unicode 映射。它不适用于 Type 3 字体。如果字体包含正确的字形名称并提供映射,则支持效果会更好。
用法:
\pdfgentounicode=1 %
\input glyphtounicode.tex %
该文件glyphtounicode.tex
包含许多 glyhp 名称到 Unicode 的预定义映射。
包裹accsupp
该软件包使用/ActualText
PDF 的功能,允许指定应使用哪些文本来显示字形。例如,这允许对符号进行支持和更精细的控制。
PDF 查看器/文本提取器
此外,这取决于 PDF 查看器或提取文本的工具,它们支持哪些功能来检测字符。有些可能只适用于字形名称和插槽位置,其他则支持 Unicode 映射(它们应该支持),更高级的则支持该/ActualText
功能。
添加:包cmap
和方法\pdfgentounicode
不应一起使用,因为它们将相同的数据结构添加到 PDF 文件中的字体。如果它们完全相同,则不会有太大问题,但可能会有差异,这会违反 PDF 结构,导致 PDF 阅读器应用程序的行为不可预测,这些应用程序可以自由选择对同一键使用哪个值。
答案2
- 删除此包
\usepackage[T1]{fontenc}
并查看。它对我有用。 - 或者保留此包
\usepackage[T1]{fontenc}
并添加\usepackage{lmodern}
。对我来说,它也有效。