当使用包ulem
的删除线功能(宏\sout
)并在我的文本中使用颜色时,会出现删除线在后面字符串:
\documentclass{article} % I also often work with the memoir package (in case this matters for the range of possible fixes)
\usepackage[normalem]{ulem} % option normalem not needed for example but often loaded by me (mentioned for the unlikely case it matters for the fix)
\usepackage{color}
\begin{document}
Hello \textcolor{red}{\sout{\textcolor{black}{Welt }}}World!
\end{document}
(如果我指定不同的颜色组合,例如文本为绿色或洋红色,效果仍然存在 - 我只是不希望编译的示例看起来丑陋或不切实际。)
如何才能使删除线的颜色与文本颜色不同在之上文本?
答案1
这是使用该包的解决方案SOUL
。如果先前的经验属实,那么换行符等会受到尊重,尽管间距可能会发生很小的变化。我尝试过,ulem
但可能是因为我不熟悉该包,我无法找到一个适用于多个单词的解决方案。我不确定该包在冲突等方面 SOUL
的兼容性是否更差。ulem
我认为这两个软件包都是先画线,然后放置文本,这就是线条在背景中的原因。可能还有其他方法可以解决这个问题,但我的“灵魂”解决方案是排版零宽度文本(使用\rlap
),然后在其上方删除文本的幻影版本。该命令有两个可选参数:第一个设置删除线的颜色(默认为红色),第二个设置文本的颜色。
\documentclass{article}
\usepackage{xparse}
\usepackage{soul}
\usepackage{xcolor}
\makeatletter
\NewDocumentCommand{\sotwo}{O{red}O{black}+m}
{%
\begingroup
\setulcolor{#1}%
\setul{-.5ex}{.4pt}%
\def\SOUL@uleverysyllable{%
\rlap{%
\color{#2}\the\SOUL@syllable
\SOUL@setkern\SOUL@charkern}%
\SOUL@ulunderline{%
\phantom{\the\SOUL@syllable}}%
}%
\ul{#3}%
\endgroup
}
\makeatother
\begin{document}
Hello \sotwo{Welt} World!
\sotwo[green]{Here is a long sentence that will span across a number of lines to force a linebreak}
\sotwo[green][blue]{Here is a long sentence that will span across a number of lines to force a linebreak}
Here is a long sentence that will span across a number of lines to force a linebreak
\end{document}