Tikz:使用“\draw”将文本添加到线条并连接线条

Tikz:使用“\draw”将文本添加到线条并连接线条

我有一个框和两条附加线。现在我想添加一些水平对齐到线中间的文本。我没有找到任何不太复杂的有用示例。

我正在尝试解决的另一个问题是我想将垂直线与框连接起来。为什么会有一小段距离?我该如何消除它?为什么两条线不在框中间连接?我该如何解决这个问题?

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{trees}
\begin{document}
\begin{figure}[h]
\begin{center}
\begin{tikzpicture}
\draw (0,0) -- (4,0) -- (4,4) -- (0,4) -- (0,0);
\node at (-4,3) (nodeXi) {$x_i$};
\node at (2,2) (nodeXj) {$x_j$};
\node at (2,4) (nodeD) {};
\draw (nodeXi) -- (nodeXj);
\draw (nodeXj) -- (nodeD);
\end{tikzpicture}
\end{center}
\caption{A meaningful caption}
\end{figure}
\end{document}

在此处输入图片描述

答案1

当你创建一个节点时,它默认为矩形,并有一个inner sep填充内容的正数。即使节点为空,它也有大小。

当你从或向一个节点绘制时,TiZ 计算节点边界上最近的点,并以此点为起点或止点进行绘制。您可以通过向图片中的所有节点添加绘制命令来查看发生了什么:

绘制节点

当不需要时,有多种方法可以避免这种效果。一种方法是指定节点具有形状coordinate,使其没有大小。

\node [coordinate] ...;
\coordinate ...;

另一种方法是指定绘图命令开始或结束的锚点。

\draw ... (<node>.<anchor>) ...;

例如,

  \draw (nodeXi.center) -- (nodeXj.center);
  \draw (nodeXj.center) -- (nodeD.center);

坐标和节点中心

\documentclass[border=10pt,tikz]{standalone}
\begin{document}
\begin{tikzpicture}[every node/.append style={draw=red}]
  \draw (0,0) rectangle (4,4);
  \node at (-4,3) (nodeXi) {$x_i$};
  \node at (2,2) (nodeXj) {$x_j$};
  \node at (2,4) (nodeD) {};
  \draw (nodeXi.center) -- (nodeXj.center);
  \draw (nodeXj.center) -- (nodeD.center);
  \begin{scope}[yshift=50mm]
    \draw (0,0) -- (4,0) -- (4,4) -- (0,4) -- cycle;
    \coordinate [label=below:$x_i$] (nodeXi') at (-4,3);
    \coordinate [label=below:$x_j$] (nodeXj') at (2,2);
    \node [coordinate] at (2,4) (nodeD') {};
    \draw (nodeXi') -- (nodeXj');
    \draw (nodeXj') -- (nodeD');
  \end{scope}
\end{tikzpicture}
\end{document}

如果我理解了另一个问题,我会试着回答。但我不明白,所以我不能。

答案2

你说的“...文本水平对齐到行中间...”的意思不太清楚。看看下面的解决方案是否是你在寻找的:

在此处输入图片描述

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{trees}
\begin{document}
\begin{figure}[h]
\begin{center}
\begin{tikzpicture}
\node (box) [draw, minimum size=4cm] at (2,2) {};
\node at (-4,3) (nodeXi) {$x_i$};
\node at (box)  (nodeXj) {$x_j$};
\draw (nodeXi) -- node[above=3mm] {horizontal text} (nodeXj);
\draw (nodeXj) -- node[right] {horizontal text}  (box.north);
\end{tikzpicture}
\end{center}
\caption{A meaningful caption}
\end{figure}
\end{document}

附录:根据您的评论,我猜您想获得类似这样的信息:

在此处输入图片描述

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{trees}
\begin{document}
\begin{figure}[h]
\begin{center}
\begin{tikzpicture}
\node (box) [draw, minimum size=4cm] at (2,2) {};
\node  (nodeXi) at (-4,3){$x_i$};
\draw (nodeXi)  -- node[above=3mm] {horizontal text} (box.center) 
                   node[right] {$x_j$}  
                -- node[right] {horizontal text}  (box.north);
\end{tikzpicture}
\end{center}
\caption{A meaningful caption}
\end{figure}
\end{document}

相关内容