我需要帮助将附图中红色轮廓的 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 width
和minimum 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}
输出: