因果图:在 TikZ 中对齐和缩小形状

因果图:在 TikZ 中对齐和缩小形状

我需要帮助将附图中红色轮廓的 X 和 Y 居中。如果可能的话,我还寻求帮助缩小 Y 形状。

代码如下:

\documentclass[margin=10pt]{article}
\usepackage{tikz-cd}
\usetikzlibrary{shapes.geometric}
\usepackage{mathrsfs}
\usepackage{amsmath}
\usepackage{tikz}
\usetikzlibrary{arrows,positioning}

\begin{document}
    \begin{tikzcd}[cells={nodes={%
                ,ellipse
                ,minimum width=1.7cm
                ,minimum height=1.7cm
                ,draw
                ,align=center
            }}
            ,every arrow/.append style={-LaTeX, >=LaTeX}
            ,row sep=2cm
            ,column sep=1.2cm
            ] 
            & & |[alias=X]|X &  \\
            & |[alias=1]|1 \arrow[right]{Y}{?} \arrow[right]{X}{?} & |[alias=2]|2 \arrow[right]{Y}{?} \arrow[right]{X}{?} & |[alias=3]|3 \arrow[right]{Y}{?} \arrow[right]{X}{?} & |[alias=4]|4 \arrow[right]{Y}{?} \arrow[right]{X}{?}  \\
            &  & |[alias=Y]|Y      
    \end{tikzcd} 
\end{document}

输出:

因果图

答案1

align=center从选项中省略nodes,因为它似乎与对齐有关(它是在文本中而不是在数学模式中排版的)。此外,1、2、3 和 4 未对齐。

如果您想要直立的 X,请使用\mathrm{X}

要减小圆的尺寸,请减小该单元格的minimum widthminimum height。或者更好的方法是,使用circle而不是ellipse和 只使用minimum width

梅威瑟:

\documentclass[margin=10pt]{article}
\usepackage{tikz-cd}
\usetikzlibrary{shapes.geometric}
\usepackage{mathrsfs}
\usepackage{amsmath}
%\usepackage{tikz} % loaded by tikz-cd
\usetikzlibrary{arrows,positioning}

\begin{document}
    \begin{tikzcd}[cells={nodes={%
                ,circle
                ,minimum width=1.7cm
                ,draw
            }}
            ,every arrow/.append style={-LaTeX}
            ,row sep=2cm
            ,column sep=1.2cm
            ]%
            & & |[alias=X]|\mathrm{X} &  \\
            & |[alias=1]|1 \arrow[right]{Y}{?} \arrow[right]{X}{?} 
            & |[alias=2]|2 \arrow[right]{Y}{?} \arrow[right]{X}{?} 
            & |[alias=3]|3 \arrow[right]{Y}{?} \arrow[right]{X}{?} 
            & |[alias=4]|4 \arrow[right]{Y}{?} \arrow[right]{X}{?}  \\
            &  & |[alias=Y,minimum width=1cm]|\mathrm{Y}
    \end{tikzcd}
\end{document} 

输出:

在此处输入图片描述


编辑

很抱歉,但我没有完全理解您的要求……

您写道“我需要帮助将 X 和 Y 置于中心”,而我以为您指的是圆圈内的 X 和 Y。

在图中将 X 和 Y 圆居中的正确方法是CarLaTeX 的答案,但正确的数量是-1.45cm通过计算的

- (minimum width + column sep) / 2 = - (1.7 + 1.2) / 2 = -1.45 cm

因此,MWE:

\documentclass[margin=10pt]{article}
\usepackage{tikz-cd}
\usetikzlibrary{shapes.geometric}
\usepackage{mathrsfs}
\usepackage{amsmath}
%\usepackage{tikz} % loaded by tikz-cd
\usetikzlibrary{arrows,positioning}

\begin{document}
    \noindent\begin{tikzcd}[cells={nodes={%
                ,circle
                ,minimum width=1.7cm
                ,draw
        }}
        ,every arrow/.append style={-LaTeX}
        ,row sep=2cm
        ,column sep=1.2cm
        ]%
        & & &[-1.45cm] |[alias=X]|\mathrm{X} &[-1.45cm]  \\
        & |[alias=1]|1 \arrow[right]{Y}{?} \arrow[right]{X}{?}
        & |[alias=2]|2 \arrow[right]{Y}{?} \arrow[right]{X}{?}
        & & |[alias=3]|3 \arrow[right]{Y}{?} \arrow[right]{X}{?}
        & |[alias=4]|4 \arrow[right]{Y}{?} \arrow[right]{X}{?}  \\
        & & & |[alias=Y,minimum width=1cm]|\mathrm{Y}
    \end{tikzcd}
\end{document} 

产生你想要的东西:

在此处输入图片描述

答案2

我必须承认我不知道如何进行定位,但你可以像这样tikzcd纯粹地做同样的图片:tikz

\documentclass[border=5mm]{standalone}
\usepackage{tikz}
\usetikzlibrary{arrows.meta,positioning,calc}
\begin{document}
\begin{tikzpicture}[
  State/.style={draw,circle,minimum width=1.7cm,inner sep=0pt},
  >={Latex[scale=1.2]},
  node distance=2cm and 1.2cm
  ]
  \node[State] (s1){1};
  \node[State,right=of s1] (s2){2};
  \node[State,right=of s2] (s3){3};
  \node[State,right=of s3] (s4){4};
  \node[State,above=of {$(s2.north)!0.5!(s3.north)$}] (sx){X};
  \node[State,below=of {$(s2.south)!0.5!(s3.south)$},minimum width=1cm] (sy){Y};
  %%
  \foreach \num in {1,2,3,4}{
    \draw[->] (s\num)--(sx)node[pos=0.5,left=2mm]{?};
    \draw[->] (s\num)--(sy)node[pos=0.5,right=2mm]{?};
  }
\end{tikzpicture}
\end{document}

在此处输入图片描述

答案3

添加一个“假”列并调整列宽,&[...]您就可以获得 StefanH 的输出和 karlkoeller 的解决方案。

编辑(感谢karlkoeller):正确的宽度调整是

-(column sep width + minimun width)/2 = -(1.2cm + 1.7cm)/2 = -1.45cm

梅威瑟:

\documentclass[margin=10pt]{article}
\usepackage{tikz-cd}
\usetikzlibrary{shapes.geometric}
\usepackage{mathrsfs}
\usepackage{amsmath}
\usepackage{tikz}
\usetikzlibrary{arrows,positioning}

\begin{document}
    \begin{tikzcd}[cells={nodes={%
                ,ellipse
                ,minimum width=1.7cm
                ,minimum height=1.7cm
                ,draw
        }}
        ,every arrow/.append style={-LaTeX, >=LaTeX}
        ,row sep=2cm
        ,column sep=1.2cm
        ]%
        & & &[-1.45cm] |[alias=X]|\mathrm{X} &[-1.45cm]  \\
        & |[alias=1]|1 \arrow[right]{Y}{?} \arrow[right]{X}{?} 
        & |[alias=2]|2 \arrow[right]{Y}{?} \arrow[right]{X}{?} 
        & & |[alias=3]|3 \arrow[right]{Y}{?} \arrow[right]{X}{?} 
        & |[alias=4]|4 \arrow[right]{Y}{?} \arrow[right]{X}{?}  \\
        & & & |[alias=Y,minimum width=1cm,minimum height=1cm]|\mathrm{Y}
    \end{tikzcd}
\end{document} 

输出:

在此处输入图片描述

相关内容