colorspace.sty 与 \colorlet{current}{.}

colorspace.sty 与 \colorlet{current}{.}

当我尝试在专色(用 定义)处于活动状态时捕获当前颜色时,colorspace.sty出现错误

! Undefined control sequence.
\color@&spot ...->\c@lor@arg {#2}\edef #1{\spc@ir 
                                                  \space cs \spc@ir \space C...
l.23 \colorlet{current}{.}

梅威瑟:

\documentclass{article}

\usepackage{xcolor,colorspace}
\definespotcolor{spot}{SPOT COLOR}{0,1,0,0}
\definecolor{cmyk}{cmyk}{1,0,0,0}

\begin{document}
normal color

\color{cmyk}
cmyk color

\colorlet{current}{.}
\color{current}
current color

\color{spot}
spot color

\color{.}
period

\colorlet{current}{.}
\color{current}
current color

\colorlet{current}{.!50}
\color{current}
current color
\end{document}

我猜想当激活专色时,后台会发生一些变化,从而破坏了.当前颜色(句点)的使用\colorlet\color{.}虽然可以正常工作,甚至\colorlet{current}{.!n}对于n∈ {0, ..., 99} 也可以正常工作,但这.!100不是解决方法 :-(

据我所知,PDF 输出是正确的,但我不想忽略错误消息……

是否有可能解决这个问题,或者更好地修复它?

答案1

错误提示未定义\spc@ir。下面的代码似乎定义了它,但我不能完全确定它是否获得了正确的值(它似乎确实如此,但 Javier 也应该仔细研究一下)。输出中的 !50 与之无关,它也只发生在 xcolor 中。

\documentclass{article}

\usepackage{xcolor}
\usepackage{colorspace}

\makeatletter
{
 \catcode`\&=11
 \gdef\color@&spot#1#2{%
  \ifdefined\spc@ir \else \spc@getir{\string\color@.}\fi
  \c@lor@arg{#2}%
  \edef#1{\spc@ir\space cs \spc@ir\space CS #2 sc #2 SC}}
}

\makeatother

\definespotcolor{spot}{SPOT COLOR}{0,1,0,0}
\definecolor{cmyk}{cmyk}{1,0,0,0}

\begin{document}
normal color

\color{cmyk}
cmyk color

\colorlet{current}{.}
\color{current}
current color

\colorlet{current50}{.!50}
\color{current50}
current color

\color{spot}
spot color
\colorlet{spotcurrent}{.}

\color{.}
period

\colorlet{current}{.}

\color{current}
current color

\colorlet{current}{.!50}
\color{current}
current color

\end{document}

在此处输入图片描述

相关内容