沿装饰路径进行坐标

沿装饰路径进行坐标

我正在使用braceTikZdecorations.pathreplacing库中的装饰在一些节点周围绘制一个括号。现在我想将括号的尖端连接到另一条路径(用例:标记方程中的项)。首先,我使用了 LaTeX 命令\overbrace,但意识到将 -path 连接到尖端会很困难tikz。使用 TikZ 装饰应该更容易brace。但是,如果我node[midway]沿着路径放置,节点将放置在未改变路径的中间,而不是装饰路径的中间。以下是代码以及不想要的输出。

\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{decorations.pathreplacing}
\begin{document}
\begin{tikzpicture}
\node (spam) at (1, 1) {Spam};
\node (eggs) at (4, 1) {Eggs};
\draw[decoration={brace,amplitude=5mm}, decorate] (spam.north) -- (eggs.north) coordinate[midway] (mid);
\draw (mid) -- ++(0,1);
\end{tikzpicture}
\end{document}

第二条路径连接不正确

当然,在本例中,我可以简单地\draw用 替换第二个 -command \draw (mid) ++(0,5mm) -- ++(0,1);。但我想要更稳定的东西,不需要手动调整,甚至可以用于任意装饰路径。

所以,我的问题是:

  • 如何在装饰路径上的某个点放置坐标?

更新2012-12-17:为了展示用例,我在这里添加了解决方案的图片。

在此处输入图片描述

答案1

这很有趣!:)

您可以通过认识到装饰本身就是一条路径来实现这一点。

您接下来需要做的就是访问该路径!

您可以通过postaction在路径上应用并再次装饰它来做到这一点!

但由于装饰位于单独的密钥目录中,因此您需要明确告知使用/tikz/postaction。然后您可以随意访问任何坐标,我选择使用装饰库markings

以下是具体内容:

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{decorations.pathreplacing}
\usepgflibrary{decorations.markings}
\begin{document}
\begin{tikzpicture}
  \node (spam) at (1, 1) {Spam};
  \node (eggs) at (4, 1) {Eggs};
  \node (bacon) at (4, 3) {Bacon};
  \draw[decoration={brace,amplitude=5mm}, decorate] (spam.north) -- (eggs.north) coordinate[midway] (mid);
  \draw (mid) -- ++(0,1);
  \draw[decoration={brace,amplitude=5mm,
      /tikz/postaction={
          decoration={
              markings,
              mark=at position 0.45 with \coordinate (Mb);,
              mark=at position 0.5 with \coordinate (M);,
              mark=at position 0.55 with \coordinate (Ma);
          },decorate
      }
  },decorate] (spam.north) -- (bacon.north);
  \draw[red] (Mb) circle (2pt);
  \draw[blue] (M) circle (2pt);
  \draw[green] (Ma) circle (2pt);
\end{tikzpicture}
\end{document}

输出变成: tex 的输出

答案2

括号不是路径,而是沿路径放置的对象(spam.north) -- (eggs.north)。请参阅第零个答案以使用括号的路径。这是正确答案。

另一种可能性是在装饰之后立即使用当前边界框,但只有当框对称时才有可能。这就是我使用它的原因minimum width=1.5cm

\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{decorations.pathreplacing}
\begin{document}
\begin{tikzpicture}
\node[minimum width=1.5cm] (spam) at (1, 1) {Spam};
\node[minimum width=1.5cm] (eggs) at (4, 1) {Eggs};
\draw[decoration={brace,amplitude=5mm}, decorate] (spam.north) -- (eggs.north); % coordinate[midway] (mid);
\draw (current bounding box.north) -- ++(0,1);
\end{tikzpicture}
\end{document}

在此处输入图片描述

相关内容