我正在努力应用回答我关于颜色和连字符的问题并且遇到了一个问题,当颜色变化应该发生在自由裁量权中时。归结为 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
在 内发生颜色变化?\discretionary
luacolor
答案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}
结果:
注意:盒子操作可能会有副作用,请仔细检查结果是否存在任何不良问题。