![Tikz:使用“\draw”将文本添加到线条并连接线条](https://linux22.com/image/346834/Tikz%EF%BC%9A%E4%BD%BF%E7%94%A8%E2%80%9C%5Cdraw%E2%80%9D%E5%B0%86%E6%96%87%E6%9C%AC%E6%B7%BB%E5%8A%A0%E5%88%B0%E7%BA%BF%E6%9D%A1%E5%B9%B6%E8%BF%9E%E6%8E%A5%E7%BA%BF%E6%9D%A1.png)
我有一个框和两条附加线。现在我想添加一些水平对齐到线中间的文本。我没有找到任何不太复杂的有用示例。
我正在尝试解决的另一个问题是我想将垂直线与框连接起来。为什么会有一小段距离?我该如何消除它?为什么两条线不在框中间连接?我该如何解决这个问题?
\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
填充内容的正数。即使节点为空,它也有大小。
当你从或向一个节点绘制时,Ti钾Z 计算节点边界上最近的点,并以此点为起点或止点进行绘制。您可以通过向图片中的所有节点添加绘制命令来查看发生了什么:
当不需要时,有多种方法可以避免这种效果。一种方法是指定节点具有形状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}