当我使用 post_linebreak_filter 更改 hlist 的颜色时,一些方程式只有部分颜色!这是示例的图像和完整代码。如下所示,水平分割线仍然是黑色的……
\documentclass[notitlepage,letterpaper]{article}
%\usepackage{lua-visual-debug}
\usepackage[absolute]{textpos}
\usepackage[letterpaper,left=2in,right=2in,top=1in,bottom=0in]{geometry}
\usepackage[expansion=alltext,shrink=20,stretch=20]{microtype}
\usepackage{fontspec}
\usepackage{unicode-math}
\setmainfont{TeX Gyre Pagella}
\setmathfont{TeX Gyre Pagella Math}
\usepackage{blindtext}
\directlua{
function my_post_lb_filter(head,groupcode)
local HLIST = node.id("hlist")
local WHAT = node.id("whatsit")
local COL = node.subtype("pdf_colorstack")
local color_push = node.new(WHAT,COL)
local color_pop = node.new(WHAT,COL)
color_push.stack = 0
color_pop.stack = 0
color_push.data = "1 0 0 rg"
color_push.command = 1
color_pop.command = 2
for n in node.traverse(head) do % For every subnode within node head
if n.id==HLIST then % If its a line of text
n.head = node.insert_before(n.list, n.head, node.copy(color_push))
n.head = node.insert_after(n.list, node.tail(n.head), node.copy(color_pop))
end
end
return head
end
luatexbase.add_to_callback('post_linebreak_filter', my_post_lb_filter, 'Play with luatex node library')
}
\begin{document}
\blindtext[1]\vspace*{\baselineskip}
$\displaystyle\int_a^b x^2\;\mathrm{d}x= \tfrac{1}{3} x^3 \Big|_a^b$\vspace*{\baselineskip}
\blindtext[1]\vspace*{\baselineskip}
$a_0+\cfrac{1}{a_1+\cfrac{1}{a_2+\cfrac{1}{a_3+\cdots}}}$\vspace*{\baselineskip}
\end{document}
答案1
这是一个典型的问题,最小例子可以帮助您缩小问题范围:
\documentclass{article}
\begin{document}
\showoutput
\pdfextension colorstack 0 push {0.5 0.2 0.3 rg}
$\frac ab$
\end{document}
这表明它与 Lua 代码完全无关。这引出了一个重要的问题:它在0.5 0.2 0.3 rg
做什么?它是一个 PDF 文字,所以我们必须在 PDF 规范中查找它。PDF 规范 v1.7,附录 A(操作符摘要)中提到rg
:
rg
setrgbcolor
“设置 RGB 颜色非抚摸运营”
默认情况下,绘制字符是非描边操作(字符轮廓是填充的,而不是描边),但可以通过描边操作绘制(如果描边不是太粗)。那么我们如何更改描边操作的颜色呢?
RG
setrgbcolor
“为描边操作设置 RGB 颜色”
为了确保颜色一致,在 LaTeX 中通常将描边颜色和非描边颜色一起设置:
\documentclass{article}
\begin{document}
\showoutput
\pdfextension colorstack 0 push {0.5 0.2 0.3 rg 0.5 0.2 0.3 RG}
$\frac ab$
\end{document}