Tikz - 用阴影在黑白图片中引入颜色

Tikz - 用阴影在黑白图片中引入颜色

我的 tikz 图表的颜色有问题。

我的出版商告诉我,这些阴影有残留颜色。不幸的是,这是正确的,但看不见。现在,我必须去除这些颜色痕迹,但我不知道该怎么做。

梅威瑟:

\documentclass[tikz]{standalone}
\usetikzlibrary{patterns} 

\definecolor{myblack}{cmyk}{0,0,0,1} 

\begin{document} 

\begin{tikzpicture} 

\draw[pattern = grid, pattern color = myblack] (0,0) rectangle ++(1,1); 

\end{tikzpicture} 

\end{document}

如果我使用 ghostscript 检查生成的 pdf:

gs -q -o - -sDEVICE=inkcov <filename>.pdf

我得到输出:

0.47000  0.47000  0.47000  0.59889 CMYK OK

我预计前三个数字正好为零。通过删除模式命令,值变为零。

为什么图案命令会引入残留颜色以及如何去除颜色?

谢谢!

====== 更新 ======

如果我添加自己的图案(我在 tex.stackexchange 上的某个地方找到了代码),则不会出现颜色问题(我不知道为什么……)。在“begin{document}”之前添加以下代码,并将图案名称更改为“my north east lines”。

\makeatletter
\pgfdeclarepatternformonly[\LineSpace]{my north east lines}{\pgfqpoint{-1pt}{-1pt}}{\pgfqpoint{\LineSpace}{\LineSpace}}{\pgfqpoint{\LineSpace}{\LineSpace}}%
{
    \pgfsetcolor{\tikz@pattern@color}
    \pgfsetlinewidth{0.4pt}
    \pgfpathmoveto{\pgfqpoint{0pt}{0pt}}
    \pgfpathlineto{\pgfqpoint{\LineSpace + 0.1pt}{\LineSpace + 0.1pt}}
    \pgfusepath{stroke}
}
\makeatother
\newdimen\LineSpace
\tikzset{
    line space/.code={\LineSpace=#1},
    line space=10pt
}

答案1

从评论中提取一些链接,以下解决方法似乎可以解决问题:我在这里记录它实际上作为任何其他人的“临时”解决方案,并注意这基本上与此处的问题中的代码相同:Tikz 图案和 cmyk 颜色模型

很可能在 pgf 的其他用途中,以下代码是不够的,需要做其他事情。

\documentclass[tikz]{standalone}
\usetikzlibrary{patterns}

\makeatletter
% from pgfsys-pdftex.def
\def\pgfsys@setpatternuncolored#1#2#3#4#5{%
  \pgfsysprotocol@literal{/pgfpcmyk cs #2 #3 #4 #5 /pgfpat#1\space scn}%
}

\def\pgf@sys@pgf@resource@list@colorspaces{} % Empties all reference
                                % to RGB

\pgfutil@addpdfresource@colorspaces{ /pgfpcmyk [/Pattern /DeviceCMYK] }

% from pgfcorepatterns.code.tex
\def\pgf@set@fillpattern#1#2{%
  \pgfutil@ifundefined{pgf@pattern@name@#1}{%
    \pgferror{Undefined pattern `#1'}}
  {%
    \csname pgf@pattern@instantiate@#1\endcsname%
    \expandafter\global\expandafter\let\csname pgf@pattern@instantiate@#1\endcsname=\relax%
    \pgf@ifpatternisinherentlycolored{#1}{%
      \pgfsys@setpatterncolored{\csname pgf@pattern@name@#1\endcsname}%
    }{%
      \pgfutil@colorlet{pgf@tempcolor}{#2}%
      \pgfutil@ifundefined{applycolormixins}{}{\applycolormixins{pgf@tempcolor}}%
      \pgfutil@extractcolorspec{pgf@tempcolor}{\pgf@tempcolor}%
      % Modified (hum)
      \expandafter\pgfutil@convertcolorspec\pgf@tempcolor{cmyk}{\pgf@cmykcolor}%
      \expandafter\pgf@set@fill@patternuncolored\pgf@cmykcolor\relax{#1}%
    }%
  }%
}

\def\pgf@set@fill@patternuncolored#1,#2,#3,#4\relax#5{%
  \pgfsys@setpatternuncolored{\csname pgf@pattern@name@#5\endcsname}{#1}{#2}{#3}{#4}%
}

\definecolor{myblack}{cmyk}{0,0,0,1} 

\begin{document} 

\begin{tikzpicture} 

\draw[pattern = grid, pattern color = myblack] (0,0) rectangle ++(1,1); 

\end{tikzpicture} 

\end{document}

调用 ghostscript,例如

gs -q -o - -sDEVICE=inkcov <filename>.pdf

对于这个pdf产生以下内容:

 0.00000  0.00000  0.00000  0.59889 CMYK OK

以上所有内容似乎表明该问题与 pgf、它对 rgb 的转换以及 PDF 继承的后续 cmyk 属性有关。

笔记:在我玩弄这个问题的过程中,如果我们修改问题中提供的代码中的\draw命令draw=none来抑制外面的黑框,即

\draw[pattern = grid, pattern color = myblack, draw=none] (0,0) rectangle ++(1,1);

那么 ghostscript 的输出如下。

 0.53333  0.53333  0.53333  0.53333 CMYK OK

这表明用于绘制网格线的“黑色”颜色已存储为cmyk(1,1,1,1),而不是cmyk(0,0,0,1)

相关内容