{soul} 和 {xcolor} 包不起作用

{soul} 和 {xcolor} 包不起作用

我想删除一个包含不同文本颜色的段落。正如我在这里学到的:Strikeout - 何时哪个包裹?(ulem vs soul vs ...)命令\stinsoul删除整个段落(尊重换行符),而\soutinulem则将所有内容放在一行上(非常不可取)。但是当我将颜色命令放入 中时\st,它会告诉我Argument of \textcolor has an extra }.Package xcolor Error: Undefined color {gray}.

\documentclass{article}
\usepackage[normalem]{ulem}
\usepackage{soul}
\usepackage{xcolor}
\newcommand{\clight}[1]{\textcolor{white!70!black}{#1}}
\definecolor{alert}{RGB}{255, 10, 61} % 1/20/22
\newcommand{\calert}[1]{\textcolor{alert}{#1}}


\begin{document}

\clight{blah blah blah \calert{Warning!} blah blah blah}.

\sout{\clight{blah blah blah}}

\st{blah blah blah}.

%\st{\textcolor{gray}{blah blah}}
%\st{\clight{blah blah}} % gives `Argument of \clight has an extra }.`

\end{document}

这些软件包似乎存在已知问题:xcolor、ulem 和 no-break 空格之间的交互soul:使用 \selectcolormodel 时 xcolor 突出显示出现问题灵魂包的删除命令中无法识别 acro 首字母缩略词.非常令人失望的是,没有开发出更好的解决方案。

PS 使用\sout,看起来水平线是在文本后面,而不是在文本上面......非常奇怪

答案1

灵魂很脆弱,不喜欢参数中的命令。请参阅文档了解一些背景信息。对于你的情况,如果你添加额外的括号,它就会起作用逐字逐句地着色:

\documentclass{article}
\usepackage{soul}
\usepackage{xcolor}
\newcommand{\clight}[1]{\textcolor{white!70!black}{#1}}
\definecolor{alert}{RGB}{255, 10, 61} % 1/20/22
\newcommand{\calert}[1]{\textcolor{alert}{#1}}

\begin{document}

\st{blah blah blah}.

\st{{\textcolor{gray}{blah}} {\textcolor{gray}{blah}}}

\st{{\clight{blah}} {\clight{blah}}} 

\end{document}

一个更加强大的解决方案是使用 lualatex 和lua-ul包:

\documentclass{article}
\usepackage{luacolor}
\usepackage[soul]{lua-ul}
\usepackage{xcolor}
\newcommand{\clight}[1]{\textcolor{white!70!black}{#1}}
\definecolor{alert}{RGB}{255, 10, 61} % 1/20/22
\newcommand{\calert}[1]{\textcolor{alert}{#1}}

\begin{document}

\st{blah blah blah}.

\st{\textcolor{gray}{blah blah}}
\st{\clight{blah blah}} %

\end{document}

在此处输入图片描述

相关内容