Opção em usetikzlibrary

Opção em usetikzlibrary

É possível ter uma opção para um \usetikzlibrarycomando? Gostaria de definir estilos diferentes quando uma opção for ativada. Por exemplo:

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

definiria cores diferentes para um mesmo

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

Obrigado.

Responder1

Como diz o comentário de percusse e cfr, você não pode usar opções para a biblioteca tikz. E você pode ler no manual que pode substituir as chaves por colchetes (específico do ConTeXt).

Aqui está um exemplo de como você pode definir a opção usando .is choiceo manipulador.

\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}

insira a descrição da imagem aqui

EDITAR:Após os comentários do cfr alterei o código para torná-lo mais "autoexplicativo".

Responder2

Esta é uma adaptação da resposta do Kpym. Embora a solução do Kpym esteja mais próxima dos seus desejos declarados, a minha é mais curta e mais flexível, pois permite selecionarqualquercor.

\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}

No entanto, você pode querer incluir a opção de ajustar a opacidade, e provavelmente é melhor garantir que os padrões sejam definidos caso o usuário (possivelmente você) não se lembre de definir a cor ou algo assim.

O seguinte é baseado emA resposta de Cláudio Fiandrinoe configura padrões para cor e opacidade, com a opção de substituí-los. Se usado em seu preâmbulo, você precisará incluir \makeatletter... \makeatotherdevido ao @. Se usado no código da sua biblioteca, isso não será necessário.

\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
}

Se você não fizer nada, obterá um círculo azul com 50% de opacidade. Mas você pode alterar esses padrões substituindo-os no preâmbulo:

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

o que lhe dará um círculo magenta, preenchido com 75% de opacidade. Ou você pode substituí-los para um nó específico ou para um determinado nó scopeem uma imagem.

As configurações de preâmbulo, escopo e nó substituem os padrões

\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}

informação relacionada