TikZ: 맞춤 사용 시 상자가 겹치는 것을 방지합니다.

TikZ: 맞춤 사용 시 상자가 겹치는 것을 방지합니다.

빨간색을 사용하여 노드 세트를 강조 표시하는 다음 그림을 그리고 있습니다. 이는 5개의 노드를 포함하도록 되어 있으며 실제로 그렇습니다. 하지만 이것은 모양이 적합하기에는 복잡해서(아마 너무 복잡할 수도 있음) 두 개의 상자를 사용하여 결합하기로 결정했습니다. 문제는 이것이 겹치는 노드(Z_1)의 색상을 포화시킨다는 것입니다. 강조 상자 전체에서 빨간색이 균일해지기를 원합니다.

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

MWE:

\documentclass[tikz]{standalone}
\usepackage{tikz}
\usetikzlibrary{shapes,decorations,arrows,calc,arrows.meta,fit,positioning}
    \tikzset{
        -Latex,auto,node distance =1 cm and 1 cm,semithick,
        state/.style ={ellipse, draw, minimum width = 0.7 cm},
        point/.style = {circle, draw, inner sep=0.04cm,fill,node contents={}},
        bidirected/.style={Latex-Latex,dashed},
        el/.style = {inner sep=2pt, align=left, sloped}
    }

\begin{document}

        \begin{tikzpicture}[node distance =1cm and 1cm]
            
            % F boxes
            \node (F) [label=above:{$F$},fill=gray,fit=(X0) (Z0) (Y0) (X1) (Z1) (Y1),inner sep=6, opacity=0.2] {};
            \node (Fprime) [label=right:{$F'$},fill=red,fit=(Z0) (Y0) (Z1) (Y1), inner sep=3, opacity=0.4] {};
            \node (Fprime2) [fill=red,fit=(Z1) (X1), inner sep=3, opacity=0.4] {};
            
            % t = 0
            \node (X0) [label=left:{$X_0$},point];
            \node (Z0) [label=left:{$Z_0$},below of = X0,point];
            \node (Y0) [label=left:{$Y_0$},below of = Z0,point];
        
            \path (X0) edge (Z0);
            \path (Z0) edge (Y0);
            
            % t = 1
            \node (X1) [label=right:{$X_1$}, right = of X0,point];
            \node (Z1) [label=right:{$Z_1$},below of = X1,point];
            \node (Y1) [label=right:{$Y_1$},below of = Z1,point];
        
            \path (X1) edge (Z1);
            \path (Z1) edge (Y1);
            \path[bidirected] (X0) edge (Z1);
            \path[bidirected] (Z0) edge (X1);
            \path[bidirected] (Z0) edge (Y1);
            \path[bidirected] (Y0) edge (Z1);
           
            % Transition 
            \path (X0) edge (X1);
            \path (Z0) edge (Z1);
            
        \end{tikzpicture}
\end{document}

답변1

동일한 불투명도로 빨간색 맞춤 노드를 병합하려면 범위와 옵션을 사용하여 수행할 수 있습니다 transparency group. 아래 코드를 참조하세요. 그럼에도 불구하고 그렇게 하면 여전히 몇 가지 점들이 나타납니다.아래에이 빨간 채우기. background라이브러리를 사용하여 각 부품을 서로 다른 레이어에 그릴 수 있습니다 .

투명도 그룹

\documentclass[tikz,border=3.14mm]{standalone}




\usetikzlibrary{shapes,decorations,arrows,calc,arrows.meta,fit,positioning}

\begin{document}

\tikzset{
    -Latex,auto,node distance =1 cm and 1 cm,semithick,
    state/.style ={ellipse, draw, minimum width = 0.7 cm},
    point/.style = {circle, draw, inner sep=0.04cm,fill,node contents={}},
    bidirected/.style={Latex-Latex,dashed},
    el/.style = {inner sep=2pt, align=left, sloped}
}


        \begin{tikzpicture}[node distance =1cm and 1cm]
            
           
            % t = 0
            \node (X0) [label=left:{$X_0$},point];
            \node (Z0) [label=left:{$Z_0$},below of = X0,point];
            \node (Y0) [label=left:{$Y_0$},below of = Z0,point];
            
            
            
            
            
            
            % t = 1
            \node (X1) [label=right:{$X_1$}, right = of X0,point];
            \node (Z1) [label=right:{$Z_1$},below of = X1,point];
            \node (Y1) [label=right:{$Y_1$},below of = Z1,point];
        
             % F boxes
            
            \node (F) [label=above:{$F$},fill=gray,fit=(X0) (Z0) (Y0) (X1) (Z1) (Y1),inner sep=6, opacity=0.2] {};
                
            \begin{scope}[opacity=.4, transparency group]        
                \node (Fprime) [fill=red,fit=(Z0) (Y0) (Z1) (Y1), inner sep=3] {};
                \node (Fprime2) [fill=red,fit=(Z1) (X1), inner sep=3] {};
            \end{scope}
            
            \path (X0) edge (Z0);
            \path (Z0) edge (Y0);
            \path (X1) edge (Z1);
            \path (Z1) edge (Y1);
            \path[bidirected] (X0) edge (Z1);
            \path[bidirected] (Z0) edge (X1);
            \path[bidirected] (Z0) edge (Y1);
            \path[bidirected] (Y0) edge (Z1);
           
            % Transition 
            \path (X0) edge (X1);
            \path (Z0) edge (Z1);
            
        \end{tikzpicture}

\end{document}

답변2

투명도 채우기로 주석을 달고 싶은 노드 주위에 경로를 그릴 수 있습니다.

\documentclass[margin=3mm]{standalone}
\usepackage{tikz}
\usetikzlibrary{arrows.meta,
                calc, chains,
                decorations,
                fit,
                positioning,
                shapes}
\tikzset{
 node distance = 1 cm and 1 cm,
    arr/.style = {-Latex, semithick},
    alr/.style = {Latex-Latex, dashed},
  point/.style = {circle,  draw, fill, 
                  inner sep=0.04cm, node contents={}},
every label/.append style = {inner sep=1mm, font=\footnotesize},
        }

\begin{document}
    \begin{tikzpicture}[
node distance = 1cm and 1cm,
  start chain = going below,
                        ]
% t = 0, t = 1
    \foreach \i [count=\ii] in {X, Z, Y}
{
\node (\i0) [point, on chain, label=left:{$\i_0$}];
\node (\i1) [point, right=of \i0, label=right:{$\i_1$}];
}
\draw[arr]
        (X0) edge (Z0) (Z0) edge (Y0)
        (X1) edge (Z1) (Z1) edge (Y1) 
% Transition
        (X0) edge (X1) 
        (Z0) edge (Z1);
% Cross
\draw[alr] 
        (X0) edge (Z1) 
        (Z0) edge (X1) 
        (Z0) edge (Y1) 
        (Y0) edge (Z1);
         
% F boxes
\node (F) [inner sep=6, fill=gray, opacity=0.2,
           label=$F$, 
           fit=(X0) (Y1),] {};
\fill[red!50, semitransparent]
        ($(X1)+ (-2mm,2mm)$) -| ($(Y1)+ (2mm,-2mm)$) -|
        ($(Z0)+ (-2mm,2mm)$) -|  cycle;

    \end{tikzpicture}
\end{document}

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

관련 정보