从 lua 访问(x)颜色定义

从 lua 访问(x)颜色定义

该包xcolor有一种提取颜色规范组件的方法:

\extractcolorspec{red!50}\spec
% \spec now has the value {rgb}{1,0.5,0.5}

有没有办法做同样的事情,但是从 lua 代码而不是 tex 开始?

答案1

我找到了以下解决方法,但希望找到更惯用的方法。

在 TeX 方面,我们需要一些分配(如果需要,可以在纯 lua 中完成):

\makeatletter

\newtoks \getcolor@runtoks
\newtoks \getcolor@spectoks
\newtoks \getcolor@valtoks

\getcolor@runtoks{%
    \expandafter\extractcolorspec
        \expandafter{\the\getcolor@spectoks}\getcolor@spec
    \expandafter\getcolor@valtoks
        \expandafter\@gobble\getcolor@spec}

\makeatother

然后下面的lua定义就可以了:

function getcolor(spec)
    tex.scantoks('getcolor@spectoks', 0, spec)
    tex.runtoks 'getcolor@runtoks'
    return tex.toks['getcolor@valtoks']
end

此返回值是一个逗号分隔的字符串,可能需要进一步处理。不过,这省去了在 lua 中重新实现所有计算的麻烦。

相关内容