
Wie erstelle ich teilweise schattierte node
s tikz
ohne Hardcoding coordinate
-s?
Ein einfaches MWE sieht wie folgt aus:
\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}[mynode/.style={circle,draw=black,minimum size=10mm}]
\filldraw[fill=gray!25] (-3.5mm,-3.5mm) arc [start angle=225, end angle=405, radius=5mm];
\node at (0,0) [mynode] {\Large $x$};
\end{tikzpicture}
\end{document}
\end{tikzpicture}
Das funktioniert, aber ich musste die Koordinaten des schattierten Bogens berechnen, und das ist sehr mühsam, wenn ich mit einer großen Anzahl von Knoten arbeiten muss. Gibt es eine Möglichkeit, dies automatisch zu tun?
Ich habe anderen Code, der verwendettikz-bayesnet, wenn die Lösung also darauf aufbauen kann, wäre es sogar noch besser.
Antwort1
Sie können die Bibliothek laden backgrounds
und die Knotenanker wie verwenden a.225
. Der Radius sollte die Hälfte von betragen minimum size
. Verwenden Sie außerdem \fill
anstelle von \filldraw
.
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{backgrounds}
\begin{document}
\begin{tikzpicture}[mynode/.style={circle,draw=black,minimum size=10mm}]
\node (a) at (0,0) [mynode] {\Large $x$};
\begin{scope}[on background layer]
\fill[fill=gray!25] (a.225) arc [start angle=225, end angle=405, radius=5mm];
\end{scope}
\end{tikzpicture}
\end{document}
Antwort2
Wenn alle Ihre Knoten die gleiche Füllung haben, können Sie solche Knoten wie folgt zeichnen pics
:
\documentclass[12pt,tikz,border=3mm]{standalone}
\usetikzlibrary{backgrounds}
\begin{document}
\begin{tikzpicture}[
pics/mynode/.style = {code =
{\node[name=a,%node name
shape=circle, draw, minimum size=10mm,
inner sep=0mm, outer sep=0mm] at (0,0) {#1};
\scoped[on background layer]
\filldraw[gray!50] (a.south west) -- (a.north east) arc (45:-135:5mm);
}},
]
\pic {mynode=\Large$X$};
\end{tikzpicture}
\end{document}
Antwort3
Bequemer geht es mit /.style
: Sie können semifill
den Stil eines halbgefüllten Knotens festlegen und semifill={gray}
mit die Füllfarbe und semifill={ang=125}
den Winkel der Trennlinie angeben.
\documentclass[tikz, border=1cm]{standalone}
\usetikzlibrary{calc}
\makeatletter
\tikzset{
prefix after node/.style={
prefix after command={\pgfextra{#1}}
},
/semifill/ang/.store in=\semi@ang,
/semifill/ang=0,
semifill/.style={
circle, draw,
prefix after node={
\typeout{aaa \semi@ang}
\let\nodename\tikz@last@fig@name
\fill[/semifill/.cd, /semifill/.search also={/tikz}, #1]
let \p1 = (\nodename.north), \p2 = (\nodename.center) in
let \n1 = {\y1 - \y2} in
(\nodename.\semi@ang) arc [radius=\n1, start angle=\semi@ang, delta angle=180];
},
}
}
\makeatother
\begin{document}
\begin{tikzpicture}
\node[semifill={gray,ang=60}] {$y$};
\end{tikzpicture}
\end{document}