我正在使用brace
TikZdecorations.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}
输出变成:
答案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}