我不确定这是否是 LaTeX 的基础,或者这是否取决于查看者,但我面临以下现象:
\texttt{\textit{C}D}
当我运行pdflatex
并查看结果(在 Okular 中)并搜索文本时,我发现这个结果是“C D”,但不是“CD”。斜体校正似乎让查看者认为有一个空格。
我在更复杂的设置中看到过类似的搜索文本拆分,包括手动调整字距和混合斜体和直体,但我认为这是一个简单的、有代表性的案例。
是否存在一种通用的机制可以将单词在逻辑上组合在一起,以便我可以按预期进行搜索?
答案1
一种可能是使用accsupp
包裹,这使我们能够定义屏幕阅读器使用的替代文本。这样做的副作用是从 PDF 复制/搜索的文本流也会被修改。
accsupp
可以临时使用(下面我的文档的第二段)或包装在命令中(如果整个文档中有许多这样的模式)。该accsupp
方法不适用于任何可能被分页符分割的内容,但您在此处的使用不应该发生这种情况。
PDF 查看器中的突出显示可能会变得奇怪(我在 Adobe Acrobat DC 中注意到了这一点),但是当我在 Windows 7 上的 SumatraPDF 和 Adobe Acrobat DC 中测试时,搜索功能找到了正确的文本。我不知道这种方法是否适用于所有查看器。
\documentclass{article}
\usepackage{accsupp}
\newcommand*\mycommand[2]{%
\BeginAccSupp{ActualText=#1#2}%
\texttt{\textit{#1}#2}\EndAccSupp{}%
}
\begin{document}
\texttt{\textit{C}D}
\BeginAccSupp{ActualText=CD}\texttt{\textit{C}D}\EndAccSupp{}
\mycommand{C}{D}
\end{document}
根据章节标题请求添加:
为了在标题中使用,命令必须强大(我etoolbox
为此使用了,但还有其他方法可以实现它)。我猜你可能也在使用hyperref
,所以我检查了书签列表:这也能正常工作。该ActualText
值用于书签文本。
\documentclass{article}
\usepackage{accsupp}
\usepackage{etoolbox}
\usepackage{hyperref}
\newrobustcmd*\mycommand[2]{%
\BeginAccSupp{ActualText=#1#2}%
\texttt{\textit{#1}#2}\EndAccSupp{}%
}
\begin{document}
\texttt{\textit{C}D}
\BeginAccSupp{ActualText=CD}\texttt{\textit{C}D}\EndAccSupp{}
\mycommand{C}{D}
\section{\mycommand{C}{D}}
\end{document}