编辑

编辑

此代码

\documentclass[border=2mm]{standalone}
\usepackage{libertine}
\usepackage{tikz}
\begin{document}
    \begin{tikzpicture}
        \sffamily
        \draw[very thick, label=below:{Darnay}] (0,-1) -- (0,-3);
        \draw[very thick, rotate=120, label=above left:{Lorry}] (0,-1) -- (0,-3);
        \draw[very thick, rotate=240, label=above right:{Stryver}] (0,-1) -- (0,-3);
        \node at (0,0) {Carton};
    \end{tikzpicture}
\end{document}

产生这样的结果:

纸盒

我的目标是让代码中指示的标签出现在相应行的末尾,但这并没有发生。基于这个答案我以为我知道自己在做什么,但也许我误读了?

另外,我可以将更多标签与线条关联起来吗(例如,每条线条的中间),还是需要创建单独的节点并单独放置它们?

答案1

Apath不是 a plot,适用于其中一个的选项不一定适用于另一个。您需要创建节点或坐标和/或标签或使用edge和标签或……有很多方法。

但是,您可以使用 将所有这些作为路径规范的一部分来执行\draw。我还移至了very thick图片的选项以避免重复。

例如:

\documentclass[border=2mm,tikz]{standalone}
\usepackage{libertine}

\begin{document}
\begin{tikzpicture}[very thick]
  \sffamily

  \draw (0,-1) -- (0,-3) node [label=below:{Darnay}] {};

  \draw[rotate=120] (0,-1) -- (0,-3) node [label=above left:{Lorry}] {};

  \draw[rotate=240] (0,-1) -- (0,-3) node [midway, label=right:Plane] {} node [pos=.75, label=right:Van] {} node [label=above right:{Stryver}] {};

  \node at (0,0) {Carton};
\end{tikzpicture}
\end{document}

默认情况下,anode位于最后位置,例如路径刚刚结束的位置。[实际情况比这稍微复杂一些,但对于我们的目的来说这已经足够了。]但你可以用位置说明符覆盖它,例如midwaynear endpos=.04

贴有标签的纸箱

编辑

这是一个更复杂的方法,它使用库来放置node标签和edge标签quotes以启用every edge quotes样式和使用"<label>"速记。

\documentclass[border=2mm,tikz]{standalone}
\usepackage{libertine}
\usetikzlibrary{quotes}
\begin{document}
\begin{tikzpicture}
  [
    very thick,
    every edge quotes/.append style={auto, text=blue}
  ]
  \sffamily

  \draw (0,0) node {Carton}
  (0,-1) edge ["Here"] node [at end, label=below:{Darnay}] {}  (0,-3)
  edge [rotate=120, "There"'] node [at end, label=above left:{Lorry}] {} (0,-3)
  edge [rotate=240, "Everywhere", "Plane"', "Van"' pos=0.8] node [at end, label=above right:{Stryver}] {} (0,-3)
  ;
\end{tikzpicture}
\end{document}

前卫纸箱

这是起什么作用的?

\usetikzlibrary{quotes}

允许使用如上所述的简写和样式。

  [
    very thick,
    every edge quotes/.append style={auto, text=blue}
  ]

设置整个图片的选项:绘制的路径应该是very thick,并且使用引号语法放置为标签的所有节点edge都应autoblue文本一起放置。通常,这会将标签放置在可接受的位置(根据上下文,在上方、下方、右侧、左侧),但我们可以在特定情况下反转此操作,使用'后将"<label>"其放在相反的一侧,即"<auto-placed label>" "<switched label>"'

path整个图表使用绘制而成\draw。我们从原点开始,立即创建包含文本 的第一个节点Carton

  \draw (0,0) node {Carton}

现在我们移动到(0,-1)但我们不想让这一举动被画出来,所以我们就移动到那里:

  (0,-1) 

其他所有东西都从这个点向不同的方向辐射。edge在这里是完美的,因为每个都edge将从相同的位置开始,但可以做自己的事情。第一个将使用引号语法转到此处的(0,-3). We'll put the node with the label beneath末尾:and we'll create a label

  edge ["Here"] node [at end, label=below:{Darnay}] {}  (0,-3)

由于我们没有改变任何东西,Here它将被auto放置在右侧并位于该midway点,因为这是默认设置。现在来看看第二条边,它被旋转了:

  edge [rotate=120, "There"'] node [at end, label=above left:{Lorry}] {} (0,-3)

这次,auto放置会将标签放在左侧,但我们希望标签放在右侧,因此我们添加了'后面的按钮"There"来切换侧面。第三个是最复杂的:

  edge [rotate=240, "Everywhere", "Plane"', "Van"' pos=0.8] node [at end, label=above right:{Stryver}] {} (0,-3)

末尾的节点放置方式与之前相同,且第一个标签Everywhere放置在默认位置(在本例中为左侧),即中间点。Plane也在中间,但它在右侧,因为我们添加了'Van也向右翻转,但它沿着 更远edge,因为pos=0.8,其中0是起点,1是终点edge

最后我们结束\draw操作:

  ;

编辑 编辑

扎尔科正确地指出,label末尾的节点实际上没有必要使用 s,因为文本可以进入节点本身。但是,需要进行一些调整来模拟现有的间距,因为label节点与它们标记的节点之间有一定距离,而它们标记的节点则没有。

这使用了positioning这里并不严格需要的库,但似乎给出了更令人愉悦的视觉效果:

\documentclass[border=2mm,tikz]{standalone}
\usepackage{libertine}
\usetikzlibrary{quotes,positioning}
\begin{document}
\begin{tikzpicture}
  [
    very thick,
    every edge quotes/.append style={auto, text=blue}
  ]
  \sffamily

  \draw (0,0) node {Carton}
  (0,-1) edge ["Here"] node [at end, below=10pt] {Darnay}  (0,-3)
  edge [rotate=120, "There"'] node [at end, above left=10pt] {Lorry} (0,-3)
  edge [rotate=240, "Everywhere", "Plane"', "Van"' pos=0.8] node [at end, above right=10pt] {Stryver} (0,-3)
  ;
\end{tikzpicture}
\end{document}

节点中的标签

答案2

是的,您可以将更多标签与您想要的任何位置的线条关联起来。只需定义一个类似于那个答案,并mark=at position #1根据您的需要进行定制。因此,此处的新宏接受两个参数;一个用于位置,另一个用于内容(label/.style args={#1#2}{...})。

\documentclass[border=2mm,tikz]{standalone}
\usetikzlibrary{decorations.markings}
\usepackage{libertine}

\begin{document}
    \begin{tikzpicture}[label/.style args={#1#2}{%
    postaction={ decorate,
    decoration={ markings, mark=at position #1 with \node #2;}}}]
        \sffamily
        \draw[very thick, label={1}{[below]{Darnay}}] (0,-1) -- (0,-3);
        \draw[very thick, label={.5}{{Darnay 2}}] (0,-1) -- (0,-3);
        \draw[very thick, rotate=120, label={1}{[above right]{Lorry}}](0,-1) -- (0,-3);
        \draw[very thick, rotate=240, label={1}{[above left]{Stryver}}](0,-1) -- (0,-3);
        \node at (0,0) {Carton};
    \end{tikzpicture}
\end{document}

在此处输入图片描述

相关内容