Take the 2-minute tour ×
TeX - LaTeX Stack Exchange is a question and answer site for users of TeX, LaTeX, ConTeXt, and related typesetting systems. It's 100% free, no registration required.

I'm writing a short document listing some chronological events. I want to pick out a period with a big brace. Here's a quick mockup:

alt text

What's the best way to do this? Can I set the size declaratively - ie from line A to line B - somehow?

share|improve this question
add comment

6 Answers 6

up vote 19 down vote accepted

I suggest a variation of Giel's answer with tabular

$\left.\begin{tabular}{l}
line \\
one more line
\end{tabular}\right\}$

(or smth like {tabular}{p{5cm}} if you need not a couple of short lines but a paragraph inside the tabular).

share|improve this answer
    
This is good. Thanks. –  Internet man Aug 11 '10 at 20:01
    
Good idea. To span more rows, use \parbox instead of tabular. $\left. \parbox{\linewidth}{\lipsum[1]} \,\right\} \textrm{Title}$. Note: \lipsum[1] is a dummy text from lipsum.sty package. –  xport Nov 27 '10 at 14:10
add comment

I'd seriously suggest using tikz for this. Here's an alternative to Caramdir's (excellent) solution:

\documentclass{article}

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

\newcommand{\tikzmark}[1]{\tikz[overlay,remember picture] \node (#1) {};}

\begin{document}

\hfill\tikzmark{right}
\begin{itemize}
\item First line
\item Second line \tikzmark{2nd}
\item Third line, which is quite long and seemingly tedious in the extreme
\item Fourth line, which isn't as long as the third \tikzmark{4th}
\item Fifth line
\end{itemize}

\begin{tikzpicture}[overlay, remember picture]
\draw [decoration={brace,amplitude=0.5em},decorate,ultra thick,gray]
 ($(right)!(2nd.north)!($(right)-(0,1)$)$) --  ($(right)!(4th.south)!($(right)-(0,1)$)$);
\end{tikzpicture}
\end{document}

What I like about this one is that it doesn't mess around with how the actual data is put in, the decoration is added afterwards almost as an afterthought, which (to me) fits in better with the feel of what you're trying to do.

What isn't so good is the placement of the brace horizontally. Because I don't know how your are typesetting your data, nor what sort of data it is, I've just shoved the brace to the right-hand side. If your data is more structured, as the graphic suggests, then it would be easy to make it appear in the right place. (Indeed, from experimenting, I'd say that if your data isn't nicely structured - by which I mean that the lines should be of similar widths - then a brace at the right-hand side doesn't look good as it's not easy to see exactly which lines it is including or excluding.)

share|improve this answer
3  
That \tikzmark macro is a good idea, I have to remember that. –  Caramdir Aug 11 '10 at 21:00
    
I think the result looks nicer if the tikzmark places its not slightly above the baseline: \node at (0,0.7ex) (#1)... –  Seamus Mar 1 '11 at 14:37
    
@Seamus: Since I answered this, I've changed my way of doing it. I now place a \vphantom{X} in the node which makes it better placed. (Actually, I have \tikzmarkX which does this, and various other variants .. but you just knew that I'd have a more complicated scheme, didn't you!) –  Loop Space Mar 1 '11 at 18:11
7  
Why \node (#1) {};? \coordinate (#1); would be better. It avoids border issues with (name) versus (name.center) etc. –  Martin Scharrer Jun 24 '11 at 12:20
    
@AndrewStacey - I have similar need and it works fine for one page but the bracket does not travel to next page. If I create start and end spanning two pages then entire bracket appears on the second page. Is it possible to create a bracket that can span across pages. Thanks for your help –  Raama Oct 25 '12 at 16:35
show 1 more comment

Just for fun an answer using TikZ:

\usetikzlibrary{matrix,decorations.pathreplacing}

\begin{tikzpicture}
    \matrix (m) [matrix of nodes,column 1/.style={anchor=west}]
    {
    The first line. \\
    The second line. \\
    A very long third line that goes on. \\
    A fourth line. \\
    And finally a last line. \\
    };

    \draw [decoration={brace,amplitude=0.5em},decorate,ultra thick,gray]
        (m-2-1.north -| m.east) -- (m-4-1.south -| m.east);
\end{tikzpicture}

example rendering

To specify from which row to which row the brace should go change m-2-1 and m-4-1 accordingly (the second number is always the row). To change thickness and color, change the ultra thick and gray parts (see section 14.3 of the TikZ manual). To add a text to the right of the brace change -- to -- node[black, right=0.7em] {some text}. The amplitude option defines how much the brace extends and you can add ,aspect=factor (with factor replaced by a number between 0 and 1) to specify where the pointy part lies on the brace (see section 27.3). Changing anchor=west to anchor=east make the lines right aligned, removing it centers them.

share|improve this answer
    
Additional question: if I want some further text to the right of the brace, could you say how to do it? (The idea is that in the document I'm trying to typeset, a bunch of lines need to be collected together with a brace and some text like "and their spouses" on the right of the brace.) I could ask a new question, but if the answer is a trivial variation of this, it would pretty much be a duplication. –  ShreevatsaR Oct 26 '11 at 16:55
    
@ShreevatsaR: Simply replace -- in the \draw command by -- node[right=1em] {and their spouses} (adjust the 1em to whatever distance looks good for your text). Exactly the same also works for Andrew's solution. –  Caramdir Oct 26 '11 at 23:16
add comment

In mathmode you could use some trickery like putting a matrix to the left of a \right}, e.g.:

\documentclass{article}

\begin{document}

\begin{displaymath}
    \left. \begin{array}{cc}
        - & - \\
        - & - \\
        - & -
    \end{array} \right\}
\end{displaymath}

\end{document}
share|improve this answer
    
Ooh, actually this works nicely, though I'm not sure how it will copy with a body of text. I might also be able to use \cases in an unconventional way... –  Internet man Aug 11 '10 at 19:51
    
@tex-offender you can wrap bodies of text in an \mbox{}, within that box text is rendered in normal (i.e. non-math) mode –  Giel Aug 13 '10 at 21:29
add comment

A simpler solution:

\documentclass{article}
\usepackage{lipsum}
\usepackage{schemata}
\begin{document}
\lipsum[1]
\schema[close]{\lipsum[2]}{}
\lipsum[3]
\end{document}

MWE

share|improve this answer
1  
A very elegant solution. It's worth mentioning that the second argument can be used to place text in the margin, i.e. \schema[close]{body text}{margin text} –  onewhaleid 20 hours ago
add comment

You can use pstricks-add.sty as follows: (details can be found here on page 18)

\documentclass{article}

\usepackage{pstricks-add}
\usepackage{lipsum}

\begin{document}
\lipsum[1]
\par\noindent%
\begin{minipage}{0.99\linewidth}%adjust if necessary
\noindent\hfill\rnode{A}{}~
\par
\vspace*{-0.5ex}%adjust if necessary
\lipsum[1]
\vspace*{-2ex}%adjust if necessary
\noindent\hfill\hspace{5mm}\rnode{B}{}~%
\psbrace[linecolor=red,ref=lC](B)(A){Important!}
\end{minipage}
\par
\lipsum[1]
\end{document}

This is the output:

alt text

share|improve this answer
1  
the braced paragraph lacks the expected paragraph indent. –  barbara beeton Nov 7 '11 at 19:38
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.