不同颜色的删除线出现在字母后面,而不是字母上面

不同颜色的删除线出现在字母后面,而不是字母上面

当使用包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}

相关内容