是否可以为\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}
但是,您可能希望包含调整不透明度的选项,并且最好确保设置默认值,以防用户(可能是您)忘记设置颜色或其他内容。
以下内容基于Claudio Fiandrino 的回答并设置颜色和不透明度的默认值,并可选择覆盖它们。如果在序言中使用,则需要将其括起来,\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}