Вариант использованияtikzlibrary

Вариант использованияtikzlibrary

Можно ли иметь опцию для \usetikzlibraryкоманды? Я хотел бы определить разные стили, когда опция активируется. Например:

\usetikzlibrary[blue]{something}
\usetikzlibrary[green]{something}
\usetikzlibrary[red]{something}

будут определять разные цвета для одного и того же

\tikzset{C/.style={thick, circle, fill=red}};

Спасибо.

решение1

Как говорится в комментарии percusse и cfr, вы не можете использовать опции для библиотеки tikz. И вы можете прочитать в руководстве, что вы можете заменить фигурные скобки на квадратные (специфичные для ConTeXt).

Вот пример того, как можно задать опцию с помощью .is choiceобработчика.

\documentclass[border=1cm]{standalone}
\usepackage{tikz}
\usetikzlibrary{calc}
% ----------- code to put in your  tikzlibrarysomething.code.tex
\tikzset{
  C/.style={ultra thick, circle},
  theme/.is choice,
  theme/ocean/.style={C/.append style={draw=none,fill=blue!50}},
  theme/fire/.style={C/.append style={draw=orange,fill=red}},
  theme/nature/.style={C/.append style={draw=brown,fill=green!70}},
  theme = fire % <- set the default theme
}
%------------- then to use
% \usetikzlibrary{something}
\tikzset{theme=ocean}

%------------- and here we are
\begin{document}
    \tikz \node[C] {Test};
\end{document}

введите описание изображения здесь

РЕДАКТИРОВАТЬ:После комментариев cfr я изменил код, чтобы сделать его более «самостоятельным».

решение2

Это адаптация ответа Kpym. Хотя решение Kpym ближе к вашим заявленным пожеланиям, мое решение короче и гибче, поскольку позволяет вам выбиратьлюбойцвет.

\documentclass[border=5pt,tikz]{standalone}
\usetikzlibrary{calc}

\tikzset{
  C/.style={circle},
  theme color/.style={C/.append style={fill=#1!50}},
}

\tikzset{theme color=magenta}

\begin{document}
  \tikz \node[C] {Test};
\end{document}

Однако вы, возможно, захотите включить возможность настройки непрозрачности, и, вероятно, лучше всего убедиться, что установлены значения по умолчанию на случай, если пользователь (возможно, вы) не вспомнит, как задать цвет или что-то еще.

Следующее основано наОтвет Клаудио Фиандринои устанавливает значения по умолчанию для цвета и прозрачности с возможностью их переопределения. Если используется в вашей преамбуле, вам необходимо заключить в \makeatletter... \makeatotherиз-за @. Если используется в вашем библиотечном коде, это не потребуется.

\tikzset{
  C/.style={circle, fill=\my@theme@color!\my@theme@color@opacity},
  theme color/.store in=\my@theme@color,
  theme color opacity/.store in=\my@theme@color@opacity,
  theme settings/.code={%
    \tikzset{#1}},
  theme color=blue,% set a default
  theme color opacity=50,% set a default
}

Если ничего не делать, то получится синий круг, 50% непрозрачности. Но вы можете изменить эти значения по умолчанию, переопределив их в преамбуле:

\tikzset{theme settings={theme color=magenta, theme color opacity=75}}

что даст вам пурпурный круг, заполненный на 75% непрозрачности. Или вы можете переопределить их для конкретного узла или для конкретного элемента scopeв картинке.

Настройки преамбулы, области действия и узла переопределяют значения по умолчанию

\documentclass[border=5pt,tikz]{standalone}
\usetikzlibrary{calc}

\makeatletter
\tikzset{% https://tex.stackexchange.com/a/159856/ - Claudio Fiandrino
  C/.style={circle, align=center, fill=\my@theme@color!\my@theme@color@opacity},
  theme color/.store in=\my@theme@color,
  theme color opacity/.store in=\my@theme@color@opacity,
  theme settings/.code={%
    \tikzset{#1}},
  theme color=blue,% set a default
  theme color opacity=50,% set a default
}
\makeatother
\tikzset{theme settings={theme color=magenta, theme color opacity=75}}

\begin{document}
  \begin{tikzpicture}
    \node[C] {Preamble\\Config};
    \begin{scope}[theme settings={theme color=yellow, theme color opacity=100}]
      \node [C, xshift=15mm] {Scope\\Config};
    \end{scope}
    \node [C, theme color=green, theme color opacity=15, xshift=29mm] {Node\\Config};
  \end{tikzpicture}
\end{document}

Связанный контент