¿Cómo hago nodos parcialmente sombreados con tikz sin codificar coordenadas?

¿Cómo hago nodos parcialmente sombreados con tikz sin codificar coordenadas?

¿Cómo hago nodemensajes de correo electrónico parcialmente sombreados tikzsin codificar coordinatemensajes 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 backgroundsla biblioteca y utilizar los anclajes de nodos como a.225. El radio debe ser la mitad de minimum size. Además, utilícelo \fillen 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}

ingrese la descripción de la imagen aquí

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 semifillpara 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}

ingrese la descripción de la imagen aquí

información relacionada