使用预编译格式文件时颜色(CMYK)泄漏?

使用预编译格式文件时颜色(CMYK)泄漏?

EDIT3:注意 - 下面显然演示了 Ghostscript 9.02tiffsep设备的一个错误(参见评论);使用 Ghostscript 9.16 对其进行了测试,并没有显示此问题(CMYK 分离正常,仅黑色板,两种情况)。但另请参阅接受的答案,这也修复了gs9.02 中的问题。不过,买家需谨慎...


考虑这个 MWE,test.tex(这是在 Texlive 2014 上,已更新为冻结):

\documentclass[10pt,twoside,openright]{book}
\pdfcompresslevel=0 % edit: added

\usepackage[fixpdftex,cmyk,svgnames]{xcolor}
\makeatletter
\def\typecmyk#1{%
\typeout{XC@mod@cmyk #1: \XC@mod@cmyk} % is 'cmyk' when active
} \typecmyk{A}
\makeatother

\usepackage[
  paperwidth=15cm,
  paperheight=20cm,
  outer=2cm,
  inner=2cm,
  top=2cm,
  bottom=2cm
  ]{geometry}
\usepackage[a4,center]{crop}
\crop[cam,info] % info is default, noinfo has to be set; use [off] to turn off all marks

\begin{document}
\frontmatter
\pagestyle{empty} %disable headers and footers
\pagenumbering{roman} %use roman page numbering in the frontmatter

\section{Another one}

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

\end{document}

如果我们像往常一样编译它,并将输出重命名为test1.pdf

pdflatex test.tex
mv test.pdf test1.pdf

...然后我们可以使用以下方法输出 CMYK 分色ghostscript

gs -q -sDEVICE=tiffsep -dNOPAUSE -dBATCH -dSAFER -r72x72 \
 -sOutputFile=test1.tif -dFirstPage=1 -dLastPage=1 test1.pdf
montage \
 test1.Cyan.tif test1.Magenta.tif test1.Yellow.tif test1.Black.tif \
 -border 1 -bordercolor lime -geometry +2+2 -tile x1 \
 test1_cmyk.png

... 使用 ImageMagickmontage我们可以将所有 CMYK 分色放在一张图片上,结果如下(单击可查看高分辨率):

测试1.png

文本应该是黑色的 - 确实,正如预期的那样,只有 K 板上有“墨水”。所以在这种情况下一切都很好。

但是现在,让我们尝试用“预编译”格式的文件编译相同的例子;并检索分离:

pdflatex -ini -jobname="test" "&pdflatex" mylatexformat.ltx "test.tex" 
pdflatex --file-line-error --synctex=1 "&test" test.tex
mv test.pdf test2.pdf
gs -q -sDEVICE=tiffsep -dNOPAUSE -dBATCH -dSAFER -r72x72 \
 -sOutputFile=test2.tif -dFirstPage=1 -dLastPage=1 test2.pdf
montage \
 test2.Cyan.tif test2.Magenta.tif test2.Yellow.tif test2.Black.tif \
 -border 1 -bordercolor lime -geometry +2+2 -tile x1 \
 test2_cmyk.png

...但是现在,分离是这样的:

测试2.png

... 就好像只针对文本颜色,黑色就像是在 RGB 中定义的一样 - 然后以最简单/“最愚蠢”的形式转换为 CMYK:开启颜色全部印版(而不是只在黑色印版上),这会让我在印刷店花费更多。

奇怪的是 - 我们可以使用pdftkEDIT 解压缩生成的 PDF:现在\pdfcompresslevel=0无需使用 解压缩pdftk,我们可以直接观察 test1.pdf/test2.pdf,因为它们未经压缩...... EDIT2:现在这些文件已上传到这里:

...虽然不幸的是这些无法与进行比较meld,但less -L test1.pdf可以检查它们,对于文本部分,PDF 输出有些不同:

% test1.pdf
Q
0 g 0 G
0 0 0 1 k 0 0 0 1 K
0 g 0 G
0 0 0 1 k 0 0 0 1 K
BT
/F16 14.3462 Tf 141.732 637.754 Td [(0.1)-1125(Another)-375(one)]TJ/F8 9.9626 Tf
 0 -21.821 Td [(Lorem)-315(ipsum)-315(dolor)-316(sit)-315(amet,)-319(consectetur
)-315(adipiscing)-315(elit,)-319(sed)-315(do)-315(eiusmo)-28(d)]TJ 0 -11.955 Td 
...
rum.)]TJ
0 0 0 1 k 0 0 0 1 K
0 0 0 1 k 0 0 0 1 K
ET

% test2.pdf
Q
0 g 0 G
0 0 0 1 k 0 0 0 1 K
0 g 0 G
BT
/F28 14.3462 Tf 141.732 637.754 Td [(0.1)-1125(Another)-375(one)]TJ/F8 9.9626 Tf
 0 -21.821 Td [(Lorem)-315(ipsum)-315(dolor)-316(sit)-315(amet,)-319(consectetur
)-315(adipiscing)-315(elit,)-319(sed)-315(do)-315(eiusmo)-28(d)]TJ 0 -11.955 Td 
...
rum.)]TJ
0 0 0 1 k 0 0 0 1 K
0 g 0 G
ET

...但奇怪的是,似乎总是使用 CMYK 颜色模型(kK)并且没有 RGB 的迹象(即rgRG) - 所以我完全困惑,这种黑色泄漏到其他组件是从哪里来的?!

所以我的问题是 - 为什么使用预编译格式文件时会发生这种“颜色泄漏”;以及如何使用预编译格式文件获得正确的结果?

编辑:无耻的插件:我发现这要感谢我的补丁来pdfshuffler显示 CMYK 分色,给出于Linux GUI 可以快速浏览多页 PDF 的 CMYK 分色吗?

答案1

在这两种情况下,0 g 0 G都可以在 PDF 文件中看到。这来自尚未重新分配给 CMYK 值的 pdfTeX 的 PDF 颜色堆栈。这可以通过以下方式完成:

\makeatletter
\newcommand*{\InitColorStack}{%
  \chardef\main@pdfcolorstack=\pdfcolorstackinit{0 0 0 1 k 0 0 0 1 K}\relax
}
\InitColorStack
\everyjob\expandafter{\the\everyjob\InitColorStack}
\makeatother

pdfTeX 颜色堆栈的状态为不是保存在格式文件中,因此它们也需要与自己的格式文件一起设置。这是通过设置令牌寄存器来完成的\everyjob

现在,两个 PDF 文件中的灰度模型中的颜色设置0 g 0 G都消失了,分离应该会更成功。

相关内容