如何使用 \pdfcolorstack?

如何使用 \pdfcolorstack?

考虑以下代码:

\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初始化中缺少了什么。但后者对于主颜色堆栈来说不是必需的。来自NEWSpdfTeX:

  • \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 用来重置颜色的方法。我想知道这在哪里有记录...

相关内容