以下 TikZ 图片由一个包含两个椭圆的矩形组成。我通过将 TikZ 图片环境放在包含 TikZ 图片环境的节点内来构建它。我以前见过这种用法,但它似乎不是特别标准。我也没有在 PGF 手册中看到有关此内容的任何文档。
我的主要问题是,我需要做什么才能让两个椭圆位于矩形的中心?更准确地说,我希望两个椭圆并排放置,与矩形的顶部和底部距离相等,并且在将矩形分成两个相等部分的假想垂直线的两侧距离相等。我猜需要对矩形和椭圆中的一个或两个进行一些大小调整,这没关系。我没有尝试这样做,因为我甚至无法让椭圆正确居中。我尝试使用at (0,0)
椭圆 OUTPUT1 和at (3,0)
椭圆 OUTPUT2,并尝试更改这些值。据我所知,TikZ 忽略了前者,但会根据后者移动 OUTPUT2,但我不确定它在做什么。我不清楚这个at
选项总体上是做什么的。
第二个问题是:如何使省略号内的文本居中?我在各种情况下(在 TikZ 中)都遇到了这个问题,所以我一定是遗漏了什么。
更笼统地说,与 TikZ 的许多方面一样,我不清楚这应该如何工作。子图片是否知道封闭节点?我们是否有某种“自然”的方法可以教子椭圆尊重封闭节点的边界?
我应该补充一点,我计划将这个矩形用作矩阵中的一个元素。因此它需要看起来像一个单元。这排除了其他可能的策略,例如使用 fit 库来绘制椭圆,如何在 TikZ 中的椭圆内书写?。我实际上还没有尝试过这样做,所以不知道它是否会有效。
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{shapes,arrows, positioning}
\usepackage[active,tightpage]{preview}
\PreviewEnvironment{tikzpicture}
\setlength\PreviewBorder{5em}%
\begin{document}
\begin{tikzpicture}[auto]
\tikzstyle{file} = [ellipse, rounded corners, text width=12em, text height=3em, minimum height=1em, minimum width=1em, align=center, draw]
\tikzstyle{block} = [rectangle, rounded corners, text width=12em, text height=3em, minimum height=2em, minimum width=15em, align=center, draw]
\node [block, minimum height=6em, minimum width=40em] (OUTPUT)
{
\begin{tikzpicture}[anchor=center]
\node [file, inner sep=0pt, draw] (OUTPUT1) at (0,0) {MAP/PED files};
\node [file, right=2em of OUTPUT1, inner sep=0pt, draw] at (3, 0) (OUTPUT2){TFAM/TPED files};
\end{tikzpicture}
\textbf{Data files}\\
};
\end{tikzpicture}
\end{document}
答案1
嵌套 tikzpictures 并不好。其中一个问题在于范围:您的椭圆从矩形节点继承了一些特征,这会弄乱它们(这就是对齐不起作用的原因)。您应该尽力将事物绘制为单个图片。在这种情况下,无需嵌套事物。矩形节点不需要正式“包含”椭圆,只要它们绘制在正确的位置,它们就会看起来正确。
要使椭圆居中在正确的位置,请使用calc
库来计算坐标。由于您希望它们位于左侧和右侧的“中点”,我们可以使用中心锚点和东/西锚点轻松计算它们的中心。具体来说,($(OUTPUT)!.5!(OUTPUT.west)$)
是垂直居中且位于中心和左侧边缘中间的点。
关于文本的居中,即默认行为,因此添加像 这样的键text width
可能会改变这一点。总是有办法恢复它,但通常最好从一开始就避免改变它。因此,例如,为了确保省略号在某一侧,只使用 和 ,minimum width
不要minimum height
使用text width
和text height
。
以下是一些代码,它们以更简洁的方式实现了我认为您想要的功能,并且仅使用一个 tikzpicture。它可能不是您真正想要的,但我无法从您的示例中判断应该指定哪些数字以及应该允许哪些数字“增长”。例如,我不清楚您是否希望椭圆的边界与近侧边缘的距离与顶部/底部的距离相同,或者您只是希望中心居中。
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{shapes,arrows, positioning,calc}
\begin{document}
\begin{tikzpicture}
\tikzstyle{file} = [ellipse, minimum height=3em, minimum width=12em, draw]
\tikzstyle{block} = [rectangle, rounded corners, minimum height=2em, minimum width=15em, draw]
\node [block, minimum height=6em, minimum width=40em] (OUTPUT) {\textbf{Data files}};
\node [file, draw] (OUTPUT1) at ($(OUTPUT)!.5!(OUTPUT.west)$) {MAP/PED files};
\node [file, draw] (OUTPUT2) at ($(OUTPUT)!.5!(OUTPUT.east)$) {TFAM/TPED files};
\end{tikzpicture}
\end{document}
结果:
并将它们放入矩阵中:
\documentclass{standalone}
%\url{http://tex.stackexchange.com/q/27793/86}
\usepackage{tikz}
\usetikzlibrary{shapes,arrows, positioning,calc}
\begin{document}
\begin{tikzpicture}
\tikzstyle{file} = [ellipse, minimum height=3em, minimum width=12em, draw]
\tikzstyle{block} = [rectangle, rounded corners, minimum height=2em, minimum width=15em, draw]
\matrix {
\node [block, minimum height=6em, minimum width=40em] (OUTPUT) {\textbf{Data files}};
\node [file, draw] (OUTPUT1) at ($(OUTPUT)!.5!(OUTPUT.west)$) {MAP/PED files};
\node [file, draw] (OUTPUT2) at ($(OUTPUT)!.5!(OUTPUT.east)$) {TFAM/TPED files};
&
\node [block, minimum height=6em, minimum width=40em] (INPUT) {\textbf{Data files}};
\node [file, draw] (INPUT1) at ($(INPUT)!.5!(INPUT.west)$) {MAP/PED files};
\node [file, draw] (INPUT2) at ($(INPUT)!.5!(INPUT.east)$) {TFAM/TPED files};
\\};
\end{tikzpicture}
\end{document}
结果:
答案2
这就是你想要的吗?秘诀在于使用 Tikz fit 库,并删除文本高度,这会弄乱省略号中的垂直对齐:
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{shapes,arrows, positioning,fit}
\usepackage[active,tightpage]{preview}
\PreviewEnvironment{tikzpicture}
\setlength\PreviewBorder{5em}%
\begin{document}
\begin{tikzpicture}[auto]
\tikzstyle{file} = [ellipse, text width=10em, minimum height=3em, minimum width=1em, align=center, draw]
\tikzstyle{block} = [rectangle, rounded corners, text width=12em, minimum height=2em, minimum width=15em, align=center, draw]
\node [file, inner sep=0pt, draw] (OUTPUT1) at (0,0) {MAP/PED files};
\node [file, right=2em of OUTPUT1, inner sep=0pt, draw] at (3, 0) (OUTPUT2){TFAM/TPED files};
\node [block, inner xsep=1em,inner ysep=3em,fit=(OUTPUT1) (OUTPUT2)] (OUTPUT) {};
\node [anchor=south] at (OUTPUT.south) {\textbf{Data files}};
\end{tikzpicture}
\end{document}