2010-05-05 7 views
13

Sto producendo alcune diapositive in latex beamer (ma penso che non si tratti di una domanda specifica per il beamer).Latex: parentesi graffe estensibili al di fuori della matematica

Ho il seguente:

\begin{itemize} 
\item Issue1 
\item Issue2 
\item Issue3 
\end{itemize} 

Ora, voglio avere un diritto parentesi graffa (vale a dire '}') dietro le voci di una superficie di oltre issue1 e issue2. E ovviamente voglio scrivere qualcosa dietro quel tutore riccio.

In un mondo perfetto avrei scritto qualcosa del tipo:

\begin{itemize} 
\left . 
\item Issue1 
\item Issue2 
\right \} One and Two are cool 
\item Issue3 
\end{itemize} 

Questo non funziona perché non sono in un ambiente di matematica e non riesco a mettere l'intero frammento all'interno di un ambiente di matematica perché itemize non avrebbe funzionato in quel caso.

C'è una soluzione pulita o un hack per produrre il risultato desiderato?

Cordiali saluti, Bastian.

+0

Non è solo \} e non \\}? – Paul

+0

Hai ragione. (Lo snippet non è stato formattato come codice prima, quindi ho dovuto scrivere '\\}' per far apparire '\}. Dopo la modifica ho dimenticato di rimuovere la barra rovesciata.) – basweber

+0

@Svante: Grazie per le correzioni. – basweber

risposta

18

Io userei tikz e fare un overlay.

primo include i pacchetti adeguati (non potrebbe essere necessario includere tikz poiché questa è una domanda beamer):

\usepackage{tikz} 
\usetikzlibrary{decorations.pathreplacing} 

Poi, quando fate la vostra lista, assegnare un nome a luoghi dopo ogni elemento:

\begin{itemize} 
    \item Issue 1  
     \tikz[remember picture] \node[coordinate,yshift=0.5em] (n1) {}; 
    \item Issue 2 
     \tikz[remember picture] \node[coordinate] (n2) {}; 
    \item Issue 3 
\end{itemize} 

(Nota: ho spostato il valore y da 1/2 di una linea forse più sarebbe meglio.)

.210

Perché abbiamo usato remember picture possiamo fare riferimento a questi luoghi in una sovrapposizione:

\begin{tikzpicture}[overlay,remember picture] 
     \path (n2) -| node[coordinate] (n3) {} (n1); 
     \draw[thick,decorate,decoration={brace,amplitude=3pt}] 
      (n1) -- (n3) node[midway, right=4pt] {One and two are cool}; 
    \end{tikzpicture} 

Il percorso è lì per affrontare gli elementi che non hanno la stessa larghezza. Questa modifica proviene da ESultanik's answer.

Il risultato è:

alt text

Nota a margine: È possibile rimuovere tutti i remember picture opzioni e aggiungere quanto segue per aggiungere automaticamente ricordarsi di tutte le foto:

\tikzstyle{every picture}+=[remember picture] 
+0

Ecco fatto! Davvero fico! Inserisco un esempio adattato di seguito. Molte grazie. – basweber

+0

Non l'ho mai usato prima, potrebbe non essere così carino quando gli articoli non hanno la stessa lunghezza. In questo caso probabilmente dovrai impostare un po 'di valore 'x' per' \ node's o magari usare una larghezza di gomma come '\ hspace {2in}'. Sono sicuro che esiste un modo intelligente tikz per calcolare anche il valore max 'x' per due nodi. – Geoff

+0

Aggiornato per gestire articoli con larghezza diversa, utilizzando la risposta di ESultanik. – Geoff

3

Un modo per aggirare questo problema è utilizzare un ambiente matematico come l'allineamento, posizionare i punti elenco a mano (con \ punto elenco) e quindi utilizzare le risorse dell'ambiente matematico per grosse parentesi e simili.

+0

Ci ho pensato (ma senza sapere $ \ bullet $ in particolare). Esiste un modo per produrre un simbolo simile al punto elenco predefinito dell'ambiente itemize in un documento di beamer? Se è così, questa soluzione sembra abbastanza applicabile. – basweber

11

Si potrebbe (ab) usare una tabella, invece:

\documentclass{article} 
\usepackage{multirow} 

\begin{document} 

\begin{tabular}{ll} 

\textbullet Issue 1 & \multirow{2}{*}{{\LARGE \}} One and Two are cool} \\ 
\textbullet Issue 2              \\ 
\textbullet Issue 3              \\ 

