防止小的自动空格分割单词

防止小的自动空格分割单词

我不确定这是否是 LaTeX 的基础,或者这是否取决于查看者,但我面临以下现象:

\texttt{\textit{C}D}

当我运行pdflatex并查看结果(在 Okular 中)并搜索文本时,我发现这个结果是“C D”,但不是“CD”。斜体校正似乎让查看者认为有一个空格。

我在更复杂的设置中看到过类似的搜索文本拆分,包括手动调整字距和混合斜体和直体,但我认为这是一个简单的、有代表性的案例。

是否存在一种通用的机制可以将单词在逻辑上组合在一起,以便我可以按预期进行搜索?

答案1

一种可能是使用accsupp包裹,这使我们能够定义屏幕阅读器使用的替代文本。这样做的副作用是从 PDF 复制/搜索的文本流也会被修改。

accsupp可以临时使用(下面我的文档的第二段)或包装在命令中(如果整个文档中有许多这样的模式)。该accsupp方法不适用于任何可能被分页符分割的内容,但您在此处的使用不应该发生这种情况。

PDF 查看器中的突出显示可能会变得奇怪(我在 Adob​​e Acrobat DC 中注意到了这一点),但是当我在 Windows 7 上的 SumatraPDF 和 Adob​​e 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}

相关内容