好的,我有命令
\newcommand{\hlc}[2][yellow]{{\sethlcolor{#1}\hl{#2}}}
在我的序言中(在包含 soul 和 xcolor 包之后),已经定义的颜色可以完美地工作。
\hlc[pink]{hello}
给我一个粉红色突出显示的 hello。但是,颜色组合对我来说没有任何输出。
\hlc[cyan!50]{hello}
仅输出
你好
沒有任何顏色。
我想要一个完全通用的命令(即让我用我想要的任何颜色组合突出显示)。有什么好方法可以做到这一点吗?我\setcolor
也不想重复使用该命令。我希望能够直接在命令中输入颜色。
答案1
该\sethlcolor
宏不理解x!y!z
等的颜色规范,它只能使用定义的命名颜色\definecolor
。
但是,xcolor
有一个技巧可以支持颜色定义:
\colorlet{foo}{x!y!z!}
定义并将规范转换为名为的颜色foo
(但是,这将覆盖名为的颜色的现有定义foo
。
基本上,它类似于宏\let\foo\foobar
语句。由于所有操作都发生在一个组中(根据 的定义\hlc
),因此新的颜色foo
在外部是未知的。
\documentclass{article}
\usepackage{xcolor}
\usepackage{soul}
\newcommand{\hlc}[2][yellow]{{%
\colorlet{foo}{#1}%
\sethlcolor{foo}\hl{#2}}%
}
\begin{document}
\hlc[pink]{hello}
\hlc[cyan!50]{hello}
\end{document}