题
这个问题来自这个问题 这里
我想产生一个横跨一些文本的卷发支架。问题是我必须手动对齐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}
产生预期的结果:
令人不满意的是,我不得不通过反复试验(或多或少)弄清楚1.597厘米的X速度值
没有x shift参数,结果是:
我想有一种优雅的方法可以避免显式X什夫特值。
恕我直言,最好的方法是计算两个节点的最大x值并使用它(如已经建议 杰夫)
但是,能够在保持当前y值的同时明确定义两个节点的绝对XVALUES已经非常方便。这将避免适应第三位后小数位置以确保支架看起来垂直的过程。
解决方案
这需要 \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}
其他提示
这是一个使用拟合库的版本,不需要您担心哪个行最长,但以标记每行的代价为代价。
\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}
通过使节点以零宽x作为文本制作节点实际节点(与坐标相对),可以避免OP样品中所需的YSHIFT。
不隶属于 StackOverflow