6

As a follow-up to this question, or more precisely this answer, I'd like to know how to do the equivalent of

\shadedraw
  [shading=axis,left color=green,right color=orange,color=blue,line width=2] 
  (2,0) -- (2,1) 
  {[rounded corners=1em] -- (3,1)} --
  (3,0) -- (2,0);

using pgfplots such that the shading is done in the CMYK colorspace.

(This would then be used in baposter as a replacement for the shading in the headers of the boxes.)

  • 1
    May I ask why you insist on CMYK model for a poster? You can ask for the CMYK version from the printer if you feel there will be a significant difference. In Photoshop (if you have it) there was a Gamut Warning thingy when I was keen on using Adobe stuff. That can tell you if there will be a significant problem by turning the areas in the gray. – percusse Oct 10 '13 at 8:43
  • The reason is that I have a shading from white to light gray in the background. I cannot predict what this would look like in print if it's converted from RGB to CMYK, so I'd prefer to use CMYK. – fuenfundachtzig Oct 10 '13 at 10:17
7

As already stressed in https://tex.stackexchange.com/a/137031, this answer should be considered a workaround: the correct solution would be to "wait for the feature request in tikz".

Naturally, that can take longer than having a clumsy work-around at hand.

Here is an attempt to use a pgfplots surface plot to simulate your desired filled shading:

enter image description here

\documentclass[a4paper]{article}

\usepackage[cmyk]{xcolor}

\usepackage{pgfplots}
\pgfplotsset{compat=1.9}
% if you have v1.8, write:
%\pgfplotsset{mesh/colorspace explicit color output=cmyk}


\begin{document}

\begin{tikzpicture}
\draw (0,0) grid (3,3);
    \shadedraw
  [shading=axis,left color=green,right color=orange,color=blue,line width=2] 
  (2,0) -- (2,1) 
  {[rounded corners=1em] -- (3,1)} --
  (3,0) -- (2,0);
\end{tikzpicture}

\begin{tikzpicture}

\draw (0,0) grid (3,3);
    \draw
  [color=blue,line width=4pt] 
  (2,0) -- (2,1) 
  {[rounded corners=1em] -- (3,1)} --
  (3,0) -- cycle;
    \clip
  (2,0) -- (2,1) 
  {[rounded corners=1em] -- (3,1)} --
  (3,0) -- cycle;

    \begin{axis}[
        % necessary to match up coordinate systems:
        xmin=0,ymin=0,
        anchor=origin,
        x=1cm,y=1cm,
        hide axis,
    ]
    \addplot[surf,mesh/color input=explicit,shader=interp] 
    table[meta=cdata] {
        x y cdata
        2 0 color=green
        2 1 color=green

        3 0 color=orange
        3 1 color=orange
    };
    \end{axis}
\end{tikzpicture}
\end{document}

Both are tikzpictures, the first one is replicated from your question and the second one is based on pgfplots. You see that it is considerably more involved: it installs a clip path to restrict the shading to your "rounded" rectangle, then it draws the outline of the clip path (for some reason, pgf rejects it if I say \draw[clip] with the remaining options). The rest is a pgfplots axis which is forced to use the same coordinate system as the outer tikz picture (requiring a bunch of keys explained in section "TikZ interoperability" in the pgfplots manual).

This answer will hopefully become superfluos once TikZ supports CMYK shadings.

  • As the feature request is almost 6 years old, I have little hope this will ever be implemented. Thus thanks a lot for your workaround. – fuenfundachtzig Oct 11 '13 at 18:14
  • Actually, I considered implementing the TikZ driver... it is not particularly difficult. But I'm glad the workaround helps. The message was more for others than for you. – Christian Feuersänger Oct 12 '13 at 6:55

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.