为什么设置颜色对 \hrule 没有影响?

为什么设置颜色对 \hrule 没有影响?

当使用 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 文档中的规则不是红色的呢?

顺便问一下,有人能解密上面绘制规则的代码吗?电流变换用 和 来设置和恢复qQ那是什么电流变换无论如何?这里设置的“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

相关内容