我有一个 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 查看器都能够很好地支持该功能。