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