Fundo
Eu estava tentando desenhar um mapa mental usando a tikz
mindmap
biblioteca para possível uso em uma beamer
apresentação.
O problema
Dependendo da minha escolha de cores, a cor dos nós não corresponde às cores dos conectores que os ligam a outros nós. Isto é verdade quer as conexões sejam criadas automaticamente usando a hierarquia do mapa mental ou quer as conexões sejam adicionadas manualmente posteriormente em uma \path
operação.
MWE
Este código demonstra o problema. O primeiro mapa vem direto da página 662 do manual e funciona bem. O segundo mapa é igual ao primeiro, exceto que as cores utilizadas são diferentes.
\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{mindmap}
\begin{document}
\tikz[mindmap,concept color=blue!80]
\node [concept] {Root concept}
child[concept color=red,grow=30] {node[concept] {Child concept}}
child[concept color=orange,grow=0] {node[concept] {Child concept}};
\tikz[mindmap,concept color=magenta]
\node [concept] {Root concept}
child[concept color=cyan,grow=30] {node[concept] {Child concept}}
child[concept color=yellow,grow=0] {node[concept] {Child concept}};
\end{document}
Existem dois problemas:
- As cores dos nós não são as esperadas. Isto é menos óbvio no caso do amarelo, mas muito óbvio no caso do ciano e do magenta.
- As cores não sãoconsistente. Ou seja, os conectores parecem usar cores como as que eu esperaria, embora os nós não o façam. Portanto, os conectores não fluem suavemente de/para os nós.
Investigação
As cores que funcionam de forma consistente são todas definidas usando o modelo RGB. As cores que produzem resultados inconsistentes são todas definidas usando o modelo CMYK. Uma solução alternativa é definir cores alternativas no modelo RGB. Por exemplo, para definir uma nova cor, rgbmagenta
apenas como magenta
mas em termos de rgb
em vez de cmyk
.
\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{mindmap}
\definecolor{rgbmagenta}{rgb}{1,0,1}
\definecolor{rgbcyan}{rgb}{0,1,1}
\definecolor{rgbyellow}{rgb}{1,1,0}
\begin{document}
\tikz[mindmap,concept color=rgbmagenta]
\node [concept] {Root concept}
child[concept color=rgbcyan,grow=30] {node[concept] {Child concept}}
child[concept color=rgbyellow,grow=0] {node[concept] {Child concept}};
\end{document}
Pergunta
Por que exatamente isso acontece? Isso pode ser evitado sem redefinir as cores como fiz na solução alternativa?
Temo que esta pergunta seja certamente uma duplicata, mas a pesquisa até agora não revelou nada especialmente esclarecedor. Encontrei tópicos sugerindo que o TikZ pode estar convertendo cores do modelo CMYK para RGB, mas embora isso possa explicar que as cores não são exatamente as esperadas, não explica as inconsistências.
Responder1
Atualizar
Desde a versão 3.1.3, tikz
suporta sombreamentos CMYK, portanto o MWE abaixo funcionará sem carregar arquivos pgf-cmykshadings
.
Há um novo pacote pgf-cmykshadings
que suporta sombreamentos CMYK em pgf
e tikz
. É possível produzir sombreamentos RGB e CMYK no mesmo documento definindo o xcolor
modelo de cores. Basta carregarpgf-cmykshadings
antes tikz
.
No MWE a seguir, o primeiro mapa mental está em RGB e o segundo em CMYK. Ambos têm cores consistentes!
\documentclass{standalone}
\usepackage{pgf-cmykshadings}
\usepackage{tikz}
\usetikzlibrary{mindmap}
\begin{document}
\selectcolormodel{rgb}
\tikz[mindmap,concept color=blue!80]
\node [concept] {Root concept}
child[concept color=red,grow=30] {node[concept] {Child concept}}
child[concept color=orange,grow=0] {node[concept] {Child concept}};
\selectcolormodel{cmyk}
\tikz[mindmap,concept color=magenta]
\node [concept] {Root concept}
child[concept color=cyan,grow=30] {node[concept] {Child concept}}
child[concept color=yellow,grow=0] {node[concept] {Child concept}};
\end{document}
Responder2
TikZ (anterior à versão 3.1.3) usa cores RGB para gradientes de cores.
Com o pacote xcolor
(exigido por tikz
e beamer
), você pode:
converter uma cor CMYK em uma cor RGB:
\colorlet{yellow}[rgb]{yellow}
converter uma cor RGB em uma cor CMYK:
\colorlet{red}[cmyk]{red}
Para usar sempre cores RGB, passe a rgb
opção para xcolor
:
\usepackage[rgb]{xcolor}
Como beamer
exige xcolor
, você deve passar esta opção antes:
\PassOptionsToPackage{rgb}{xcolor}
\documentclass{beamer}