In a table, how can I draw a horizontal line that goes only through some of the cells? I mean a line like the one in the Foo and in the Bar area of this table:

+----+-----+
|Foo |1 |2 |
|    |1 |2 |
|    +--+--+
|    |1 |2 |
|    |1 |2 |
+----+-----+
|Bar |1 |2 |
|    |1 |2 |
|    +--+--+
|    |1 |2 |
|    |1 |2 |
+----+--+--+
up vote 144 down vote accepted

Instead of nested tables as xport_is_sleeping suggested, you can also use \cline{2-3} which draws a partial line starting on column 2 and ending on column 3 and use \multirow to center the words Foo and Bar on the lines if that's what you want:

alt text

\documentclass{article}
\usepackage{array,multirow}
\begin{document}
\begin{tabular}{|c|cc|}\hline
\multirow{4}{*}{Foo} & 1 & 2 \\
    & 1 & 2 \\\cline{2-3}
    & 1 & 2 \\
    & 1 & 2 \\\hline
\multirow{4}{*}{Bar} & 1 & 2 \\
    & 1 & 2 \\\cline{2-3}
    & 1 & 2 \\
    & 1 & 2 \\\hline
\end{tabular}
\end{document}

When making tables, you should also always use the array package which offers various additional features and improvements (most notably at the vertical and horizontal lines joins).

  • \multirow cannot accept graphics. – xport Jan 9 '11 at 10:56
  • @xport: Why do you say that? I have no problems when replacing Foo by \includegraphics[height=4em]{image} inside the \multirow in the code above. – Philippe Goutet Jan 9 '11 at 20:34
  • are you sure the image will be vertically centered? :-) – xport Jan 9 '11 at 20:36
  • 1
    @xport: with a \raisebox{-\tabcolsep}{\includegraphics[height=4em]{image}}, it will be vertically centered, yes. – Philippe Goutet Jan 9 '11 at 20:58

Here's a solution using booktabs and getting rid of of the vertical rules, which leads to a prettier result imho. Have a look at the introduction of the booktabs documentation, which offers some insights in basic table design.

The benefits of booktabs are: Much better table spacing, and \toprule, \midrule and \bottomrule, where \midrule is thinner than the other two, which looks nice.

\documentclass{article}

\usepackage{booktabs}

\begin{document}

\begin{table}\centering
\begin{tabular}{lll}
\toprule
Foo & 1 & 2 \\
    & 1 & 2 \\\cmidrule{2-3}% That's the rule you're looking for.
    & 1 & 2 \\
    & 1 & 2 \\
\midrule
Bar & 1 & 2 \\
    & 1 & 2 \\\cmidrule{2-3}% This too. The numbers designate the columns covered.
    & 1 & 2 \\
    & 1 & 2 \\
\bottomrule
\end{tabular}
\caption{1 and 2 in relation to Foo and Bar.}
\end{table}

\end{document}

output

  • doesn't work with longtable, i guess. – Vineet Menon May 31 '13 at 14:56
  • @VineetMenon A quick check makes me think it does work. Also, the booktabs documentation explicitly mentions compatibility with longtable and provides some hints in section 5. Have a look at that, and if you still can’t work something out, feel free to ask a new question. – doncherry May 31 '13 at 18:45
  • oh. my bad, there was a glitch in my source. It's working now. thanks – Vineet Menon Jun 1 '13 at 8:28
  • Can we do that for non consecutive entries? I mean instead of \cmidrule{2-3}, to have \cmidrule{2, 4 and 5} in a bigger table? ANSWER: \cmidrule{2-2}\cmidrule{4-5} – gsamaras Mar 5 '15 at 15:15

Nested table can solve this beautifully.

alt text


\documentclass{article}
\begin{document}
\begin{tabular}{|c|@{}c@{}|}\hline
Foo
&
\begin{tabular}{cc}
1 & 2 \\
1 & 2 \\\hline
1 & 2 \\
1 & 2 \\
\end{tabular}
\tabularnewline\hline
Bar
&
\begin{tabular}{cc}
1 & 2 \\
1 & 2 \\\hline
1 & 2 \\
1 & 2 \\
\end{tabular}
\tabularnewline\hline
\end{tabular}

\end{document}

Your Answer

 

By clicking "Post Your Answer", you acknowledge that you have read our updated terms of service, privacy policy and cookie policy, and that your continued use of the website is subject to these policies.

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