![更新](https://linux22.com/image/276783/%E6%9B%B4%E6%96%B0.png)
baposter
我正在用制作海报tikz
,在某个时候我意识到一些应该相同的颜色却不相同。事实证明,tikz
只要涉及阴影,它就会诉诸 RGB 颜色空间,而我正在用 CMYK 制作海报(我打算打印它...)(这也是该类的默认设置baposter
)。
现在我的问题是:如何强制tikz
在所有地方使用 CMYK?
这是一个演示该问题的最小示例:
\documentclass{minimal}
%%% uncomment to use CMYK
\usepackage[cmyk]{xcolor}
\definecolor{mygreen}{cmyk}{1,0,0.57,0.42}
%%% uncomment to use RGB
% \usepackage[rgb]{xcolor}
% \definecolor{mygreen}{HTML}{009440}
\usepackage{tikz}
\pdfcompresslevel=0
\begin{document}
\color{mygreen}{MY TEXT}
\tikz
\shade [left color=mygreen,right color=mygreen]
(1,1) rectangle (2,2);
%
\tikz
\fill [mygreen]
(1,1) rectangle (2,2);
\end{document}
两个框应该具有相同的颜色,但实际上并非如此。阴影框应该与实心框和文本具有相同的颜色。
(注意:这个问题与类别关系不大baposter
,但是,baposter
使用tikz
底层问题会导致框的框架和框标题中的阴影具有不同的颜色。)
答案1
不幸的是,请求的功能不受支持。
一般来说,你的方法很好用:如果你写
\usepackage[cmyk]{xcolor}
所有颜色定义都会产生 cmyk 颜色。但阴影比较特殊:它们不是基于 xcolor 的驱动程序,而是基于 pgf 的驱动程序。并且 pgf 的阴影驱动程序仅支持 RGB,不支持其他任何颜色。我相信 pgf 每次生成阴影时都会调用颜色空间转换例程,以便从 cmyk 转换回 RGB。
您需要的是 PGF 的功能请求,以便尊重全局xcolor
配置并在该颜色空间中生成阴影。
可能有解决方法。但是,这取决于紧急程度 - 如果您说您将提交功能请求并接受限制,那就没问题。
如果您确实需要解决方法,可以继续阅读。
我想到的解决方法是使用 pgfplots。它有几个与绘图相关的阴影,并带有自己的相关驱动程序。反过来,这些支持 cmyk - 并且大多数阴影可以表示为基于绘图的阴影。将这些阴影从具有超级嵌入到图片中的 tikz 图片转换为 pgfplots 绘图的努力将是中等的。
以下是朝这个方向进行的尝试:
\pdfcompresslevel=0
\documentclass{minimal}
%%% uncomment to use CMYK
\usepackage[cmyk]{xcolor}
\definecolor{mygreen}{cmyk}{1,0,0.57,0.42}
\usepackage{pgfplots}
\pgfplotsset{compat=1.8}
%%% uncomment to use RGB
% \usepackage[rgb]{xcolor}
% \definecolor{mygreen}{HTML}{009440}
\usepackage{tikz}
\begin{document}
\color{mygreen}{MY TEXT}
\tikz
\shade [left color=mygreen,right color=mygreen]
(1,1) rectangle (2,2);
%
\tikz
\fill [mygreen]
(1,1) rectangle (2,2);
\begin{tikzpicture}
% this statement is needed for pgfplots v1.8.
% pgfplots 1.9 or newer inherits it from
% \usepackage[cmyk]{xcolor}:
\pgfplotsset{mesh/colorspace explicit color output=cmyk}
\begin{axis}[
x=1cm,y=1cm,
hide axis,
view={0}{90}]
\addplot[surf,mesh/color input=explicit,shader=interp]
table[meta=cdata] {
x y cdata
1 1 color=mygreen
2 1 color=yellow
1 2 color=mygreen
2 2 color=yellow
};
\end{axis}
\end{tikzpicture}
\end{document}
它依赖于使用直角坐标 (1cm,1cm) (2cm,2cm) 的具有明确颜色的表面图,颜色列在表中。color=<name>
需要使用详细的语法来与0,0,1
或 之类的语法区分开来gray=0.5
。
答案2
更新
tikz
从 3.1.3 版本开始支持此功能。只需确保\usepackage[cmyk]{xcolor}
在加载之前已安装即可tikz
。
对于原帖来说已经很晚了,但如果有人遇到这个问题,现在有一个包(pgf-cmyk阴影) 就是这样做的。根据其文档,“该软件包尝试生成与当前选定的 xcolor 颜色模型一致的阴影。该软件包中的rgb
、cmyk
和gray
颜色模型xcolor
均受支持。”
平均能量损失
以下是一个 MWE,演示如何使用pgf-cmykshadings
来生成问题中要求的 CMYK 阴影。您需要加载pgf-cmykshadings
前 tikz
以便正确设置阴影。最好使用选项xcolor
加载cmyk
前 pgf-cmykshadings
确保所有颜色都以 CMYK 输出,并且不会出现颜色不匹配的情况。
\documentclass{minimal}
\usepackage[cmyk]{xcolor}
\definecolor{mygreen}{cmyk}{1,0,0.57,0.42}
\usepackage{pgf-cmykshadings}
\usepackage{tikz}
\begin{document}
\color{mygreen}{MY TEXT}
\bigskip
\tikz
\shade [left color=mygreen,right color=mygreen]
(1,1) rectangle (2,2);
%
\tikz
\fill [mygreen]
(1,1) rectangle (2,2);
\bigskip
\tikz
\shade [left color=cyan, right color=magenta]
(1,1) rectangle (5,2);
\end{document}