我正在尝试在 CMYK 色彩空间中生成带有附加专色的 pdf,并确保专色背景上的黑色被“套印”,也就是说,如果我查看生成的 pdf 的分色,则背景颜色通道应该是纯色的,而不是在背景顶部打印字符的剪切。
我发现色彩空间软件包似乎具有此功能,但我似乎无法使其工作。我很可能忽略了一些显而易见的事情,但如果我编译:
\documentclass{article}
\usepackage{lipsum}
\usepackage[overprint]{colorspace}
\usepackage{tikz} %% (Almost) works when not loading TikZ
\definespotcolor{spot}{Spotcolor}{0,1,0,0}
\begin{document}
\pagecolor{spot!50}
\lipsum[1]
\overprintstate{1}
\lipsum[1]
\end{document}
我得到了一个在 Acrobat 中看起来像这样的 PDF 文件
隐藏黑色通道,我明白了
我本来至少会期望第二段不会有字符剪切。(取消勾选 Acrobat 中的“模拟套印”选项对任何事情都没有明显影响。)
有什么想法我可以让它工作吗?
更新
看起来这与 TikZ 有冲突。在不加载 TikZ 的情况下编译相同的文档,(几乎)一切都按我的预期运行。没有 TikZ,我得到了叠印(但我似乎无法关闭叠印\overprintstate{0}
——我会做更多的实验,也许这只能逐页进行)。
我的原始文档非常复杂,并且严重依赖 TikZ,因此理想情况下我希望它甚至可以与 TikZ 一起使用。
答案1
两个包tikz
和资源页面中colorspace
添加一个条目,从生成的 PDF 文件中:/ColorSpace
11 0 obj % Page object
<<
/Type /Page
/Resources 10 0 R
...
>>
endobj
10 0 obj % Page resources
<<
/ColorSpace 7 0 R
/Pattern 6 0 R
/ExtGState 5 0 R
/ColorSpace 9 0 R
/Font << /F8 13 0 R >>
/ProcSet [ /PDF /Text ]
>>
endobj
7 0 obj % /ColorSpace from package tikz
<< /pgfprgb [/Pattern /DeviceRGB] >>
endobj
9 0 obj % /ColorSpace from package colorspace
<< /&Spotcolor 8 0 R >>
endobj
问题出在页面资源的字典中。它包含/ColorSpace
两次键。但 PDF 规范不允许重复的键,PDF 阅读器必须忽略其中一个键。
正确的应该是/ColorSpace
具有合并颜色空间字典的一个键,例如:
10 0 obj % Page resources
<<
/ColorSpace 7 0 R
...
>>
endobj
7 0 obj % Color space dictionary
<<
/pgfprgb [/Pattern /DeviceRGB]
/&Spotcolor 8 0 R
>>
endobj
两个包彼此不认识。至少 TikZ 有一个宏可以添加新的颜色空间条目,来自pgfsys-pdftex.def
:
\pgfutil@addpdfresource@colorspaces{ /pgfprgb [/Pattern /DeviceRGB] }
\spc@pagecs
然后,可以更改宏以使用 TikZ 宏:
\documentclass{article}
\usepackage{lipsum}
\usepackage[overprint]{colorspace}
\usepackage{tikz}
\definespotcolor{spot}{Spotcolor}{0,1,0,0}
% Patch macro \scp@pagecs from package colorspace to use
% macro \pgfutil@addpdfresource@colorspaces from pgf/TikZ
% for adding the color space to the page resources.
\makeatletter
\def\spc@pagecs#1{%
\ifx\spc@currcs\@empty\else
\edef\tempa{%
\noexpand\spc@remcs\the\pdfpageresources
\noexpand\spc@remcs{\spc@currcs}}%
\tempa
\fi
\let\spc@tempd\@empty % list with known spaces
\@for\spc@tempa:=#1\do{%
\ifx\spc@tempa\@empty\else
\spc@dospaces\spc@tempa
\spc@unknown{spc@ir@\spc@tempa}{color (space) `\spc@tempa'}%
\edef\spc@tempd{,\spc@tempd,\spc@tempa,}%
\fi}%
\let\spc@tempb\@empty % elements in /ColorSpace
\let\spc@tempc\@empty % name for macro (\..&..&) with pdf ref
\def\spc@elt##1##2{%
\@expandtwoargs\in@{,##2,}{\spc@tempd}%
\ifin@
\protected@edef\spc@tempb{%
\spc@tempb\@nameuse{spc@ir@##2}\space}%
\protected@edef\spc@tempc{%
\spc@tempc\@nameuse{spc@ir@##2}&}%
\fi}%
\spc@csall % Uses \spc@elt
\@ifundefined{spc@cs@\spc@tempc}{%
% PATCH: the following two lines are deleted:
% \immediate\pdfobj{<< \spc@tempb>>}%
% \expandafter\xdef\csname spc@cs@\spc@tempc\endcsname{\the\pdflastobj}%
\expandafter\xdef\csname spc@cs@\spc@tempc\endcsname{not empty}% PATCH: added
}{}%
\expandafter\let\expandafter\spc@currcs\csname spc@cs@\spc@tempc\endcsname
\ifx\spc@currcs\@empty
\else
% PATCH: the following four lines are deleted:
% \edef\spc@tempa{\pdfpageresources{%
% \the\pdfpageresources\space/ColorSpace
% \@nameuse{spc@cs@\spc@tempc} 0 R%
% }}%
\pgfutil@addpdfresource@colorspaces{\spc@tempb}% PATCH: added
\fi
}
\makeatother
\begin{document}
\pagecolor{spot!50}
\lipsum[1]
\overprintstate{1}
\lipsum[1]
\end{document}