Фон
Я пытался нарисовать ментальную карту с помощью tikz
mindmap
библиотеки для возможного использования в beamer
презентации.
Проблема
В зависимости от моего выбора цветов, цвет узлов не совпадает с цветами соединителей, связывающих их с другими узлами. Это справедливо независимо от того, создаются ли соединения автоматически с использованием иерархии ментальной карты или добавляются вручную впоследствии в ходе операции \path
.
МВЭ
Этот код демонстрирует проблему. Первая карта взята прямо со страницы 662 руководства и работает отлично. Вторая карта такая же, как первая, за исключением того, что цвета используются другие.
\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}
Есть две проблемы:
- Цвета узлов не такие, как ожидалось. Это менее заметно в случае желтого, но очень заметно в случае голубого и пурпурного.
- Цвета не тепоследовательный. То есть, похоже, что коннекторы используют цвета, которые я ожидал бы, хотя узлы этого не делают. Так что коннекторы не перетекают плавно в/из узлов.
Расследование
Все цвета, которые работают согласованно, определяются с помощью модели RGB. Все цвета, которые дают противоречивые результаты, определяются с помощью модели CMYK. Обходной путь — определить альтернативные цвета в модели RGB. Например, определить новый цвет, rgbmagenta
как и magenta
, но в терминах , rgb
а не 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}
Вопрос
Почему именно это происходит? Можно ли этого избежать, не переопределяя цвета, как я сделал в обходном пути?
Боюсь, что этот вопрос наверняка дубликат, но поиск пока не дал ничего особенно проясняющего. Я нашел темы, предполагающие, что TikZ может преобразовывать цвета из модели CMYK в RGB, но хотя это может объяснить, что цвета не совсем такие, как ожидалось, это не объясняет несоответствий.
решение1
Обновлять
Начиная с версии 3.1.3, tikz
поддерживает оттенки CMYK, поэтому MWE ниже будет работать без загрузки pgf-cmykshadings
.
Есть новый пакет, pgf-cmykshadings
который поддерживает CMYK-затенения в pgf
и tikz
. Можно создавать RGB и CMYK-затенения в одном документе, установив xcolor
цветовую модель. Просто загрузитеpgf-cmykshadings
до tikz
.
В следующем MWE первая ментальная карта в RGB, а вторая в CMYK. Обе имеют согласованные цвета!
\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}
решение2
TikZ (до версии 3.1.3) использует цвета RGB для цветовых градиентов.
С пакетом xcolor
(требуется tikz
и beamer
) вы можете:
преобразовать цвет CMYK в цвет RGB:
\colorlet{yellow}[rgb]{yellow}
преобразовать цвет RGB в цвет CMYK:
\colorlet{red}[cmyk]{red}
Чтобы всегда использовать цвета RGB, передайте rgb
параметр xcolor
:
\usepackage[rgb]{xcolor}
Как beamer
требуется xcolor
, вы должны передать эту опцию перед:
\PassOptionsToPackage{rgb}{xcolor}
\documentclass{beamer}