考虑以下 MCE:
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{luximono}
\begin{document}
\texttt{foo-bar}
\end{document}
从 Acrobat Reader 复制粘贴“foo-bar”时,破折号消失:得到“foobar”。
据我所知,这个问题不会发生:
- 使用 Acrobat Reader 以外的 PDF 查看器,
- 或使用 LuxiMono 以外的字体。
您知道为什么以及如何获得预期的行为吗?
答案1
您可以将字形名称映射到正确的 Unicode 位置:
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{luximono}
\pdfglyphtounicode{hyphen}{002D}
\pdfgentounicode=1
\begin{document}
\texttt{foo-bar}
\end{document}
(我不知道为什么 Adobe 不复制它,当名称是连字符时,也许它试图太聪明并删除连字符破折号)。
我解压了 vf 并按照连字符的方式进行操作:
包含ul9r8t.vpl
(缩短)
(CHARACTER O 55
...
(MAP
(SETCHAR O 255)
)
)
这意味着连字符 (十进制 45=八进制 55) 被映射到八进制 255=十进制 173。这也是在 pdf 中得到的结果:(foo\255bar)
而不是(foo-bar)
。
8r.enc 编码/hyphen
两次:一次在位置 45,一次在位置 173。
luximono 字体(在 中ul9r8a.afm
)位于hyphen
位置 45,而sfthyphen
(“软连字符”)位于位置 173。
所以在我看来 Adobe 做了正确的事情,asfthyphen
应该在复制和粘贴时消失,并且错误是有错误的:甚至将 \hyphenchar 设置为 -1 的打字机也不应该像这样重新映射连字符。