我正在寻找一种使用左、右窄角符号 (〈 〉,Unicode #3008,#3009) 的方法,以便它们在从 PDF 复制和粘贴时不会改变。
doc
例如,包 for和其他格式化宏使用这些符号\meta{...}
来指示参数的内容,例如: \command[〈options〉]{〈filename〉}
将用 写成|\command|\oarg{options}\marg{filename}
。此包使用\langle
和\rangle
数学符号。这样做的问题是,如果从生成的 PDF 中复制此代码,则符号将更改为h
和i
,例如:\command[hoptionsi]{hfilenamei}
。
Detexify 现在将我指向包的正反\textlangle
两面。这些角度分别复制到 ASCII 角度和,这已经好多了,但我更喜欢正确的窄角度。\textrangle
textcomp
<
>
我如何插入这些角度以便可以从 PDF 中正确复制?我尝试[utf8]{inputenc}
在 VIM 中手动使用并插入它们作为 Unicode 符号(分别为CTRL+ Vu 3008 或 3009),但出现错误,提示这些符号未设置为此用途。我的类/包需要这个ydoc
,它是和的替代方案,doc
并且ltxdoc
希望尽可能避免字体和编码的麻烦。这应该适用于 PDFLaTeX,而不仅适用于 XeLaTeX 或 LuaLaTeX。
答案1
和
\usepackage{cmap}
这两个符号可能与 U+27E8 数学左尖括号和 U+27E9 数学右尖括号相关联。如果您想直接输入它们,可以按照以下方法操作:
\documentclass[a4paper]{article}
\usepackage[utf8]{inputenc}
\usepackage{cmap}
\usepackage{textcomp}
\usepackage{newunicodechar}
\newunicodechar{〈}{$\langle$} % U+27E8
\newunicodechar{〉}{$\rangle$} % U+27E9
\begin{document}
\textlangle\textrangle
〈〉
\end{document}
另一个选择可能是
\newunicodechar{〈}{\textlangle} % U+2329
\newunicodechar{〉}{\textrangle} % U+232A
\DeclareUnicodeCharacter
当然,您也可以直接使用
\DeclareUnicodeCharacter{2329}{$\langle$}
\DeclareUnicodeCharacter{232A}{$\rangle$}
代替\newunicodechar
。
这应该允许从 PDF 查看器复制和粘贴符号,但似乎复制字符的代码取决于查看器何时\textlangle
使用\textrangle
。:(
感谢 Martin Scharrer 对答案提出的改进建议。
答案2
您可以使用 glyphtounicode。与 cmap 不同,它也可以与虚拟字体一起使用。
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{mathptmx}
\input{glyphtounicode.tex}
\pdfgentounicode=1
\pdfglyphtounicode{less}{3008}
\pdfglyphtounicode{greater}{3009}
\begin{document}
< >
\end{document}
如果你使用 pdflatex 进行编译,你可以将括号复制到记事本中。这样可以正常工作,但在 ascii 编辑器(例如 winedt)中结果不正确。
编辑。我刚想起来:另一种可能性是accsupp
。它适用于 pdftex、luatex + xetex:
\documentclass{article}
\usepackage{accsupp}
\begin{document}
\BeginAccSupp{method=hex,unicode,ActualText=3008}%
angleleft%
\EndAccSupp{}%
\end{document}