我已经发布了一个类似的问题关于减号 ( -
),但现在我遇到了撇号 ( ) 的问题,'
以前的解决方案似乎无法解决。这似乎是一个与此无关的问题,listings
因为我甚至无法\verb!'!
创建一个在复制时得到 ASCII 代码 39 的 PDF。我所能得到的只是一个扩展字符(根据 hexdump 为 e2 80 99)。
以下是 MWE:
\documentclass{article}
\begin{document}
\verb!'!
\end{document}
所以问题是:
如何创建一个 PDF,使其显示一个单引号,并且复制时具有单引号的 ASCII 值?
答案1
在没有 ToUnicode CMap 的情况下,pdf 查看器将采取一些启发式方法尝试将字形映射到 unicode 代码点,但在 ASCII 之外,这可能会变得不稳定,并且在某些查看器中仅在某些时候有效。(例如,参见本专利)。因此,Stephan Lehmke 看到的结果与 Yossi Farjoun 不同。您可以很容易地添加一个 tounicode 表,但有问题的字符是quoteright
通常映射到 的字符U+2019
。您可以将 映射quoteright
到U+0027
(字形的代码点quotesingle
),这将解决您的直接问题,但文档中其他地方的单右引号(列表之外)将受到影响。我发现有一个未记录的“命名空间”功能,\pdfglyphtounicode
允许将重新映射限制为仅打字机字体:
\documentclass{article}
\input glyphtounicode.tex
\input glyphtounicode-cmr.tex
\pdfglyphtounicode{tfm:cmtt10/quoteright}{0027}
\pdfgentounicode=1
\begin{document}
\verb!'! `hello'
\end{document}
实际上,事实证明 cmtt10 确实包含一个quotesingle
您可能更喜欢使用的字形(在这种情况下,\pdfglyphtounicode
不需要上面的行)。要访问此字形,请使用\usepackage{textcomp}
然后\texttt{\textquotesingle}
就可以了。对于 listings 环境,我相信您可以\lstset{upquote=true}
让它在看到 ASCII 撇号时使用此字形。
答案2
和listings
,您可以将该upquote=true
选项与以下选项结合使用\usepackage{textcomp}
:
\documentclass{article}
\usepackage{listings}
\usepackage{textcomp}
\lstset{upquote=true}
\begin{document}
\lstinline!'!
\end{document}