LaTeX中实现文本下划线的多种方法详解

8 次阅读

LaTeX 排版中,下划线并不只是简单地给文字添加一条横线。根据文档类型、文字内容以及排版效果的不同,可以选择 underline、ulem 宏包、soul 宏包等多种实现方式。不同方法在换行、样式、数学公式以及中文文本方面存在明显差异。

一、使用 underline 添加基础下划线

LaTeX 最直接的文本下划线命令是 underline{}:

LaTeX
documentclass{article}

egin{document}

这是underline{带有下划线的文字}。

end{document}

编译后,“带有下划线的文字”会显示为带下划线的文本。

这种方法最大的优点是简单,不需要额外安装或加载宏包,适合短文本、关键词以及简单强调场景。

例如:

LaTeX
underline{LaTeX教程}

可以直接将“LaTeX教程”设置为下划线效果。

不过,underline 存在一个比较明显的限制:被下划线包围的内容通常不能正常自动换行。

例如:

LaTeX
underline{这是一段比较长的文字,如果内容超过当前行宽,可能无法按照普通文本一样自然换行。}

对于短字符串问题不大,但处理长句子、段落或网页链接时,就不太适合。

二、使用 ulem 宏包实现更灵活的下划线

如果需要处理较长的文本,ulem 是非常常见的选择。

首先在导言区加载宏包:

LaTeX
usepackage{ulem}

然后可以使用:

LaTeX
uline{这是带下划线的文本}

完整示例:

LaTeX
documentclass{article}
usepackage{ulem}

egin{document}

普通文本。

uline{这是一段带下划线的文本。}

end{document}

与 underline 相比,uline 更适合连续文本,并且能够更好地处理换行问题。

1. uline:普通下划线

LaTeX
uline{这是普通的下划线效果}

适用于正文中的重点内容。

2. uuline:双下划线

LaTeX
uuline{这是双下划线文本}

适合需要突出显示的重要内容。

3. uwave:波浪线

LaTeX
uwave{这是波浪线效果}

如果不希望使用传统直线下划线,可以采用波浪线强调文本。

4. sout:删除线

ulem 不仅可以实现下划线,还可以添加删除线:

LaTeX
sout{这是一段删除线文本}

这对于修改稿、批注以及展示文本变更尤其方便。

5. xout:交叉删除线

LaTeX
xout{这是一段交叉删除线}

使用前需要注意,部分 ulem 功能可能受到文档字体和宏包配置影响。

三、使用 soul 宏包实现下划线

另一种常见方案是 soul 宏包。

导言区加入:

LaTeX
usepackage{soul}

然后使用:

LaTeX
ul{这是带下划线的文本}

完整代码如下:

LaTeX
documentclass{article}
usepackage{soul}

egin{document}

ul{这是一段带下划线的文本。}

end{document}

soul 的优势在于不仅支持下划线,还提供高亮、字符间距等文本处理能力。

例如:

LaTeX
hl{这是高亮文本}

可以生成高亮效果。

因此,如果文档中同时存在“下划线”和“高亮”等需求,使用 soul 会比较方便。

四、设置不同颜色的下划线

如果希望下划线使用特定颜色,可以结合 xcolor 使用。

例如:

LaTeX
usepackage{xcolor}
usepackage[normalem]{ulem}

然后:

LaTeX
	extcolor{blue}{uline{蓝色下划线文本}}

也可以针对下划线本身设置颜色:

LaTeX
{color{red}uline{红色下划线}}

完整示例:

LaTeX
documentclass{article}
usepackage{xcolor}
usepackage[normalem]{ulem}

egin{document}

{color{red}uline{红色下划线文本}}

{color{blue}uline{蓝色下划线文本}}

end{document}

如果只希望修改下划线颜色,而不改变文字颜色,则可以使用更细致的自定义方案,而不是简单地将整个 uline 设置成某种颜色。

五、中文文本使用下划线时的注意事项

中文 LaTeX 文档通常需要使用适合中文排版的宏包或编译方式,例如 XeLaTeX 或 LuaLaTeX 配合 ctex。

一个比较常见的写法是:

LaTeX
documentclass{ctexart}
usepackage[normalem]{ulem}

egin{document}

uline{这是一段中文下划线文本。}

end{document}

如果直接使用传统 LaTeX 编译方式处理中文,可能会遇到字体、编码或者宏包兼容问题。

对于现代中文文档,更推荐使用:

XeLaTeX

或者:

LuaLaTeX

进行编译。

六、为什么加载 ulem 后 emph 的效果发生变化

使用 ulem 时有一个容易被忽略的问题。

默认情况下:

LaTeX
usepackage{ulem}

可能会改变 emph{} 的表现形式。

原本:

LaTeX
emph{重点内容}

通常表示斜体强调,而加载 ulem 后,emph 的行为可能变成下划线。

如果希望保留 LaTeX 默认的斜体强调方式,可以写成:

LaTeX
usepackage[normalem]{ulem}

因此,在正式论文、技术文档中,如果只是为了获得 uline,通常推荐:

LaTeX
usepackage[normalem]{ulem}

这样可以避免意外改变整个文档中的强调样式。

七、underline 与 uline 的区别

两种方式看起来非常接近,但实际应用场景有所不同。

