좌표를 하드코딩하지 않고 tikz를 사용하여 부분적으로 음영 처리된 노드를 어떻게 만들 수 있나요?

좌표를 하드코딩하지 않고 tikz를 사용하여 부분적으로 음영 처리된 노드를 어떻게 만들 수 있나요?

하드코딩 없이 부분적 node으로 음영 처리된 를 어떻게 만들 수 있나요 ?tikzcoordinate

일반 MWE는 다음과 같습니다.

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

이것은 작동하지만 음영처리된 호의 좌표를 계산해야 했고 많은 수의 노드로 작업해야 할 때 매우 지루했습니다. 이 작업을 자동으로 수행하는 방법이 있나요?

다음을 사용하는 다른 코드가 있습니다.tikz-bayesnet, 따라서 솔루션이 이를 기반으로 구축될 수 있다면 훨씬 더 좋을 것입니다.

답변1

backgrounds라이브러리를 로드 하고 a.225. 반경은 의 절반이어야 합니다 minimum size. 또한 \fill대신 사용하십시오 \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}

여기에 이미지 설명을 입력하세요

답변2

모든 노드의 채우기가 동일한 경우 해당 노드를 그리는 한 가지 방법은 다음을 사용하는 것입니다 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}

답변3

: 를 사용 하면 좀 더 편리한 방법으로 반채움 노드 스타일을 지정할 /.style수 있고 , 채움 색상을 지정하고 구분선 각도를 지정할 수 있습니다.semifillsemifill={gray}semifill={ang=125}

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

여기에 이미지 설명을 입력하세요

관련 정보