我尝试使用该包突出显示文本。但是,如果我将其与 命令soul
结合使用,我会遇到问题,只有空格会突出显示,如 MWE 中所示:xcolor
selectcolormodel
\documentclass{standalone}
\usepackage{xcolor}
\selectcolormodel{rgb}
\usepackage{soul}
\begin{document}
Please, highlight \hl{this small text}.
\end{document}
输出:
答案1
编辑
问题已解决。使用 soul 2023-02-18 v3.0 不再需要修复。
旧答案
问题的根源在于和都xcolor
用作soul
临时\dimen@
寄存器。并soul
在无法确保其他命令与此维度协调的地方使用它。您可以重新定义内部灵魂命令,或者您可以使用\convertcolorsUfalse
以便xcolor
在使用时不再重新计算颜色:
\documentclass{article}
\usepackage{xcolor}
\selectcolormodel{rgb}
%\convertcolorsUfalse
\usepackage{soul}
\makeatletter
\newdimen\SOUL@dimen %new
\def\SOUL@ulunderline#1{{%
\setbox\z@\hbox{#1}%
%\dimen@=\wd\z@
\SOUL@dimen=\wd\z@ %new
\dimen@i=\SOUL@uloverlap
\advance\SOUL@dimen2\dimen@i %\dimen@ exchanged too
\rlap{%
\null
\kern-\dimen@i
%\SOUL@ulcolor{\SOUL@ulleaders\hskip\dimen@}%
\SOUL@ulcolor{\SOUL@ulleaders\hskip\SOUL@dimen}% new
}%
\unhcopy\z@
}}
\makeatother
\begin{document}
please, highlight \hl{this small text}.
\end{document}
如果您不想从中复制定义soul.sty
,可以使用以下方法来修补该命令:
\usepackage{soul}
\usepackage{etoolbox}
\makeatletter
\patchcmd{\SOUL@ulunderline}{\dimen@}{\SOUL@dimen}{}{}
\patchcmd{\SOUL@ulunderline}{\dimen@}{\SOUL@dimen}{}{}
\patchcmd{\SOUL@ulunderline}{\dimen@}{\SOUL@dimen}{}{}
\newdimen\SOUL@dimen
\makeatother
即使soul
软件包更新,这仍然有效(因为修补不会成功)。
答案2
我的解决方案就是避免使用soul
包装。soul
包装非常脆弱,在许多情况下可能会出现问题。我会使用更强大的ulem
包定义一个新\hl
命令:
\documentclass{article}
\usepackage{xcolor}
\usepackage[normalem]{ulem} % use normalem to protect \emph
\newcommand\hl{\bgroup\markoverwith
{\textcolor{yellow}{\rule[-.5ex]{2pt}{2.5ex}}}\ULon}
\begin{document}
This is a test \hl{for highlighting} text.
\end{document}