我想删除一个包含不同文本颜色的段落。正如我在这里学到的:Strikeout - 何时哪个包裹?(ulem vs soul vs ...)命令\st
insoul
删除整个段落(尊重换行符),而\sout
inulem
则将所有内容放在一行上(非常不可取)。但是当我将颜色命令放入 中时\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}