方法是否需要宏包长文本换行适用场景
underline{}不需要较弱简单短文本
uline{}ulem更好正文下划线
ul{}soul较好文本强调与高亮
uuline{}ulem更灵活双下划线
uwave{}ulem更灵活波浪线强调

如果只是给几个字添加下划线,直接使用:

LaTeX
underline{文字}

已经足够。

如果是论文正文、长句或者需要自动换行的文本,则更适合:

LaTeX
uline{文字}

八、如何自定义下划线样式

LaTeX 默认下划线的位置和粗细通常适合普通排版,但在一些设计要求较高的文档中,可能需要进一步调整。

例如,可以使用 ulem 提供的机制定义特殊效果,也可以结合 tikz、contour 等工具实现更加复杂的文本装饰。

对于普通技术文档,不建议为了简单下划线引入过多复杂宏包。过度定制不仅增加代码量,也可能带来字体兼容和编译冲突。

如果目标只是实现清晰、稳定的文本强调,ulem 已经能够满足大多数需求。

九、下划线与数学公式的区别

LaTeX 中的文本模式和数学模式并不是完全相同的。

例如:

LaTeX
$a_1$

这里的 _ 并不是下划线,而是数学模式中的下标符号。

如果直接写:

LaTeX
这是_text

通常会产生错误,因为 _ 在数学环境之外不能直接按照数学下标方式使用。

如果确实需要显示下划线字符,可以使用:

LaTeX
_

例如:

LaTeX
文件名为 example_test.tex

最终会显示:

文件名为 example_test.tex

这一点在技术文档中尤其重要,因为程序变量、文件名和数据库字段经常包含 _。

十、代码中的下划线不要直接使用文本下划线命令

如果需要展示程序代码,通常不建议:

LaTeX
underline{user_name}

因为这改变的是文本视觉样式,而不是单纯显示字符。

对于代码内容,更适合使用 verbatim、listings 或 minted 等代码排版工具。

例如:

LaTeX
egin{verbatim}
user_name = "Tom"
end{verbatim}

这样可以保留代码中的 _,同时避免 LaTeX 对特殊字符进行解释。

十一、为链接添加下划线

技术文档中经常需要给 URL 或超链接添加下划线。使用 hyperref 时,通常不需要手动套 underline。

例如:

LaTeX
usepackage{hyperref}

然后:

LaTeX
url{https://example.com}

或者:

LaTeX
href{https://example.com}{访问官方网站}

如果希望调整链接的视觉样式,可以配置 hyperref:

LaTeX
usepackage[colorlinks=true]{hyperref}

这样可以通过颜色而不是传统下划线突出链接。

相比直接使用 underline,让 hyperref 管理超链接样式通常更加合理,因为它还负责 PDF 中的实际链接功能。

十二、论文中是否应该大量使用下划线

下划线属于比较强烈的视觉强调方式。论文、技术报告和正式文档中,如果大面积使用下划线,容易降低正文的阅读连续性。

对于普通强调,可以优先考虑:

LaTeX
emph{重要内容}

或者使用粗体:

LaTeX
	extbf{重要内容}

需要模拟手稿批注、强调修改内容或突出特定字段时,再考虑:

LaTeX
uline{重要内容}

这样能够让不同文本层级保持更加清晰的视觉关系。

十三、常见问题排查

1. uline 未定义

如果出现:

Undefined control sequence

并且代码中使用了:

LaTeX
uline{文本}

通常是因为没有加载 ulem:

LaTeX
usepackage[normalem]{ulem}

2. 中文下划线显示异常

可以优先检查:

  • 是否使用 XeLaTeX 或 LuaLaTeX;

  • 是否使用 ctex;

  • 当前字体是否正常支持中文;

  • ulem 与其他中文排版宏包是否存在冲突。

3. 下划线无法正常换行

如果使用:

LaTeX
underline{很长的一段文本}

发现换行效果不理想,可以改成:

LaTeX
uline{很长的一段文本}

通常更适合长文本。

4. emph 突然变成下划线

检查是否直接加载:

LaTeX
usepackage{ulem}

如果希望保留传统的斜体强调方式,应改为:

LaTeX
usepackage[normalem]{ulem}

5. _ 导致编译错误

正文中的下划线字符需要转义:

LaTeX
_

例如:

LaTeX
my_variable

而不是:

LaTeX
my_variable

十四、实际项目中的选择建议

不同场景可以采用不同方案。

如果只需要给短文本添加简单下划线:

LaTeX
underline{关键词}

即可。

如果正文中存在较长的下划线文本:

LaTeX
usepackage[normalem]{ulem}

uline{需要强调的长文本}

更合适。

如果同时需要高亮和下划线:

LaTeX
usepackage{soul}

ul{下划线文本}
hl{高亮文本}

可以考虑 soul。

如果处理的是文件名、变量名或程序代码中的 _,则不要使用 underline,而应该根据实际场景使用:

LaTeX
_

或者代码环境。

如果处理的是网页链接,则建议交给 hyperref 管理。

综合来看,LaTeX 实现文本下划线并不存在唯一方案。underline 胜在简单直接,ulem 更适合正式文档中的灵活文本装饰,soul 则适用于需要更多文本强调功能的场景。根据文本长度、是否需要换行、是否涉及中文、代码或超链接等实际需求选择合适的方法,可以让 LaTeX 文档既保持良好的排版效果,也降低后续维护成本。