![从 lua 访问(x)颜色定义](https://linux22.com/image/465874/%E4%BB%8E%20lua%20%E8%AE%BF%E9%97%AE%EF%BC%88x%EF%BC%89%E9%A2%9C%E8%89%B2%E5%AE%9A%E4%B9%89.png)
该包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 中重新实现所有计算的麻烦。