我正在尝试绘制一个类似于下图的图表:
############## ---------> ##############
\ /
\ /
#########################
需要注意的重要一点是,所有顶点上的标签都相当长,并且下方顶点应该与上方两个顶点重叠。
在 XYpic 中绘制类似这样的内容很容易:
#### -------> ####
\ /
\ /
####
使用以下代码:
\[ \xymatrix { longtexthere \ar[rr] \ar@{-}[dr] & & longtexthere \ar@{-}[dl] \\
& longtexthere & } \]
即顶点不重叠。不幸的是,在我的例子中,这意味着上面的两个顶点将被“推”到纸张边缘,这显然是不好的。
有什么想法可以画出这样的东西吗?最好使用 XYpic,但它似乎超出了它的能力 —— 显然你不能画出跨多列的单元格 —— 那么也许甚至可以使用 TikZ。
答案1
您可以指定底部标签所占的尺寸:
\documentclass{article}
\usepackage{xypic}
\begin{document}
\[ \xymatrix { longtexthere \ar[rr] \ar@{-}[dr] & & longtexthere \ar@{-}[dl] \\
&*=<1cm,1cm>{reallyreallylongtexthere} & } \]
\end{document}
答案2
尽管您已经要求 XYpic 解决方案,并且已经获得一个,但这里有一个 TiKZ 中的方法。这种方法的主要优点(除了语法简单之外)是您不必手动指定任何节点长度。
\documentclass[10pt]{article}
\usepackage{tikz}
\usetikzlibrary{calc,positioning}
\begin{document}
\begin{tikzpicture}
\node (a) [draw, rounded corners] {%
this is a very long label for a node};
\node (b) [draw, rounded corners, right=of a] {%
this node has a very long label as well};
\node (c) [draw, rounded corners] at ($(a)!0.5!(b) + (0,-10ex)$) {%
this node has an especially long label which overlaps the other two};
\draw [-stealth] (a) -- (b);
\draw (a) -- (c);
\draw (b) -- (c);
\end{tikzpicture}
\end{document}
答案3
这是另一个 Xy-pic 解决方案:开始时,\xymatrix
您可以指定列和/或行间距。将列间距设置为负值即可满足您的需要。我们通过在命令和左括号@C=-2em
之间添加来实现这一点:\xymatrix
\documentclass[12pt]{article}
\usepackage[all,cmtip]{xy}
\begin{document}
\thispagestyle{empty}
\[
\xymatrix@C=-2em { longtexthere \ar[rr] \ar@{-}[dr]
&& longtexthere \ar@{-}[dl] \\
& longtexthere & }
\]
\end{document}
得出的结果为:
答案4
以下是带有eplain
's 的示例gridcommdiag
:
\input eplain
$$ \hgrid=1.3cm \vgrid=1.3cm
\gridcommdiag{
\llap{long text here} & \mapright & \rlap{long text here} \cr
\sline(-1,1) & & \sline(1,1) \cr
& \hbox{really really long text here} \cr
} $$
\bye