LaTeX 排版中,下划线并不只是简单地给文字添加一条横线。根据文档类型、文字内容以及排版效果的不同,可以选择 underline、ulem 宏包、soul 宏包等多种实现方式。不同方法在换行、样式、数学公式以及中文文本方面存在明显差异。
一、使用 underline 添加基础下划线
LaTeX 最直接的文本下划线命令是 underline{}:
LaTeXdocumentclass{article} egin{document} 这是underline{带有下划线的文字}。 end{document}
编译后,“带有下划线的文字”会显示为带下划线的文本。
这种方法最大的优点是简单,不需要额外安装或加载宏包,适合短文本、关键词以及简单强调场景。
例如:
LaTeXunderline{LaTeX教程}
可以直接将“LaTeX教程”设置为下划线效果。
不过,underline 存在一个比较明显的限制:被下划线包围的内容通常不能正常自动换行。
例如:
LaTeXunderline{这是一段比较长的文字,如果内容超过当前行宽,可能无法按照普通文本一样自然换行。}
对于短字符串问题不大,但处理长句子、段落或网页链接时,就不太适合。
二、使用 ulem 宏包实现更灵活的下划线
如果需要处理较长的文本,ulem 是非常常见的选择。
首先在导言区加载宏包:
LaTeXusepackage{ulem}
然后可以使用:
LaTeXuline{这是带下划线的文本}
完整示例:
LaTeXdocumentclass{article} usepackage{ulem} egin{document} 普通文本。 uline{这是一段带下划线的文本。} end{document}
与 underline 相比,uline 更适合连续文本,并且能够更好地处理换行问题。
1. uline:普通下划线
LaTeXuline{这是普通的下划线效果}
适用于正文中的重点内容。
2. uuline:双下划线
LaTeXuuline{这是双下划线文本}
适合需要突出显示的重要内容。
3. uwave:波浪线
LaTeXuwave{这是波浪线效果}
如果不希望使用传统直线下划线,可以采用波浪线强调文本。
4. sout:删除线
ulem 不仅可以实现下划线,还可以添加删除线:
LaTeXsout{这是一段删除线文本}
这对于修改稿、批注以及展示文本变更尤其方便。
5. xout:交叉删除线
LaTeXxout{这是一段交叉删除线}
使用前需要注意,部分 ulem 功能可能受到文档字体和宏包配置影响。
三、使用 soul 宏包实现下划线
另一种常见方案是 soul 宏包。
导言区加入:
LaTeXusepackage{soul}
然后使用:
LaTeXul{这是带下划线的文本}
完整代码如下:
LaTeXdocumentclass{article} usepackage{soul} egin{document} ul{这是一段带下划线的文本。} end{document}
soul 的优势在于不仅支持下划线,还提供高亮、字符间距等文本处理能力。
例如:
LaTeXhl{这是高亮文本}
可以生成高亮效果。
因此,如果文档中同时存在“下划线”和“高亮”等需求,使用 soul 会比较方便。
四、设置不同颜色的下划线
如果希望下划线使用特定颜色,可以结合 xcolor 使用。
例如:
LaTeXusepackage{xcolor} usepackage[normalem]{ulem}
然后:
LaTeXextcolor{blue}{uline{蓝色下划线文本}}
也可以针对下划线本身设置颜色:
LaTeX{color{red}uline{红色下划线}}
完整示例:
LaTeXdocumentclass{article} usepackage{xcolor} usepackage[normalem]{ulem} egin{document} {color{red}uline{红色下划线文本}} {color{blue}uline{蓝色下划线文本}} end{document}
如果只希望修改下划线颜色,而不改变文字颜色,则可以使用更细致的自定义方案,而不是简单地将整个 uline 设置成某种颜色。
五、中文文本使用下划线时的注意事项
中文 LaTeX 文档通常需要使用适合中文排版的宏包或编译方式,例如 XeLaTeX 或 LuaLaTeX 配合 ctex。
一个比较常见的写法是:
LaTeXdocumentclass{ctexart} usepackage[normalem]{ulem} egin{document} uline{这是一段中文下划线文本。} end{document}
如果直接使用传统 LaTeX 编译方式处理中文,可能会遇到字体、编码或者宏包兼容问题。
对于现代中文文档,更推荐使用:
XeLaTeX
或者:
LuaLaTeX
进行编译。
六、为什么加载 ulem 后 emph 的效果发生变化
使用 ulem 时有一个容易被忽略的问题。
默认情况下:
LaTeXusepackage{ulem}
可能会改变 emph{} 的表现形式。
原本:
LaTeXemph{重点内容}
通常表示斜体强调,而加载 ulem 后,emph 的行为可能变成下划线。
如果希望保留 LaTeX 默认的斜体强调方式,可以写成:
LaTeXusepackage[normalem]{ulem}
因此,在正式论文、技术文档中,如果只是为了获得 uline,通常推荐:
LaTeXusepackage[normalem]{ulem}
这样可以避免意外改变整个文档中的强调样式。
七、underline 与 uline 的区别
两种方式看起来非常接近,但实际应用场景有所不同。
| 方法 | 是否需要宏包 | 长文本换行 | 适用场景 |
|---|---|---|---|
underline{} | 不需要 | 较弱 | 简单短文本 |
uline{} | ulem | 更好 | 正文下划线 |
ul{} | soul | 较好 | 文本强调与高亮 |
uuline{} | ulem | 更灵活 | 双下划线 |
uwave{} | ulem | 更灵活 | 波浪线强调 |
如果只是给几个字添加下划线,直接使用:
LaTeXunderline{文字}
已经足够。
如果是论文正文、长句或者需要自动换行的文本,则更适合:
LaTeXuline{文字}
八、如何自定义下划线样式
LaTeX 默认下划线的位置和粗细通常适合普通排版,但在一些设计要求较高的文档中,可能需要进一步调整。
例如,可以使用 ulem 提供的机制定义特殊效果,也可以结合 tikz、contour 等工具实现更加复杂的文本装饰。
对于普通技术文档,不建议为了简单下划线引入过多复杂宏包。过度定制不仅增加代码量,也可能带来字体兼容和编译冲突。
如果目标只是实现清晰、稳定的文本强调,ulem 已经能够满足大多数需求。
九、下划线与数学公式的区别
LaTeX 中的文本模式和数学模式并不是完全相同的。
例如:
LaTeX$a_1$
这里的 _ 并不是下划线,而是数学模式中的下标符号。
如果直接写:
LaTeX这是_text
通常会产生错误,因为 _ 在数学环境之外不能直接按照数学下标方式使用。
如果确实需要显示下划线字符,可以使用:
LaTeX_
例如:
LaTeX文件名为 example_test.tex
最终会显示:
文件名为 example_test.tex
这一点在技术文档中尤其重要,因为程序变量、文件名和数据库字段经常包含 _。
十、代码中的下划线不要直接使用文本下划线命令
如果需要展示程序代码,通常不建议:
LaTeXunderline{user_name}
因为这改变的是文本视觉样式,而不是单纯显示字符。
对于代码内容,更适合使用 verbatim、listings 或 minted 等代码排版工具。
例如:
LaTeXegin{verbatim} user_name = "Tom" end{verbatim}
这样可以保留代码中的 _,同时避免 LaTeX 对特殊字符进行解释。
十一、为链接添加下划线
技术文档中经常需要给 URL 或超链接添加下划线。使用 hyperref 时,通常不需要手动套 underline。
例如:
LaTeXusepackage{hyperref}
然后:
LaTeXurl{https://example.com}
或者:
LaTeXhref{https://example.com}{访问官方网站}
如果希望调整链接的视觉样式,可以配置 hyperref:
LaTeXusepackage[colorlinks=true]{hyperref}
这样可以通过颜色而不是传统下划线突出链接。
相比直接使用 underline,让 hyperref 管理超链接样式通常更加合理,因为它还负责 PDF 中的实际链接功能。
十二、论文中是否应该大量使用下划线
下划线属于比较强烈的视觉强调方式。论文、技术报告和正式文档中,如果大面积使用下划线,容易降低正文的阅读连续性。
对于普通强调,可以优先考虑:
LaTeXemph{重要内容}
或者使用粗体:
LaTeXextbf{重要内容}
需要模拟手稿批注、强调修改内容或突出特定字段时,再考虑:
LaTeXuline{重要内容}
这样能够让不同文本层级保持更加清晰的视觉关系。
十三、常见问题排查
1. uline 未定义
如果出现:
Undefined control sequence
并且代码中使用了:
LaTeXuline{文本}
通常是因为没有加载 ulem:
LaTeXusepackage[normalem]{ulem}
2. 中文下划线显示异常
可以优先检查:
-
是否使用 XeLaTeX 或 LuaLaTeX;
-
是否使用
ctex; -
当前字体是否正常支持中文;
-
ulem与其他中文排版宏包是否存在冲突。
3. 下划线无法正常换行
如果使用:
LaTeXunderline{很长的一段文本}
发现换行效果不理想,可以改成:
LaTeXuline{很长的一段文本}
通常更适合长文本。
4. emph 突然变成下划线
检查是否直接加载:
LaTeXusepackage{ulem}
如果希望保留传统的斜体强调方式,应改为:
LaTeXusepackage[normalem]{ulem}
5. _ 导致编译错误
正文中的下划线字符需要转义:
LaTeX_
例如:
LaTeXmy_variable
而不是:
LaTeXmy_variable
十四、实际项目中的选择建议
不同场景可以采用不同方案。
如果只需要给短文本添加简单下划线:
LaTeXunderline{关键词}
即可。
如果正文中存在较长的下划线文本:
LaTeXusepackage[normalem]{ulem} uline{需要强调的长文本}
更合适。
如果同时需要高亮和下划线:
LaTeXusepackage{soul} ul{下划线文本} hl{高亮文本}
可以考虑 soul。
如果处理的是文件名、变量名或程序代码中的 _,则不要使用 underline,而应该根据实际场景使用:
LaTeX_
或者代码环境。
如果处理的是网页链接,则建议交给 hyperref 管理。
综合来看,LaTeX 实现文本下划线并不存在唯一方案。underline 胜在简单直接,ulem 更适合正式文档中的灵活文本装饰,soul 则适用于需要更多文本强调功能的场景。根据文本长度、是否需要换行、是否涉及中文、代码或超链接等实际需求选择合适的方法,可以让 LaTeX 文档既保持良好的排版效果,也降低后续维护成本。