Frage

Diese Frage ergab sich aus der Frage

Ich möchte eine geschweifte Klammer erzeugen, die einige Textzeilen umfasst. Das Problem ist, dass ich die x-Koordinate manuell ausrichten müssen, die keine saubere Lösung.

Zur Zeit ich Verwendung

\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}

, die das gewünschte Ergebnis liefert:

tikz example1

Die unbefriedigende Sache ist, dass ich den xshift Wert von 1.597cm durch Versuch und Irrtum, um herauszufinden, (mehr oder weniger)

Ohne xshift Argument ist das Ergebnis:

tikz Beispiel 1

Ich denke, es eine elegante Art und Weise ist der expliziten xshift Wert zu vermeiden.

Der beste Weg wäre es meiner Meinung nach sein, den maximalen x-Wert von zwei Knoten zu berechnen und diese verwenden (wie bereits angedeutet von Geoff )

Aber es wäre schon sehr praktisch sein, um explizit die absoluten XValues ??der beiden Knotenpunkte zu definieren, während ihre aktuellen y-Werte zu halten. Dies würde das knifflig Verfahren der Anpassung der dritten Post Dezimalposition vermeiden, um sicherzustellen, dass die Klammer sieht vertikal.

War es hilfreich?

Lösung

Dies erfordert \usetikzlibrary{calc}. Es kann zwar ein sauberer Weg, sein.

Nehmen Sie die "xshift" vom Knoten n2 und dann verwenden:

\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}

Andere Tipps

Hier ist eine Version, die fit-Bibliothek, die Sie nicht Sorge erfordert darüber, welche Leitung längste, auf Kosten jede Zeile markieren.

\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}

Die yshift in der Probe des OP benötigt wird, indem den tatsächlichen Knoten Knoten vermieden (wie in Koordinaten gegen) mit einem Null-Breite X als Text.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top