如何使用 luacolor 更改“\discretionary”内的颜色?

如何使用 luacolor 更改“\discretionary”内的颜色?

我正在努力应用回答我关于颜色和连字符的问题并且遇到了一个问题,当颜色变化应该发生在自由裁量权中时。归结为 MWE,它看起来像这样:

\documentclass[12pt]{article} % use larger type; default would be 10pt

\usepackage{xcolor}
\usepackage{luacolor}
\definecolor{grebackgroundcolor}{RGB}{255,200,0}
\listfiles

\def\foobar#1#2{%
    \hbox to 0pt{%
        {\color{grebackgroundcolor}#2}%
    }%
    #1%
    \relax %
}%


\begin{document}

\noindent\foobar{test}{\rule[-2pt]{36pt}{12pt}}

\noindent\discretionary{}{}{\foobar{test}{\rule[-2pt]{36pt}{12pt}}}

\end{document}

如果您编译 MWE,您将看到 的第一个实例\foobar运行良好,但在第二个实例中,规则最终变为黑色而不是橙色。删除 的加载,两个实例都可以正常工作。如何更改颜色,以便在加载时luacolor在 内发生颜色变化?\discretionaryluacolor

答案1

luacolor包将宏挂接\luacolorProcessBox到发货箱,以便应用 lua 颜色格式。显然,处理\discretionary以无法从发货箱处理的方式格式化内容\luacolorProcessBox。一种可能的解决方案是将宏直接应用于 内部的内容\discretionary

为此,必须将内容存储在一个框中。该框可由宏处理,然后插入到文档中。

梅威瑟:

\documentclass[12pt]{article} % use larger type; default would be 10pt

\usepackage{xcolor}
\usepackage{luacolor}
\definecolor{grebackgroundcolor}{RGB}{255,200,0}

\newsavebox{\temp}
\def\foobar#1#2{%
    \sbox{\temp}{\hbox to 0pt{%
        {\color{grebackgroundcolor}#2}%
    }%
    #1%
    \relax}%
    \luacolorProcessBox\temp%
    \usebox{\temp}%
}%

\begin{document}

\noindent\foobar{test}{\rule[-2pt]{36pt}{12pt}}

\noindent\discretionary{}{}{\foobar{test}{\rule[-2pt]{36pt}{12pt}}}

\end{document}

结果:

在此处输入图片描述

注意:盒子操作可能会有副作用,请仔细检查结果是否存在任何不良问题。

相关内容