我想将文本 a -- b -- c 对齐到底部而不是像现在这样对齐到顶部:
\documentclass{article}
\usepackage{pgfplots,tikz}
\usetikzlibrary{automata,positioning}
\begin{document}
\begin{tikzpicture}
\node(a) {a};
\node[right=of a] (b) {b};
\node[right=of b] (c) {c};
\draw (a) -- (b) -- (c);
\end{tikzpicture}
\end{document}
此外,我想知道:我是否必须始终将 tikzpicture 放在“图形”环境中?因为,如果我不这样做,那么它会与其余文本对齐,而不是“图片”。最后,我想在上面的 tikzpicture 中的 a、b、c 位置放一些小圆圈(以及这些圆圈上方的名称 a、b、c),但是当我这样做时,连接线会接触到圆圈,我不喜欢这样。我更喜欢当前的格式(其中线不接触 a、b 和 c 但将它们连接起来),而是用圆圈代替。我该怎么做?
由于它只是一条连接三个点的线的简单图片,因此我希望保持代码尽可能简单和基本。谢谢。
答案1
在原始代码中,要将节点对齐到底部,您可以设置适当的锚点,方法是说right=of a.south east,anchor=south west
,而不是right=of a
。根据您的需要,您可能希望使用锚点base west
而不是south west
,但然后您可以使用base right=of
而不是right=of
,如下面的代码所示。
绘制线条时确实会遇到问题,因为它们似乎是在east
和west
锚点之间绘制的,而且由于它们处于不同的垂直位置,所以线条有点倾斜。可能有几种方法可以解决这个问题,下面显示的方法如下:
\draw (a) -- (b.west |- a.east)
(c.west |- a.west) -- (a.west -| b.east);
构造(<coord 1> |- <coord 2>)
是一个坐标规范(参见第 13.3.1 节,垂直线的交点,在手册中)。它是 x 坐标为<coord 1>
、y 坐标为 的点<coord 2>
。将 想象|-
成两条线,一条垂直从第一个点出发,一条水平从第二个点出发,坐标位于这两条线的交点处。类似地,使用 ,-|
您可以获得第一个点的 y 坐标和第二个点的 x 坐标。
还要注意,如果这样做,那么您将不会得到和\draw (a) -- (b) (c) -- (d);
之间的线,因为坐标之间没有。b
c
--
最后,我展示了一种在上方添加带有字母的圆圈的方法。如果您不需要在基线处垂直对齐,则可以[anchor=base,label distance=1mm]
从样式中删除circ
。
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{positioning}
\begin{document}
Aligning nodes at their bottom (left) or baseline (right):
\begin{tikzpicture}
\node(a) {a};
\node[right=of a.south east,anchor=south west] (b) {b};
\node[right=of b.south east,anchor=south west] (c) {y};
\draw (a) -- (b) -- (c);
\end{tikzpicture}
\begin{tikzpicture}
\node(a) {a};
\node[base right=of a] (b) {b};
\node[base right=of b] (c) {y};
\draw (a) -- (b) -- (c);
\end{tikzpicture}
Tweaked to get horizontal lines:
\begin{tikzpicture}
\node(a) {a};
\node[right=of a.south east,anchor=south west] (b) {b};
\node[right=of b.south east,anchor=south west] (c) {y};
\draw (a) -- (b.west |- a.east)
(c) -- (c.west -| b.east);
\end{tikzpicture}
\begin{tikzpicture}
\node(a) {a};
\node[base right=of a] (b) {b};
\node[base right=of b] (c) {y};
\draw (a) -- (b.west |- a.east)
(c.west |- a.west) -- (a.west -| b.east);
\end{tikzpicture}
With circles:
\begin{tikzpicture}[
circ/.style={ % style for the nodes
draw=blue!50, % draw with given color
circle,
fill=blue!10, % fill color
inner sep=0pt, % remove all padding in node
minimum size=2mm, % set size
outer sep=2pt,
label={[anchor=base,label distance=1mm]above:#1} % The #1 indicates that the style takes one argument, so use as circ={...}
}]
\node [circ=a] (a) {};
\node [circ=b, right=of a] (b) {};
\node [circ=y, right=of b] (c) {};
\draw (a) -- (b) -- (c);
\end{tikzpicture}
\end{document}
附录——mid
浏览手册后,我意识到mid east
/mid west
锚点可以与稍微短一点的代码一起使用base right
,至少对于目前的情况而言。mid
锚点被定义为高于基线 0.5ex。
\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{positioning}
\begin{document}
\begin{tikzpicture}
\node(a) {a};
\node[base right=of a] (b) {b};
\node[base right=of b] (c) {y};
\draw (a.mid east) -- (b.mid west) (b.mid east) -- (c.mid west);
\end{tikzpicture}
\end{document}