当我尝试圈出一个小字母、编译(使用glyphtounicode.tex
),然后粘贴生成的文本时,会出现组合圆圈(U+20DD)前字母(这里是“b”),尽管它是 Unicode 组合字符,应该始终出现后。
\documentclass{article}
\input glyphtounicode
\pdfgentounicode=1
%\usepackage{accsupp}
%\newcommand*{\textcircledcorrected}[1]{\BeginAccSupp{method=hex,unicode,ActualText=???? 20DD}\textcircled{#1}\EndAccSupp{}}
\begin{document}
a\textcircled{\tiny b}c
%a\textcircledcorrected{\tiny b}c
\end{document}
(当信件足够大时,就不会出现这个问题。)
当我尝试使用accsupp
(参见上面注释掉的行)修复此问题时,我陷入了僵局:如果我使用method=hex
和unicode
选项,我可以将组合圆(U+20DD)指定为20DD
,但我需要将字母参数(#1
)转换为其 Unicode 代码点,或者我需要某种方式来指定 U+20DD 字符(也许使用选项method=pdfstringdef
)同时保持#1
-argument 不变。
不幸的是我无法在我的系统上使用 UTF-8 作为输入编码。
有没有一个好方法来定义一个\textcircledcorrected
命令(accsupp
我想使用)总是将组合圈粘贴在封闭的字符后面?
答案1
\pdfstringdef
支持,因此如果包含一个符号,\textcircled
则以下操作有效:#1
\documentclass{article}
\input glyphtounicode
\pdfgentounicode=1
\usepackage[pdfencoding=auto]{hyperref}
\usepackage{accsupp}
\newcommand*{\textcircledcorrected}[1]{%
\BeginAccSupp{
method=pdfstringdef,
unicode,
ActualText={\textcircled{#1}},%
}%
\textcircled{#1}%
\EndAccSupp{}%
}
\begin{document}
a\textcircledcorrected{\tiny b}c
\end{document}
顺便说一句,PDF 代码中没有accsupp
按正确顺序包含字符,因此#1
先出现圆圈,然后出现圆圈。由于重叠,圆圈稍微向左移动。字母的左移量较大\tiny
。因此,这取决于启发式方法,如何在 PDF 查看器中处理这个问题。您的 PDF 查看器显然决定在这种情况下切换字符。