考虑以下代码:
\chardef\Color=\pdfcolorstackinit page direct{0 g}
\pdfcolorstack \Color push {1 0 0 rg 1 0 0 RG}
red
\pdfcolorstack \Color pop {}
black
\hrule height 1pt width 50pt
\bye
我尝试使用颜色堆栈用红色写“红色”,然后切换回之前的颜色(黑色),再用该颜色写“黑色”一词(效果很好)。但为什么\hrule
颜色切换仍然会受到影响?
显然我不知道如何使用\pdfcolorstack
,但预期的语义是什么?我想保留,1 0 0 RG
因为我还想设置描边操作的颜色。
答案1
您已经发现0 G
初始化中缺少了什么。但后者对于主颜色堆栈来说不是必需的。来自NEWS
pdfTeX:
- \pdfcolorstackinit
堆栈由 \pdfcolorstackinit 初始化。它扩展为新堆栈的编号。常见情况是,传统颜色堆栈已初始化为第一个堆栈:\pdfcolorstackinit page direct {0 g 0 G} 关键字“page”表示此堆栈基于页面。在新页面开始时,当前堆栈值会自动设置。
所有你需要的是:
\chardef\Color=0 %
color
顺便说一句,带有驱动程序的LaTeX包pdftex.def
也可以通过以下方式与纯 TeX 一起使用miniltx.tex
:
\input miniltx
\makeatletter
\input color.sty
\resetatcatcode
\textcolor{red}{red} \ black
\hrule height 1pt width 50pt
\bye
答案2
尷尬的:
似乎有两个字符可以解决这个问题(0 G
在\pdfcolorstackinit
):
\chardef\Color=\pdfcolorstackinit page direct{0 g 0 G}
\pdfcolorstack \Color push {1 0 0 rg 1 0 0 RG}
red
\pdfcolorstack \Color pop {}
black
\hrule height 1pt width 50pt
\bye
这似乎是 PDFTeX 用来重置颜色的方法。我想知道这在哪里有记录...