更新

更新

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 颜色模型一致的阴影。该软件包中的rgbcmykgray颜色模型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}

在此处输入图片描述

相关内容