5

この質問はここでの質問から生じました

数行のテキストにまたがる中括弧を作成したいと思います。問題は、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}

これにより、目的の結果が得られます。

tikz example1

不満なのは、試行錯誤しながら1.597cmのxshift値を計算しなければならなかったことです(多かれ少なかれ)

xshift引数がない場合、結果は次のようになります。

tikzの例1

明示的なxshift値を回避するための洗練された方法があると思います。

最善の方法は、2つのノードの最大x値を計算し、これを使用することです( Geoffによってすでに提案されているように)

ただし、現在のy値を維持しながら、両方のノードの絶対x値を明示的に定義できると、すでに非常に便利です。これにより、ブレースが垂直に見えるようにするために、小数点以下第3位を調整するという面倒な手順を回避できます。

4

2 に答える 2

6

これにはが必要\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}
于 2010-05-06T14:42:22.683 に答える
1

これは、フィットライブラリを使用したバージョンで、各行にマークを付けることを犠牲にして、どの行が最も長いかを気にする必要がありません。

\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を使用してノードを(座標ではなく)実際のノードにすることで回避されます。

于 2017-02-06T03:13:37.603 に答える