当使用 pdftex 处理以下示例时:
\pdfcompresslevel=0
\pdfobjcompresslevel=0
\nopagenumbers
\pdfliteral direct {1 0 0 rg}
\line{\leaders\hrule\hfill}
\bye
我们得到一个包含以下内容的 pdf 文件:
stream
1 0 0 rg
q
1 0 0 1 72 710.237 cm
[]0 d 0 J 0.398 w 0 0 m 468 0 l S
Q
endstream
我们可以看到,颜色设置到了正确的位置。但是为什么 pdf 文档中的规则不是红色的呢?
顺便问一下,有人能解密上面绘制规则的代码吗?电流变换用 和 来设置和恢复q
?Q
那是什么电流变换无论如何?这里设置的“cm”变换矩阵的作用是什么?
答案1
PDF 知道描边和填充的颜色。示例设置了填充颜色,但线条是描边的。使用描边颜色运算符 ( RG
) 代替填充颜色运算符 ( rg
) 可修复此示例:
\pdfcompresslevel=0
\pdfobjcompresslevel=0
\nopagenumbers
\pdfliteral direct {1 0 0 RG}
\line{\leaders\hrule\hfill}
\bye
但是,pdfTeX 为规则选择哪种操作取决于线条的粗细。例如,填充一个大正方形,需要填充颜色操作符:
\pdfcompresslevel=0
\pdfobjcompresslevel=0
\nopagenumbers
\pdfliteral direct {1 0 0 rg}
\line{\vrule width 10mm height 10mm}
\bye
出于这个原因,LaTeX 设置两个都颜色运算符涵盖两种情况:
1 0 0 rg 1 0 0 RG
问题中的流数据的“解密”:
stream
1 0 0 rg % set red as *fill* color in model RGB
q % save
1 0 0 1 72 710.237 cm % move origin to (72 bp, 710.237 bp)
[]0 d % set dash pattern (empty dash pattern)
0 J % set line join type (solid)
0.398 w % set line width to 0.398 bp = 0.4 pt
0 0 m % move to (0 bp, 0 bp)
468 0 l % line to (468 bp, 0 bp)
S % stroke
Q % restore
endstream