Domanda

Questa domanda ha portato dalla questione qui

I vuole produrre una parentesi graffa che attraversa alcune righe di testo. Il problema è che ho per allineare manualmente le coordinate x, che non è una soluzione pulita.

uso Attualmente mi

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

che produce il risultato desiderato:

tikz esempio1

La cosa insoddisfacente è, che ho dovuto capire il valore xshift di 1,597 centimetri per tentativi (più o meno)

Senza argomento xshift il risultato è il seguente:

tikz esempio 1

Credo che ci sia un modo elegante per evitare il valore xshift esplicito.

Il modo migliore sarebbe IMHO quello di calcolare il valore massimo x di due nodi e utilizzare questo, (come già suggerito da Geoff )

Ma sarebbe già essere molto utile per essere in grado di definire in modo esplicito i XValues ??assoluti di entrambi i nodi, mantenendo i loro valori y correnti. Ciò eviterebbe la procedura laborioso di adattare la terza posizione di post decimale per garantire che la coppia sembra verticale.

È stato utile?

Soluzione

Ciò richiede \usetikzlibrary{calc}. Ci può essere un modo più pulito, però.

Rimuovere la "xshift" dal nodo n2 e quindi utilizzare:

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

Altri suggerimenti

Ecco una versione che utilizza la libreria in forma, che non richiede di preoccuparsi di quale linea è più lunga, a scapito di marcatura ogni riga.

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

immagine di output

Il yshift necessario nel campione del PO è evitata facendo i nodi nodi reali (al contrario di coordinate) con una X di ampiezza zero come testo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top