
¿Cómo hago node
mensajes de correo electrónico parcialmente sombreados tikz
sin codificar coordinate
mensajes de correo electrónico?
Un MWE simple es el siguiente:
\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}
Esto funciona, pero tuve que calcular las coordenadas del arco sombreado y es muy tedioso cuando tengo que trabajar con una gran cantidad de nodos. ¿Hay alguna manera de hacer esto automáticamente?
Tengo otro código que usatikz-bayesnet, por lo que si la solución puede basarse en eso, sería aún mejor.
Respuesta1
Puede cargar backgrounds
la biblioteca y utilizar los anclajes de nodos como a.225
. El radio debe ser la mitad de minimum size
. Además, utilícelo \fill
en lugar de \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}
Respuesta2
Si todos sus nodos tienen el mismo relleno, entonces una forma de dibujar dichos nodos es usar 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}
Respuesta3
Una forma más conveniente con /.style
: puede utilizar semifill
para especificar un estilo de nodo semirrelleno y utilizar semifill={gray}
para especificar el color de relleno y semifill={ang=125}
especificar el ángulo de la línea divisoria.
\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}