我想知道为什么有些从 LaTeX 代码编译的 PDF 文档无法正确复制其文本,也就是说,您得到的是无意义的文本?例如,这个 pdf 文档(我没有它的 LaTeX 代码)。
答案1
PDF 规范允许这样做 - 显示与可检索内容不同的内容。randtext
包裹或许就是一个很好的例子。它提供了\randomize{<text>}
(从包装文档)
...排版一个框,在纸上看起来像
<text>
,但其字母实际上被按随机顺序排列,因此不能直接从文件中复制。
另一个例子是accsupp
包裹它允许指定要提取的替代文本,而不是使用分组显示的文本:
\BeginAccSupp{ActualText={<copy>}}<typeset>\EndAccSupp{}
有关示例,请参阅如何使 PDF 预览器中的文本复制忽略 lineno 行号?
这样做的动机肯定是出于安全性,正如randtext
文档中所述:
这个奇怪的宏的功能是混淆电子邮件地址,比如在线发布的 PDF 文档中的地址,以便人类读者可以看到预期的地址,但电子邮件地址收集者和垃圾邮件机器人无法确定该地址。
答案2
也许,更有用的是问如何避免这样的麻烦。如果是这样,那么 awswer 就是加载cmap
包。如果文本包含西里尔字母,这是绝对必要的。但是,据我所知,cmap
如果源文本采用 UTF8 编码,则不需要。