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 would like to draw an arrow to the center of a table column as the following. How can I do that?

enter image description here

share|improve this question

3 Answers 3

up vote 5 down vote accepted

You need to place the arrow in a \multicolumn to remove any of the tabular vertical rules.

enter image description here

\documentclass{article}
\begin{document}
\begin{tabular}{|*{8}{c|}}
  \multicolumn{1}{c}{$\downarrow$} \\ \hline
  1 & 2 & 3 & 4 & 5 & 6 & 7 & 8 \\ \hline
  %...
\end{tabular}
\end{document}
share|improve this answer
    
Thank you both. How I didn't think of multicolumn I don't know. Much appreciated. –  ozsu Oct 6 '12 at 2:03

Here is the obligatory tikz solution which then gives you all the flexibility inherent in tikz in terms of adjusting the arrow tips, colors, line styles, etc.

Note:


Automated Solution:

In the earlier manual solution below, each column for which the arrow was to be drawn needed to be marked with an individual \tikzmark. This makes the table a bit harder to read.

In this solution, I have used the the collcell package to define a new column type C to replace the c columns (as well as R, L columns). When this column type is used the column is automatically marked with a \tikzmark numbered 1,...,<numberof columns>. So, the table just need to look like:

\begin{tabular}{|CCCCCCLR|}\hline
  1 & 2 & 3 & 4 & wide text & 6 & 7 & 008 \\ \hline
  1 & 2 & 3 & 4 & 5 & 6 & wide text & 8 \\ \hline
\end{tabular}

After the table to you can use the \DrawArrow macro to draw the arrow to any of the columns in the table by using the column number as the paramater to \DrawArrow. For example the \DrawArrow[-stealth]{3} produces the third black arrow:

enter image description here

Notes:

  • This automated solution assumes that you will draw at least one arrow whenever the C, R, or L column types are used. Without this the counter which numbers the columns would not be reset. Otherwise you could just manually call \ResetAddTikzMark before the start of each table, and this would be a non-issue.
  • Only the special columns types are numbered, so if you use CrC, then the first C column would be numbered 1, and the third column would be numbered 2 (since it is the 2nd column that gets the automatic \tikzmark.

Further Enhancements:

  • Note that column 7 is using the L column type. Since the first column's text is used to compute the width (to center the arrow), the arrow points to the center of the first column's text, which may not be the desired outcome. If this is not clear, see column 8 which is using the R column type.

    One way (untested) to adjust his would be to ensure that that columns text was wrapped in a \makebox[\widthof{<widest-text-in-column>}]{} type of macro.


Manual Solution:

In this version each of the top rows where you want to add the arrows needs to be marked with a \tikzmark:

enter image description here

References:


Code: Automated Solution

\documentclass{article}
\usepackage{collcell}
\usepackage{tikz}
\usetikzlibrary{calc}

\newlength{\TextWidth}
\newcommand{\tikzmark}[2]{%
    \settowidth{\TextWidth}{#2}%
    \makebox[\TextWidth]{%
        \tikz[overlay,remember picture,baseline] 
            \node [anchor=base] (#1) {#2};
    }%
}

\newcommand{\DrawArrow}[2][]{%
  \ResetAddTikzMark% Reset counter for next table
  \begin{tikzpicture}[overlay,remember picture]
    \draw[-latex, thick,#1] ($(#2.north)+(0,1.0cm)$) -- (#2.north);
  \end{tikzpicture}
}

\newcounter{ColumnCounter}
\newcommand*{\ResetAddTikzMark}{\setcounter{ColumnCounter}{0}}
\newcommand*{\AddTikzmark}[1]{%
    \stepcounter{ColumnCounter}%
    \tikzmark{\arabic{ColumnCounter}}{#1}%
}%

\newcolumntype{C}{>{\collectcell\AddTikzmark}c<{\endcollectcell}}%
\newcolumntype{R}{>{\collectcell\AddTikzmark}r<{\endcollectcell}}%
\newcolumntype{L}{>{\collectcell\AddTikzmark}l<{\endcollectcell}}%

\begin{document}
\vspace{2.0cm}
\begin{tabular}{|CCCCCCLR|}\hline
  1 & 2 & 3 & 4 & wide text & 6 & 7 & 008 \\ \hline
  1 & 2 & 3 & 4 & 5 & 6 & wide text & 8 \\ \hline
\end{tabular}
%
% Now we can draw the arrows to each of the `C` columns
\DrawArrow{1}
\DrawArrow[->]{2}
\DrawArrow[-stealth]{3}
\DrawArrow[red]{4}
\DrawArrow[blue, densely dotted]{5}
\DrawArrow[brown, thin, densely dashed]{6}
\DrawArrow[violet, ultra thick, dashed]{7}
\DrawArrow[magenta, thick, -stealth]{8}
\end{document}

Code: Manual Solution

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{calc}

\newcommand{\tikzmark}[2]{\tikz[overlay,remember picture,baseline] \node [anchor=base] (#1) {$#2$};}

\newcommand{\DrawArrow}[2][]{%
  \begin{tikzpicture}[overlay,remember picture]
    \draw[-latex, thick,#1] ($(#2.north)+(0,1.0cm)$) -- (#2.north);
  \end{tikzpicture}
}

\begin{document}
\begin{tabular}{|*{8}{c|}}\hline
  \tikzmark{A}{1} & \tikzmark{B}{2} & \tikzmark{C}{3} & \tikzmark{D}{4} & 5 & 6 & 7 & 8 \\ \hline
  1 & 2 & 3 & 4 & 5 & 6 & 7 & 8 \\ \hline
\end{tabular}
\DrawArrow{A}
\DrawArrow[->]{B}
\DrawArrow[red]{C}
\DrawArrow[blue, dotted]{D}
\end{document}
share|improve this answer

You can use \multicolumn:

\documentclass{article}
\usepackage{amsmath}

\begin{document}

\begin{tabular}{*{4}{|c}|}
\multicolumn{1}{c}{$\downarrow$} \\
\hline
A & B & C & D \\
\hline
\end{tabular}

\end{document}

enter image description here

share|improve this answer
2  
...no need for amsmath here... –  Werner Oct 6 '12 at 2:11

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.