
Ist es möglich, eine Option für einen Befehl zu haben \usetikzlibrary
? Ich möchte verschiedene Stile definieren, wenn eine Option aktiviert ist. Zum Beispiel:
\usetikzlibrary[blue]{something}
\usetikzlibrary[green]{something}
\usetikzlibrary[red]{something}
würden verschiedene Farben für ein und dasselbe
\tikzset{C/.style={thick, circle, fill=red}};
Danke.
Antwort1
Wie der Kommentar von percusse und cfr besagt, können Sie Optionen für die Tikz-Bibliothek nicht verwenden. Und im Handbuch können Sie nachlesen, dass Sie die geschweiften Klammern durch eckige Klammern ersetzen können (ConTeXt-spezifisch).
Hier ist ein Beispiel, wie Sie die Option mithilfe eines .is choice
Handlers festlegen können.
\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}
BEARBEITEN:Nach den Kommentaren von cfr habe ich den Code geändert, um ihn „selbsterklärender“ zu machen.
Antwort2
Dies ist eine Anpassung von Kpyms Antwort. Während Kpyms Lösung näher an Ihren angegebenen Desiderata liegt, ist meine kürzer und flexibler, da Sie damit auswählen könnenbeliebigFarbe.
\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}
Möglicherweise möchten Sie jedoch die Option zum Anpassen der Deckkraft einschließen. Am besten ist es wahrscheinlich, sicherzustellen, dass Standardeinstellungen festgelegt sind, für den Fall, dass der Benutzer (möglicherweise Sie) vergisst, die Farbe oder etwas anderes festzulegen.
Das Folgende basiert aufClaudio Fiandrinos Antwortund legt Standardwerte für Farbe und Deckkraft fest, mit der Option, diese zu überschreiben. Wenn Sie es in Ihrer Präambel verwenden, müssen Sie es \makeatletter... \makeatother
aufgrund von einschließen @
. Wenn Sie es in Ihrem Bibliothekscode verwenden, ist dies nicht erforderlich.
\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
}
Wenn Sie nichts tun, erhalten Sie einen blauen Kreis mit 50 % Deckkraft. Sie können diese Standardwerte jedoch ändern, indem Sie sie in der Präambel überschreiben:
\tikzset{theme settings={theme color=magenta, theme color opacity=75}}
Dadurch erhalten Sie einen magentafarbenen Kreis mit einer Deckkraft von 75 %. Oder Sie können sie für einen bestimmten Knoten oder für ein bestimmtes Element scope
innerhalb eines Bildes überschreiben.
\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}