更新

更新

我的代码如下:

\documentclass[]{book}
\usepackage[]{tikz}
\usetikzlibrary{positioning}
\input colordvi
\input cmyk-hax
\makeatletter
\definecolor{testcolor}{cmyk}{0,0,0,0.1}
\pgfutil@colorlet{tikz@ball}{testcolor}
\pgfdeclareradialshading[testcolor]{ball}{\pgfqpoint{-10bp}{10bp}}{%
 color(0bp)=(testcolor!15!white);
 color(9bp)=(testcolor!75!white);
 color(18bp)=(testcolor!70!black);
 color(25bp)=(testcolor!50!black);
 color(50bp)=(black)}
\makeatother

\begin{document}

\hspace*{-1pc}\vbox{
\begin{centering}
\newlength\radius
\pgfmathsetlength{\radius}{0.25cm}
\newcommand\drawballs[2][]{%
    \foreach \y [evaluate=\y as \yy using #2+1-\y] in {1,...,#2} {%
        \foreach \x in {1,...,\yy} {%
            \shade[shading=ball,ball color=white,#1]
                ({(2*\x-2+\y)*\radius},{sqrt(3)*\y*\radius}) circle (\radius);
        };
    }%
}


\begin{tikzpicture}
%    \drawballs{1}
%    \drawballs[xshift=1.5cm]{2}
%    \drawballs[xshift=4cm]{3}
%    \drawballs[xshift=7cm]{4}
%    \drawballs[xshift=10cm]{5}
    \drawballs[xshift=2cm]{1}
    \drawballs[xshift=3.5cm]{2}
    \drawballs[xshift=5.5cm]{3}
    \drawballs[xshift=8cm]{4}
    \drawballs[xshift=11cm]{5}
\end{tikzpicture}
\end{centering}
}


\end{document}

此代码运行良好,输出成功生成。但阴影部分显示CMYK组合的混合颜色,而我要求阴影变化应仅显示B/W。请建议如何实现这一点?

答案1

更新

tikz从 3.1.3 版本开始支持灰度和 CMYK 阴影。因此,只需在加载 之前使用\usepackage[gray]{xcolor}(或) 。\usepackage[cmyk]{xcolor}tikz


根本问题是pgf阴影不支持 CMYK。因此,即使您testcolor以 CMYK 定义颜色,它也会在您的球体中的径向阴影中转换为 RGB。

然后,当您尝试输出分色时,您会发现 RGB 灰色分离到所有四个板上,而不仅仅是黑色板上。

pgf-cmykshadings可以使用支持 CMYK(和灰度)阴影的新包来解决此问题。

将 MWE 的开始更改为:

\documentclass{book}
\usepackage[gray]{xcolor}% (could also use \usepackage[cmyk]{xcolor})
\usepackage{cmyk-shadings}
\usepackage{tikz}
\usetikzlibrary{positioning}
\input colordvi
\input cmyk-hax

pgf-cmykshadings将适用于所有 LaTeX 引擎,因此如果您不需要cmyk-hax,您可以删除它(和colordiv),并使用pdflatexxelatexlualatex

这将导致只使用黑色板的 PostScript(或 PDF)文件。

相关内容