粘贴小圆圈(\textcircled)字母会导致组合圆圈的 Unicode 代码点序列不正确(反转)

粘贴小圆圈(\textcircled)字母会导致组合圆圈的 Unicode 代码点序列不正确(反转)

当我尝试圈出一个小字母、编译(使用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=hexunicode选项,我可以将组合圆(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 查看器显然决定在这种情况下切换字符。

相关内容