为什么真正的灰度渐变会转换为 cmyk/rgb 导致打印时可能出现色调?

为什么真正的灰度渐变会转换为 cmyk/rgb 导致打印时可能出现色调?

在专业印刷店打印论文时,我遇到了各种问题。首先,带有灰度图形的页面无法被识别(需要店里手动修复),并且还有色调,我认为这是由于颜色转换和打印机校准不完美造成的。我了解了命令,这是第一个问题的快速解决方案,并且我应该用而不是\selectcolormodel{gray}来定义灰色,才能真正解决这两个问题。到目前为止一切顺利。\definecolor{xxx}{gray}{0.5}\definecolor{xxx}{rgb}{0.5,0.5,0.5}

但还有一个我无法修复的情况:带有颜色分量,所以我不能使用\selectcolormodel{gray}灰度渐变发生同时。即使我用真正的灰度颜色定义阴影/褪色,它最终也会转换为 rgb/cmyk,因此打印中再次出现色调。这是错误吗?是设计使然吗?有修复方法吗?

非常感谢!

平均能量损失

\documentclass{standalone}

\usepackage{xcolor}
\usepackage{tikz}
\usetikzlibrary{shapes.arrows}

\definecolor{grau-}{gray}{0.50}
\definecolor{grau}{gray}{0.73}
\definecolor{grau+}{gray}{0.84}

%\selectcolormodel{gray}  % only fix for entire document

\begin{document}

\begin{tikzpicture}
%% mixed colors! %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\node[single arrow, left color=grau+, right color=grau-,
      minimum height = 7.5cm] at (0,0) {Hello World!};
\shadedraw[top  color=gray!30, bottom color=gray!30, middle color=white, thin, yshift =1cm, xshift =-3cm] 
    (0,-2) -- ++(0, 2) -- ++(-2, 0) -- ++(0, -2) -- cycle;

%% true grayscale! %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%\node[single arrow, fill=grau+,                          
%     minimum height = 7.5cm] at (0,0) {Hello World!};
%\draw[fill=gray, thin, yshift =1cm, xshift =-3cm] 
%    (0,-2) -- ++(0, 2) -- ++(-2, 0) -- ++(0, -2) -- cycle;
%\end{tikzpicture}

\end{document}

如何检查真正的灰度

为了检查输出的 pdf 是否仅包含灰度,我安装了 Ghostscript 并使用批处理文件(将 pdf 拖放到批处理文件上):

gswin64c.exe -o - -sDEVICE=inkcov "%~1"
pause

对于真正的灰度 pdf,输出仅在第 4 个位置有值:

Page 1
 0.00000  0.00000  0.00000  0.43900 CMYK OK

对于包含颜色的 pdf,输出显示所有位置的值:

Page 1
 0.41208  0.41208  0.40833  0.10622 CMYK OK

复杂示例

请看下面的图形。打印时,下方的“圆柱体”会带有色调,因为灰色阴影会转换为颜色混合。这正是我想要避免的。

在此处输入图片描述

答案1

阴影是 PDF 中的特殊对象。pgf 用于创建此类阴影的代码开头如下:

\def\pgf@setup@shading@model{%
  \pgfshadingmodelrgbtrue
  \pgfshadingmodelcmykfalse
  \pgfshadingmodelgrayfalse
  \XC@sdef\pgf@mod@test{\XC@tgt@mod{natural}}%
  \def\pgf@shading@device{/DeviceRGB}% <-------------- 1
  \def\pgf@shading@ps@device{setrgbcolor}%
  \def\pgf@shading@functional@range{0 1 0 1 0 1}%
  \def\pgf@shading@model{rgb}%
  \ifx\pgf@mod@test\XC@mod@cmyk
    \def\pgf@shading@device{/DeviceCMYK}%
    \def\pgf@shading@ps@device{setcmykcolor}%
    \def\pgf@shading@functional@range{0 1 0 1 0 1 0 1}%
    \def\pgf@shading@model{cmyk}%
    \pgfshadingmodelrgbfalse
    \pgfshadingmodelcmyktrue
  \fi
  \ifx\pgf@mod@test\XC@mod@gray %<----------------------2
    \def\pgf@shading@device{/DeviceGray}% %<------------3
    \def\pgf@shading@ps@device{setgray}%
    \def\pgf@shading@functional@range{0 1}%
    \def\pgf@shading@model{gray}%
    \pgfshadingmodelrgbfalse
    \pgfshadingmodelgraytrue
  \fi

标有 1 的行

\def\pgf@shading@device{/DeviceRGB}%

意味着阴影的默认颜色空间是 /DeviceRGB,所以是 rgb。

/DeviceGray线 2 + 3 表示如果您将 xcolor 的颜色模型本地或全局设置为灰色,则会得到阴影。

相关内容