2010-05-05 34 views
5

Câu hỏi này là kết quả của câu hỏi heretikz: set x giá trị thích hợp cho một nút

Tôi muốn tạo ra một cú đúp xoăn mà kéo dài một số dòng văn bản. Vấn đề là tôi phải căn chỉnh tọa độ x theo cách thủ công, đây không phải là giải pháp sạch.

Hiện nay tôi sử dụng

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

trong đó sản xuất các kết quả mong muốn:

tikz example1

Điều không hài lòng là, rằng tôi phải tìm ra các giá trị xshift của 1.597cm bởi thử và sai (nhiều hơn hoặc ít hơn)

Nếu không có đối số xshift kết quả là:

tikz example 1

Tôi đoán có một cách thanh lịch để tránh giá trị xshift rõ ràng.

Cách tốt nhất là nó IMHO được để tính toán x giá trị tối đa là hai nút và sử dụng này, (như đã được đề xuất bởi Geoff)

Nhưng nó sẽ đã có rất tiện dụng để có thể xác định một cách rõ ràng tuyệt đối xvalues ​​của cả hai nút trong khi vẫn giữ giá trị y hiện tại của chúng. Điều này sẽ tránh được thủ tục khó sử dụng vị trí thập phân thứ ba để đảm bảo rằng cú đúp trông thẳng đứng.

Trả lời

4

Điều này yêu cầu \usetikzlibrary{calc}. Có thể có một cách sạch hơn, mặc dù.

Tháo "xshift" từ nút n2 và sau đó sử dụng:

\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

Thực ra, tôi không nghĩ bạn cần calc. Bạn có thể sử dụng cùng một dòng như được trình bày bởi basweber, nhưng chỉ cần đặt (n3) thay vì (n2). Chìa khóa trong câu trả lời này là xác định bước ngoặt của đường thẳng tuyến tính (n3). Cuộc gọi tốt! – Geoff

+0

Tôi đã thử sử dụng mã gốc (với "điểm giữa") nhưng vì một lý do nào đó kết thúc việc đặt nút ở cuối dấu ngoặc nhọn (ở cùng toạ độ y là n2). Tôi không chắc tại sao lại như thế. – ESultanik

+0

Cảm ơn bạn rất nhiều. Nó hoạt động và một giải pháp sạch sẽ của nó. @Geoff: Bạn đúng: ($ (n1)! 0,5! (N3) $) (và do đó calc) là không cần thiết. Trên máy của tôi, hai phiên bản tạo ra cùng một kết quả. Cảm ơn bạn đã chỉ ra điều đó. – basweber

0

Dưới đây là một phiên bản sử dụng thư viện phù hợp mà không yêu cầu bạn phải lo lắng về những dòng là dài nhất, phải trả giá bằng đánh dấu mỗi hàng.

\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

Các yshift cần thiết trong mẫu của OP được tránh bằng cách làm cho các nút nút thực tế (như trái ngược với tọa độ) với một số không-width X dưới dạng văn bản.

Các vấn đề liên quan