\end{tabular} 

\end{document} 

produce:

rimosso morti collegamento Imageshack

+0

+1: questa risposta mi piace molto meglio di quella di @ Seamus. –

+0

@Mark, grazie, anche se quando si generano '}' su più di 3 (o più) righe, potrebbe diventare troppo largo. Ma quello sarà qualcosa che * basweber * dovrebbe/vorrebbe provare a vedere per se stesso. –

+0

Sì, la generazione di 3 o più elementi è nella mia lista dei desideri. ;) E c'è un altro Problema: $ \ bullet $ sembra diverso dal proiettile predefinito dell'ambiente itemize (in un documento di beamer). – basweber

0

ho fatto qualcosa di simile una volta. Ho lasciato la lista in una colonna a sinistra, e nella colonna di destra, ho fatto il $\right\}$ -thing in modo che fosse alto come alcuni \mbox o qualcosa (che ho deciso con \vphantom o qualcosa di simile). Sfortunatamente non ho il tempo di scavare ... In realtà non ho tempo di stare in SO in questo momento;)

+2

@aioobe, è brutto come le altre soluzioni. – aioobe

+1

stai parlando da solo? :) –

+0

voluto mettere. il commento lì prima di qualcun altro;) – aioobe

5

Qui è il codice Geoffs con alcuni piccoli adattamenti (solo per altri utenti di beamer)

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

Ressult (2a diapositiva di quel frame):

beamer result

Gli adattamenti sono:

  • aggiunto il visibile comando (perché ritengo è utile per integrarsi tutore più tardi)
  • reso gli elementi più complessi, quindi l'uso di xshift divenne necessario (ho capito ha valore xshift semplicemente per tentativi ed errori, quindi questa è una goccia di amarezza)
+0

Sì, il 'xshift', questo mi sconvolge anche. Io * so * c'è un modo per calcolare il valore massimo * x * per due nodi, io non conosco abbastanza bene il tikz. – Geoff

+0

Ho aperto una nuova domanda: http://stackoverflow.com/questions/2777179/tikz-set-appropriate-x-value-for-a-ode Vediamo se qualcuno si presenta con una bella soluzione. – basweber

+0

Buono. Stavo pensando di farlo. Ho perso un sacco di tempo cercando di capirlo da solo. Ci sono tanti esempi di Tikz, ma è così flessibile che è difficile trovare esattamente ciò di cui hai bisogno (o pensi di aver bisogno). – Geoff

0

Ho provato la mia idea, di seguito. Non funziona: sfortunatamente, le vbox prodotte dall'ambiente itemize hanno tutte la larghezza \textwidth.

L'interfaccia utente del mio suggerimento è buona, e ridefinendo \item dovrebbe essere possibile ottenere che l'oggetto vbox abbia una larghezza ragionevole. O calcolare una larghezza ragionevole per le vbox contenenti gli elementi. Ma poiché ci sono già soluzioni funzionali, non passerò più tempo su questo.

 
\documentclass{article} 

\def\setgrouptext#1{\gdef\grouptext{#1}} 
\newenvironment{groupeditems}{\begin{displaymath}\left.\vbox\bgroup\setgrouptext}{% 
    \egroup\right\rbrace\hbox{\grouptext}\end{displaymath}} 

\begin{document} 

\begin{itemize} 
\item Line 1 
\begin{groupeditems}{Lines 2 and 3 together!} 
\item Line 2 
\item Line 3 
\end{groupeditems} 
\item Line 4 
\end{itemize} 

\end{document}