質問
この質問は質問から生じました ここ
いくつかのテキストにまたがる巻き毛のブレースを作成したいと思います。問題は、X座標を手動で整列させる必要があることです。これはクリーンな解決策ではありません。
現在、使用しています
\begin{frame}{Example}
\begin{itemize}
\item The long Issue 1
\tikz[remember picture] \node[coordinate,yshift=0.7em] (n1) {}; \\
spanning 2 lines
\item Issue 2
\tikz[remember picture] \node[coordinate, xshift=1.597cm] (n2) {};
\item Issue 3
\end{itemize}
\visible<2->{
\begin{tikzpicture}[overlay,remember picture]
\draw[thick,decorate,decoration={brace,amplitude=5pt}]
(n1) -- (n2) node[midway, right=4pt] {One and two are cool};
\end{tikzpicture}
} % end visible
\end{frame}
目的の結果が生成されます。
不満なことは、試行錯誤によるXshift値1.597cmを把握しなければならなかったことです(多かれ少なかれ)
Xshift引数がなければ、結果は次のとおりです。
明示的なXshift値を避けるためのエレガントな方法があると思います。
最良の方法は、2つのノードの最大X値を計算してこれを使用することです(すでに示唆されているように ジェフ)
しかし、現在のY値を維持しながら、両方のノードの絶対x値を明示的に定義できるのは、すでに非常に便利です。これにより、ブレースが垂直に見えるように3番目のポストポストポスト位置を適応させるという不思議な手順が回避されます。
解決
これには必要です \usetikzlibrary{calc}
. 。ただし、よりクリーンな方法があるかもしれません。
「」を削除しますxshift
「ノードから n2
そして、使用してください:
\begin{tikzpicture}[overlay,remember picture]
\path (n2) -| node[coordinate] (n3) {} (n1);
\draw[thick,decorate,decoration={brace,amplitude=5pt}]
(n1) -- (n3);
\node[right=4pt] at ($(n1)!0.5!(n3)$) {One and two are cool};
\end{tikzpicture}
他のヒント
これは、各ラインをマークすることを犠牲にして、どのラインが最も長いかを心配する必要がないFITライブラリを使用するバージョンです。
\documentclass{beamer}
\usepackage{tikz}
\usetikzlibrary{decorations.pathreplacing}
\usetikzlibrary{fit}
\newcommand{\bracemark}[1]{\tikz[remember picture] \node[inner sep=0pt] (#1) {\vphantom{X}};}
\begin{document}
\begin{frame}{Example}
\begin{itemize}
\item The long Issue 1 \bracemark{n1} \\
gratuitious long line of text \bracemark{n2} \\
spanning 3 lines \bracemark{n3}
\item Issue 2 \bracemark{n4}
\item Issue 3
\end{itemize}
\visible<2->{
\begin{tikzpicture}[overlay,remember picture]
\node [inner sep=0pt, fit=(n1) (n2) (n3) (n4)] (bracemarks) {};
\draw[thick,decorate,decoration={brace,amplitude=5pt}]
(bracemarks.north east) -- (bracemarks.south east) node[midway, right=4pt] {One and two are cool};
\end{tikzpicture}
} % end visible
\end{frame}
\end{document}
OPのサンプルで必要なYShiftは、テキストとして幅xをゼロ幅xで実際のノード(座標とは対照的に)にすることで回避されます。
所属していません StackOverflow