我的代码如下:
\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
),并使用pdflatex
、xelatex
或lualatex
。
这将导致只使用黑色板的 PostScript(或 PDF)文件。