叠印专色

叠印专色

我正在尝试在 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}

相关内容