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.

What I'm trying to achieve is a code structure to draw this kind of diagram:

example

I need to decorate a two-rows matrix grouping one or more columns with a square bracket above them, and then again with a square bracket grouping one or more subgroups (there may be more than three levels of nested groups).

At first I tried nesting matrices with above delimiter=\lbrack, but TikZ told me that You cannot nest pgfmatrix environments, yet, so I ended up with something like this

\documentclass{minimal}
\usepackage{tikz}
\usetikzlibrary{matrix,fit,positioning,decorations.pathreplacing,arrows,calc}
\begin{document}
\begin{tikzpicture}[
  group/.style={inner sep=0pt},
  brace/.style={very thick,decorate,decoration={brace,amplitude=10pt}},
  square/.style={-,to path={-- ++(0,.25) -| (\tikztotarget)}}
]
\matrix (A) [matrix of nodes]
{
  1--2 & 3--4 & 5 &
  6--7 & 8--9 & 10 &
  11--12 & 13--14 & 15--16 \\
  %
  I & V--I--V & V--IV &
  V$^6$--IV & V$^7$ & V--IV &
  I--V--I--IV & V$^7$--I & V--VI \\
};
\node (gdg) [group,fit=(A-1-1)(A-2-1)] {};
\node (boh) [group,fit=(A-1-2)(A-2-2)] {};
\node (z) [group,fit=(A-1-3)(A-2-3)] {};
\node (frase-a) [group,fit=(gdg)(boh)(z)] {};
\draw[square] ([yshift=.5cm]gdg.west) to ([yshift=.5cm]gdg.east);
\draw[square] ([yshift=.5cm]boh.west) to ([yshift=.5cm]boh.east);
\draw[square] ([yshift=.5cm]z.west) to ([yshift=.5cm]z.east);

\draw[square] ([yshift=1cm]frase-a.west) to ([yshift=1cm]frase-a.east);

\draw[brace] ([yshift=2cm]A.west) -- ([yshift=2cm]A.east);
\end{tikzpicture}
\end{document}

where I first draw the matrix, then I group each column in an invisible node (with fit) and then draw the square brackets as paths from/to west/east anchor point of groups, shifting coordinates on the y-axis. Which is quite unmaintainable and ugly. Of course the main target is to build something that could adapt to the variable width of matrix columns. Any suggestion would be very appreciated!

share|improve this question
1  
Welcome to TeX.sx! –  Jubobs Apr 26 '13 at 22:59
    
Perhaps you can adapt the solutions from Matrix with labels nested in braces for this. –  Peter Grill Apr 26 '13 at 23:36
    
Since it came out that the solution might not involve TikZ nor matrices nor decorations, should I change the title of my question? –  Heruan Apr 27 '13 at 9:24

2 Answers 2

Inspired by David Carlisle answer, I came up with this solution:

\documentclass{minimal}
\usepackage{mathtools}
\newcommand{\mfrac}[2]{\genfrac{}{}{0pt}{}{#1}{#2}}
\begin{document}
\[
\overbrace{
  \overbracket{
    \overbracket{\mfrac{1-2}{I}}^{\text{Gdg}}
    \overbracket{\mfrac{3-4}{V-I-V}}
    \overbracket{\mfrac{5}{V-IV}}^{z}
  }^{\text{frase }a}
  \overbracket{
    \overbracket{\mfrac{6-7}{V^6}}
    \overbracket{\mfrac{8-9}{V^7}}^{y}
    \overbracket{\mfrac{10}{V-IV}}^{z'}
  }^{\text{frase }b/a'}
  \overbracket{
    \overbracket{\mfrac{11-12}{I-V-I-IV}}
    \overbracket{\mfrac{13-14}{V^7-I}}^{y'}
    \overbracket{\mfrac{15-16}{V-VI}}^{z''}
  }^{\text{frase }a'/b}
}^{A}
\]
\end{document}

which results in:

image

Now it's flexible and maintainable, I just need to find out to add labels outside the brace on the left of each line.

share|improve this answer
    
\llap{hello\hspace{1cm}}1-2 would out hello to the left of the 1-2 entry –  David Carlisle Apr 27 '13 at 22:59
    
+1 for being inspired by me:-) –  David Carlisle Apr 27 '13 at 23:01

This doesn't use TiKz, and could be prettier but

enter image description here

\documentclass{article}
\usepackage{array}
\makeatletter
\newcommand\ob{%
 \vrule\@width .7pt\@height3pt\hbox{$\smash-\mkern-3mu$}%
  \xleaders\hbox{$\mkern-3mu\smash-\mkern-3mu$}\hfill
  \hbox{$\mkern-3mu\smash-$}%
  \vrule\@width .7pt}

\makeatother
\begin{document}

\[
\overbrace{
\begin{array}{*{9}c}
\multicolumn{3}{c}{\mathrm{something}}&
\multicolumn{3}{c}{\mathrm{something}\quad b/a'}&
\multicolumn{3}{c}{\mathrm{something}\quad b'/a}\\
\omit\span\omit\span\omit\kern\tabcolsep
\ob\kern\tabcolsep&%
\omit\span\omit\span\omit\kern\tabcolsep
\ob\kern\tabcolsep&%
\omit\span\omit\span\omit\kern\tabcolsep
\ob\kern\tabcolsep\\
GdG&&z&&y&z'&&y'&z''\\
\omit\kern\tabcolsep
\ob\kern\tabcolsep&\ob&\ob&\ob&\ob&\ob&\ob&\ob&\ob\\
1-2&3-4&5  &6-7   &8-9&10&11-12&13-14     &15-16\\
I  &V  &V^6&V(I-N)&X  &Y &Z     &(V^3)(X-V)&V^5
\end{array}}^A
\]
\end{document}
share|improve this answer

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.