如何打印/转义下划线字符,以便在 PDF 查看器中搜索最后一个单词

如何打印/转义下划线字符,以便在 PDF 查看器中搜索最后一个单词

我有一个 tex 文档,其中包含纯文本、表格、tikz 状态机等。我有变量、状态名称和一堆带有下划线的其他单词(例如 WAIT_FOR_DATA、DATA_RECEIVED)。这些名称会导致编译器(pdflatex)错误。用反斜杠转义下划线似乎有帮助,但问题是最终的 PDF 正确显示了下划线,但最终的单词在整个文档中无法搜索。似乎使用了不同但相似的字符来代替标准下划线。

有没有办法来解决这个问题 ?

在此处输入图片描述

在此处输入图片描述

更新我被要求提供一个示例代码。

\usepackage[table]{xcolor}
\usepackage{makecell,booktabs,tabularx,ragged2e,multirow,graphicx,geometry,hyperref,helvet, float,longtable,multirow,tikz,tikz-timing}
\renewcommand{\cellalign}{tl}
\geometry{a4paper ,left=0.75in,,right=0.75in,top=1in,bottom=1in,}
\renewcommand{\familydefault}{\sfdefault}
\usepackage{fancyhdr}
\pagestyle{fancy}
\fancyhf{}
\fancyfoot[C]{footer}
\fancyfoot[R]{\thepage}
\renewcommand{\headrulewidth}{0.0pt}
\renewcommand{\footrulewidth}{0.4pt}
\usetikzlibrary{automata, positioning, arrows, shadows, fit}
\usetikztiminglibrary{overlays}                                                             
                                                                                            
\usepackage{array}
\setlength{\arrayrulewidth}{0.012in}
\setlength{\tabcolsep}{0.2in}
\renewcommand{\arraystretch}{1.2}
\newcommand{\rowstyle}[1]{\gdef\currentrowstyle{#1}
  #1\ignorespaces
}

\begin{document}   
something\_something

\end{document}```

答案1

默认的 OT1 编码(7 位)用直线模拟下划线。T1 编码(8 位)是一种更好的编码,它避免了 OT1 编码的一些怪癖,并且对其他字形提供了更多的支持。它可以通过以下方式设置:

\usepackage[T1]{fontenc}

如果您使用的是 Computer Modern 字体(7 位),则会切换到 EC 字体。较新的 Latin Modern 字体(CM/EC 字体的后继者)甚至更好(支持更多字形和字体格式):

\usepackage{lmodern}

使用支持 Unicode 的引擎(LuaTeX、XeTeX)添加(无需包fontenc):

\usepackage{fontspec}

默认的是拉丁现代字体。

概括:

8 位引擎(pdfTeX、vanilla TeX):

\usepackage[T1]{fontenc}
\usepackage{lmodern}

Unicode 引擎(LuaTeX、XeTeX):

\usepackage{fontspec}

那么下划线字符应该是可以复制的字形,而不是在 OT1 编码中通过线条(规则)进行模拟。

附言:

还有一个accsupp针对 PDF 格式的“ActualText”功能的包:

\usepackage{accsupp}
...
\BeginAccSupp{ActualText={Here_is_a_word}Here\_is\_a\_word\EndAccSupp{}

但是语法有点麻烦,并且并非所有 PDF 查看器都能够很好地支持该功能。

相关内容