附录——mid

附录——mid

我想将文本 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,如下面的代码所示。

绘制线条时确实会遇到问题,因为它们似乎是在eastwest锚点之间绘制的,而且由于它们处于不同的垂直位置,所以线条有点倾斜。可能有几种方法可以解决这个问题,下面显示的方法如下:

\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);之间的线,因为坐标之间没有。bc--

最后,我展示了一种在上方添加带有字母的圆圈的方法。如果您不需要在基线处垂直对齐,则可以[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}

相关内容