Question

Cette question résulte de la question

Je veux produire une accolade qui couvre quelques lignes de texte. Le problème est que j'ai pour aligner la coordonnée x manuellement, ce qui est une solution propre.

utilisez actuellement 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}

qui produit le résultat souhaité:

tikz example1

La chose est peu satisfaisante, que je devais trouver la valeur xshift de 1.597cm par essai et erreur (plus ou moins)

Sans argument xshift le résultat est:

exemple de tikz 1

Je crois qu'il ya une façon élégante d'éviter la valeur xshift explicite.

La meilleure façon serait-il IMHO est de calculer la valeur de x maximum de deux nœuds et utiliser, (comme cela a déjà suggéré par Geoff )

Mais il serait déjà très pratique pour pouvoir définir explicitement les XValues ??absolues des deux nœuds tout en conservant leurs valeurs actuelles y. Cela permettrait d'éviter la procédure d'adaptation de la Checklist troisième position après la virgule pour faire en sorte que l'accolade semble verticale.

Était-ce utile?

La solution

Cela nécessite \usetikzlibrary{calc}. Il peut y avoir un moyen plus propre, cependant.

Supprimer le "xshift" du noeud n2 puis utilisez:

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

Autres conseils

Voici une version utilisant la bibliothèque qui ne forme vous oblige pas à vous soucier de la ligne est la plus longue, au détriment du marquage de chaque ligne.

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

Le YSHIFT nécessaire dans l'échantillon de l'OP est évitée en faisant des noeuds des noeuds réels (par opposition à des coordonnées) avec un X sous forme de texte de largeur nulle.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top