
¿Es posible tener una opción para un \usetikzlibrary
comando? 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 choice
el 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}
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... \makeatother
debido 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 scope
dentro de una imagen.
\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}