Pregunta

Esta pregunta se debió a la pregunta aquí

Quiero producir una llave que se extiende por algunas líneas de texto. El problema es que tengo para alinear la coordenada X manualmente, lo que no es una solución limpia.

En la actualidad el uso de I

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

que produce el resultado deseado:

TikZ example1

Lo insatisfactorio es, que tenía que averiguar el valor xshift de 1.597cm por ensayo y error (más o menos)

Sin argumentos xshift el resultado es:

ejemplo TikZ 1

Creo que hay una manera elegante de evitar el valor xshift explícita.

La mejor manera sería que en mi humilde opinión en calcular el valor máximo de x de dos nodos y usar esto, (como ya se ha sugerido por Geoff )

Pero ya sería muy útil para poder definir explícitamente los XValues ??absolutos de ambos nodos, manteniendo sus valores de y actuales. Esto evitaría el procedimiento más incómoda de adaptar la tercera posición decimal posterior para asegurarse de que la llave de mira vertical.

¿Fue útil?

Solución

Esto requiere \usetikzlibrary{calc}. Puede haber una forma más limpia, sin embargo.

Eliminar el "xshift" de n2 nodo y luego usar:

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

Otros consejos

Aquí hay una versión usando la biblioteca ajuste que no le requiere que preocuparse de qué línea es más larga, a expensas de marcar cada línea.

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

imagen de salida

El yshift necesaria en la muestra del OP se evita haciendo que los nodos de los nodos reales (en contraposición a las coordenadas) con una X de anchura cero como texto.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top