输出中一个pdflatex
可以改进的常见方面是,人们可以在多大程度上从生成的 PDF 文件中选择文本输出并进行复制粘贴。这本质上是一个拥有正确输出编码的问题。这至少有两个重要方面:
- 在理想情况下,Unicode 将是输出编码。
- 连字符号(如 fi)最好在输出中取消连字符(此处为“fi”)。
输出编码似乎是通过fontenc
包指定的。可能的输出编码范围是多少,最重要的是:有没有办法指定 Unicode 输出编码并以预期的方式处理连字符?
(注:区分输出从输入编码。如何使用不同的输入LaTeX 中的编码已得到广泛记录。我的理解是,这最好由包来处理inputenx
,因为它取代了inputenc
包。)
解决方案快速指南:答案和答案线索中的信息有点分散,因此这里是简短的总结:一种方法是\input glyphtounicode
一起使用\pdfgentounicode=1
;另一种方法是使用cmap
/ mmap
。
附录:有时需要加载包accsupp
并将宏定义括在\BeginAccSupp{method=hex,unicode,ActualText=<codepoint>}
[...]中\EndAccSupp{}
以生成特定代码点。请参阅有关非 BMP 代码点的警告这里以及修复(从accsupp
版本 v0.4 开始,2012/11/18)这里,它提供了新的unichar
封装选项。
答案1
你知道 cmap 软件包吗(看看CTAN:cmap)?它会帮你完成这些。将其\usepackage{cmap}
作为第一个包加载。
更新:我做了一些研究,发现了一些关于如何使用cmap
或的提示mmap
。结果:cmap
并且mmap
无法处理基于虚拟字体(文件*.vf
或*.vpl
字体目录中的字体)。因此,如果您使用的字体需要虚拟字体cmap
或mmap
无法工作。您最好使用glyphtounicode
。这暗示可能会有用。
顺便说一句:cmap
基于 Adobe 的字符映射。请参阅 PDF 参考版本 1.6了解更多信息。
更新2:texdoc encguide
您将获得一份描述 T1 Cork 编码的文档。您将在其中找到一个表格,其中显示了您可以直接写入 pdf 文件的所有字形。因为ä
您可以在 pdf 文件中找到一个字形ä
。如果没有字形,ä
LaTeX 必须用两个字符来构建它:"a
。您将ä
在 pdf 文件中看到它,但找不到它(搜索"a
可能会有所帮助;复制和粘贴会将其返回给您)。
更新 3:glyphtounicode
仅支持 T1 编码,cmap
支持更多编码。 的一个优点glyphtounicode
是,可以使用一个命令添加更多尚未包含在官方列表中的字形。 有关更多信息,\glyphtounicode
请参见此处:tb91thanh-字体.pdf. 确保glyphtounicode.tex
从获取最新版本LCDF 型软件看看此警告如何正确使用它。
答案2
由于您没有提供最小示例,我不确定这是否真的解决了您的问题。您尝试过加载glyphtounicode.tex
吗?
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\input glyphtounicode
\pdfgentounicode=1
\begin{document}
ff ffi ffl ä ü ö ß
auffallen
\end{document}
但是,即使不使用glyphtounicode
,pdftotext
我的系统也会生成 unicode 文本。使用glyphtounicode
,连字符会被取消连字符。
答案3
如果您正在使用memoir
,则可以使用选项 编译文档ms
。输出就像用打字机写的东西,但由于没有连字符,因此很容易复制和粘贴文本以便在其他程序(例如 Word 或 LibreOffice Writer)中重复使用。
我经常使用此选项作为一种快速而简单的方法将 LaTeX 文档中的文本导入 Word。
由于回忆录在 -模式下使用 1.5 倍行距ms
,因此将每页的行数设置为不会填满页面的数字非常重要。
一位 MWE 表示:
\documentclass{ms,article}{memoir}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{lipsum}
\input{glyphtounicode}
\pdfgentounicode=1
\setulmargins{*}{*}{1,5}
\setlength{\textheight}{32\baselineskip}
\checkandfixthelayout[lines]
\begin{document}
\lipsum[1-21]
\end{document}
编辑:user14996 询问:为什么glyphtounicode
使用 fontenc-line 时输出或粘贴行为没有区别?
答案是:这取决于您的字体。我使用MinionPro
,它使用小写数字 ( oldstylenums
) 作为标准。我还使用间隔小写字母。加载glyphtounicode
但不加载 时 fontenc
,挪威字符 (æøå ÆØÅ) 无法从 PDF 文件中正确复制。另一方面,所有数字和小写字母都可以复制和粘贴。如果我做相反的事情,删除glyptounicode
但保留fontenc
,数字就会变成希腊字符,小写字母就会消失。此外,所有连字符 (fi ffi fj) 都会消失。
使用cmap
代替glyphtounicode
没有帮助。
所以答案是,有时fontenc
是您唯一需要的包,但如果您使用字体中的特殊功能(小型大写字母、旧式数字等),而这些功能需要虚拟字体,则需要加载 glyphtounicode
。cmap
不支持虚拟字体。有时甚至不能解决glyphtounicode
所有问题。
答案4
我不精通乳胶,但是为了获得可复制的西里尔字母 PDF,您可以使用以下类型的文档。
\documentclass{article}
\usepackage{cmap}
\usepackage[utf8x]{inputenx}
\usepackage[T2A]{fontenc}
\usepackage[T2B]{fontenc}
\usepackage[T2C]{fontenc}
\begin{document}
Кирилица
\end{document}
T2A,T2B和T2C是西里尔字母的不同变体的集合。