Opción en usetikzlibrary

Opción en usetikzlibrary

¿Es posible tener una opción para un \usetikzlibrarycomando? Me gustaría definir diferentes estilos cuando se activa una opción. Por ejemplo:

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

definiría diferentes colores para un mismo

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

Gracias.

Respuesta1

Como dice el comentario de percusse y cfr, no puedes usar opciones para la biblioteca tikz. Y puede leer en el manual que puede reemplazar las llaves con corchetes (específicos de ConTeXt).

A continuación se muestra un ejemplo de cómo puede configurar la opción utilizando .is choiceel controlador.

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

ingrese la descripción de la imagen aquí

EDITAR:Después de los comentarios de cfr, cambié el código para hacerlo más "explicativo".

Respuesta2

Esta es una adaptación de la respuesta de Kpym. Si bien la solución de Kpym se acerca más a sus deseos declarados, la mía es más corta y más flexible porque le permite seleccionarcualquiercolor.

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

Sin embargo, es posible que desee incluir la opción de ajustar la opacidad, y probablemente sea mejor asegurarse de que se establezcan los valores predeterminados en caso de que el usuario (posiblemente usted) no recuerde configurar el color o lo que sea.

Lo siguiente se basa enLa respuesta de Claudio Fiandrino.y configura valores predeterminados para el color y la opacidad, con la opción de anularlos. Si se usa en su preámbulo, debe incluirlo \makeatletter... \makeatotherdebido a la extensión @. Si se usa en el código de su biblioteca, esto no será necesario.

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

Si no haces nada, obtendrás un círculo azul con 50% de opacidad. Pero puedes cambiar esos valores predeterminados anulándolos en el preámbulo:

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

lo que te dará un círculo magenta, relleno al 75% de opacidad. O puede anularlos para un nodo en particular o para un elemento particular scopedentro de una imagen.

Las configuraciones de preámbulo, alcance y nodo anulan los valores predeterminados

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

información relacionada