如何根据上下文使用正确的 Unicode 代码点粘贴斜线(/)?

如何根据上下文使用正确的 Unicode 代码点粘贴斜线(/)?

Unicode 为斜线提供了不同的字符:

  • U+002F (/) 为普通斜线
  • U+2215(∕)代表数学除法运算符
  • U+2044 (⁄) 表示粗俗分数

我怎样才能让这些内容自动粘贴正确的 Unicode 代码点?一些起始代码如下:

\documentclass{article}
\input glyphtounicode
  \pdfgentounicode=1
\usepackage[T1]{fontenc}
\usepackage{nicefrac}

\begin{document}

textual: w/o (intended: U+002F)

in an equation: \(12/4 = 3\) (intended: U+2215)

in a vulgar fraction (produced by package \texttt{nicefrac}): 1\nicefrac{1}{2} (intended: U+2044)

\end{document}

请注意,数学模式下的“-”已经正确粘贴为“减号”(U+2212,“−”),所以我怀疑解决这个问题是可能的。

另请参阅我的相关问题这里

答案1

slashPDF 文件中的三个不同斜线都使用相同的字形名称。因此,只能通过功能设置一个映射\pdfgentounicode。PDF 格式提供了另一个ActualText可与包一起使用的功能。该示例保持普通斜线不变,它通过/accsupp映射到 U+002F 。其他两个定义为宏。在某些阶段,宏对于 是必要的,因为它必须在字形之前和之后在 PDF 页面内容流中放置一些标记。\pdfgentounicodeglyphtounicode.texaccsupp

\documentclass{article}

\pdfgentounicode=1
\input{glyphtounicode}
\usepackage{accsupp}
\usepackage{nicefrac}
\usepackage{etoolbox}

% U+2215
\newcommand*{\mathdivide}{%
  \ensuremath{%
    \BeginAccSupp{method=hex,unicode,ActualText=2215}/\EndAccSupp{}%
  }%
}
% U+2044
\newcommand*{\fractionslash}{%
  \ensuremath{%
    \BeginAccSupp{method=hex,unicode,ActualText=2044}/\EndAccSupp{}%  
  }%
}

% Patch nice frac macros to insert the right slashes
\makeatletter
\expandafter\patchcmd\csname \@backslashchar @UnitsUglyFrac \endcsname
{/}{\mathdivide}{%
  \@latex@info@no@line{Successful patched \string\@UnitsUglyFrac}%
  }{%
  \@latex@error{Could not patch \string\@UnitsUglyFrac}%
}

\expandafter\patchcmd\csname \@backslashchar @UnitsNiceFrac \endcsname
{/}{\fractionslash}{%
  \expandafter\patchcmd\csname \@backslashchar @UnitsNiceFrac \endcsname
  {/}{\fractionslash}{%
    \@latex@info@no@line{Successful patched \string\@UnitsNiceFrac}%
  }{%
    \@latex@error{Could not patch \string\@UnitsNiceFrac}%
  }%
}{%
  \@latex@error{Could not patch \string\@UnitsNiceFrac}%
}
\makeatother

\begin{document}
/ $a\mathdivide b$
\nicefrac{a}{b} $\nicefrac{a}{b}$
\end{document}

结果

复制粘贴的结果:

  • “/ a∕ba⁄ba⁄b”
  • “/ a\u2215b a\u2044b a\u2044b”(转义符号)

相关内容