为什么你的LaTeX删除线命令\sout{}总报错?一文搞懂soul和ulem包的区别与使用场景
在撰写学术论文、技术报告或者准备一份需要突出修订痕迹的文档时,删除线是一个看似简单却至关重要的排版需求。许多LaTeX用户,尤其是从Word等所见即所得编辑器转过来的朋友,都曾信心满满地敲下\sout{待删除文本},结果却迎面撞上一个冷冰冰的“Undefined control sequence”错误。那一刻的困惑,就像精心准备的演讲突然忘词一样令人尴尬。这个问题之所以普遍,根源在于LaTeX生态中存在着不止一种实现删除线功能的方式,而soul和ulem这两个包正是其中的主角。它们各有脾性,在不同的文档环境中表现迥异,盲目使用其中一个,就很容易掉进包冲突或命令覆盖的陷阱。本文将带你深入这两个包的内核,不仅告诉你如何解决眼前的报错,更让你理解背后的“为什么”,从而在任何复杂的文档场景下,都能游刃有余地驾驭删除线功能。
1. 初识删除线:从需求到LaTeX的实现困境
在深入技术细节之前,我们不妨先思考一下,为什么在LaTeX里画一条删除线会变得如此“复杂”?在Microsoft Word里,这只是一个点击按钮的动作。LaTeX的设计哲学截然不同,它本质上是一个强大的排版系统,而非一个简单的编辑器。它的核心目标是将内容与格式分离,通过一系列严谨的指令(命令)和宏包来精确控制最终版面的每一个细节。删除线,作为一种装饰性文本格式,其实现需要考虑字体编码、断行处理、数学模式兼容性、与其他命令(如加粗、斜体)的嵌套等一系列复杂问题。
soul和ulem这两个宏包,就是为解决这些问题而诞生的不同解决方案。你可以把它们想象成两个不同品牌的“文本装饰工具套装”。soul工具套装功能专一,设计精巧,专注于文本装饰(高亮、删除线、字母间距调整等),但在某些特定环境下(比如与某些字体包或复杂命令共用时)可能会“卡壳”。而ulem工具套装历史更悠久,功能更庞杂(除了删除线,还实现了多种下划线、波浪线等),兼容性通常更好,但它的工作方式可能会“覆盖”掉文档中其他一些你正在使用的工具(比如\emph强调命令)的行为。
当你在导言区简单地写下\usepackage{soul},然后使用\sout{}却得到报错时,这通常意味着以下三种情况之一:
- 宏包未安装:你的LaTeX发行版(如TeX Live, MiKTeX)根本没有安装
soul这个工具套装。 - 命令被重定义:文档中后加载的某个其他宏包(很可能就是
ulem)重新定义了\sout命令,导致soul包定义的原始命令失效。 - 包冲突:
soul包与文档中已加载的某些宏包存在根本性的兼容性问题,导致其根本无法正常初始化。
理解这些底层原因,是摆脱盲目尝试、精准解决问题的第一步。接下来,我们将分别剖析这两个核心工具套装。
2. 深入soul包:轻量灵活的文本装饰专家
soul包的名字来源于“letterspacing”(字母间距)和“underlining”(下划线),但其功能早已超越字面意思。它提供了一套优雅的机制来处理文本的“装饰性”属性,其核心命令包括:
\so或\letterspacing: 调整字母间距。\caps或\capitalize: 将单词转换为小型大写字母样式。\hl: 高亮文本(需要配合color或xcolor包)。


被折叠的 条评论
为什么被折叠?



