2010-05-05 13 views
5

Diese Frage ergab sich aus der Frage heretikz: set entsprechenden x-Wert für einen Knoten

ich eine geschweifte Klammer produzieren wollen, die einige Textzeilen umfasst. Das Problem ist, dass ich die X-Koordinate manuell ausrichten muss, was keine saubere Lösung ist.

Derzeit verwende ich

\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 produziert:

tikz example1

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

Ohne xshift Argument ist das Ergebnis:

tikz example 1

Ich denke, es gibt eine elegante Möglichkeit, den expliziten xshift Wert zu vermeiden.

Der beste Weg wäre es imho den maximalen x-Wert von zwei Knoten zu berechnen und diese verwenden (wie bereits von Geoff vorgeschlagen)

Aber es wäre schon sehr praktisch sein, um explizit die absolute definieren x Werte beider Knoten, während ihre aktuellen y-Werte beibehalten werden. Dies würde die knifflige Prozedur der Anpassung der dritten Nachkommastelle vermeiden, um sicherzustellen, dass die Klammer vertikal aussieht.

Antwort

4

Dies erfordert \usetikzlibrary{calc}. Es kann jedoch einen saubereren Weg geben.

entfernen 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} 
+0

Eigentlich glaube ich nicht, dass Sie calc benötigen. Sie können die gleiche Zeile verwenden wie von basweber, aber setzen Sie einfach (n3) statt (n2). Der Schlüssel in dieser Antwort ist die Definition des Wendepunkts des geradlinigen Pfades (n3). Guter Anruf! – Geoff

+0

Ich habe versucht, den ursprünglichen Code (mit "Mittelpunkt") zu verwenden, aber aus irgendeinem Grund wurde der Knoten am Ende der Klammer platziert (an der gleichen y-Koordinate wie n2). Ich bin nicht sicher, warum das der Fall war. – ESultanik

+0

Vielen Dank. Es funktioniert und es ist eine saubere Lösung. @Geoff: Sie haben Recht: ($ (n1)! 0,5! (N3) $) (und damit calc) wird nicht benötigt. Auf meinem Rechner erzeugen die beiden Versionen das gleiche Ergebnis. Danke, dass du darauf hingewiesen hast. – basweber

0

Hier ist eine Version, die fit-Bibliothek, die Sie nicht benötigen, um Sorgen über die Linie längste, auf Kosten jeder Markierung Linie.

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

Image of output

yshift Der in der Probe des OP benötigt wird, indem die Knoten tatsächlichen Knoten vermieden mit einer Null-Breite X als Text (wie in Koordinaten im Gegensatz).

Verwandte Themen