2

I have no idea how to draw a leftright arrow in a table, this arrow should look like here leftright arrows

Here the code for the table

\begin{table}[]
\caption{}
\label{tab:arrow}
\begin{tabular}{llllll}
                       &                                           & Text here                                    &                                                         &                                   &  \\
\multicolumn{4}{l}{\textless{}--------------------------------------------------------------------------------------------------\textgreater{}}                             &                                   &  \\
                       & Some other text here                      &                                              & \multicolumn{2}{c}{Some other text here}                                                    &  \\
                       & Some other text here                      &                                              & Some other text here                                    & Some other text here              &  \\
                       & Some other text here                      &                                              & Some other text here                                    & Some other text here              &  \\
                       &                                           & \multicolumn{3}{l}{\textless{}---------------------------------------------------------------------------------------------\textgreater{}} &  \\
                       &                                           &                                              & \multicolumn{2}{c}{Some other text here}                                                    &  \\
                       & \multicolumn{5}{l}{\textless{}------------------------------------------------------------------------------------------------------------------------------------------\textgreater{}}   \\
                       &                                           &                                              & Some other text here                                    &                                   & 
\end{tabular}
\end{table}
2

3 Answers 3

7

With {NiceTabular} of nicematrix.

\documentclass{article}
\usepackage{geometry}
\usepackage{caption}
\usepackage{nicematrix,tikz}
\usetikzlibrary{arrows.meta}

\begin{document}

\begin{table}[]
\caption{}
\label{tab:arrow}
\begin{NiceTabular}{llllll}
                 &                      & Text here \\
\\
                 & Some other text here &                  & \Block{1-2}{Some other text here} \\
                 & Some other text here &                  & Some other text here              & Some other text here  &  \\
                 & Some other text here &                  & Some other text here              & Some other text here  &  \\
\\
                 &                      &                  & \Block{1-2}{Some other text here} \\
\\
                 &                      &                  & Some other text here 
\CodeAfter
  \begin{tikzpicture} [-LaTeX]
  \draw [<->] (2.5-|1) -- (2.5-|5) ;
  \draw [<->] (6.5-|3) -- (6.5-|6) ;
  \draw [<->] (8.5-|2) -- (8.5-|7) ;
  \end{tikzpicture}
\end{NiceTabular}
\end{table}

\end{document}

You need several compilations.

Output of the above code

If you want to visualize the rules, you only have to use the key hvlines (provided by nicematrix).

\documentclass{article}
\usepackage{geometry}
\usepackage{caption}
\usepackage{nicematrix,tikz}
\usetikzlibrary{arrows.meta}

\begin{document}

\begin{table}[]
\caption{}
\label{tab:arrow}
\begin{NiceTabular}{llllll}[hvlines,rules/width=0.1pt]
                 &                      & Text here \\
\\
                 & Some other text here &                  & \Block{1-2}{Some other text here} \\
                 & Some other text here &                  & Some other text here              & Some other text here  &  \\
                 & Some other text here &                  & Some other text here              & Some other text here  &  \\
\\
                 &                      &                  & \Block{1-2}{Some other text here} \\
\\
                 &                      &                  & Some other text here 
\CodeAfter
  \begin{tikzpicture} [-LaTeX]
  \draw [<->] (2.5-|1) -- (2.5-|5) ;
  \draw [<->] (6.5-|3) -- (6.5-|6) ;
  \draw [<->] (8.5-|2) -- (8.5-|7) ;
  \end{tikzpicture}
\end{NiceTabular}
\end{table}

Output of the above code


If you don't want to have to count the numbers of rows and columns, it's also possible by using blocks (command \Block) and giving names to that blocks.

\documentclass{article}
\usepackage{geometry}
\usepackage{caption}
\usepackage{nicematrix,tikz}
\usetikzlibrary{arrows.meta}

\begin{document}

\begin{table}[]
\caption{}
\label{tab:arrow}
\begin{NiceTabular}{llllll}
                 &                      & Text here \\
\Block[name=first-arrow]{1-4}{} \\
                 & Some other text here &                  & \Block{1-2}{Some other text here} \\
                 & Some other text here &                  & Some other text here              & Some other text here  &  \\
                 & Some other text here &                  & Some other text here              & Some other text here  &  \\
                 &                      & \Block[name=second-arrow]{1-3}{} \\
                 &                      &                  & \Block{1-2}{Some other text here} \\
                 & \Block[name=third-arrow]{1-5}{} \\
                 &                      &                  & Some other text here 
\CodeAfter
  \begin{tikzpicture} [-LaTeX]
  \draw [<->] (first-arrow.west) -- (first-arrow.east) ;
  \draw [<->] (second-arrow.west) -- (second-arrow.east) ;
  \draw [<->] (third-arrow.west) -- (third-arrow.east) ;
  \end{tikzpicture}
\end{NiceTabular}
\end{table}

\end{document}

The output is the same.


It's also possible to create a command \LeftRightArrow to put in the main tabular and which will do all the job (no need to put instructions in the \CodeAfter).

\documentclass{article}
\usepackage{geometry}
\usepackage{caption}
\usepackage{nicematrix,tikz}
\usetikzlibrary{arrows.meta}


\makeatletter
\ExplSyntaxOn
\NewDocumentCommand { \LeftRightArrow } { m }
  {
    \tl_gput_right:Nx \g_nicematrix_code_after_tl
      { \niru__LeftRightArrow:nnn { \arabic { iRow } } { \arabic { jCol } } { #1 } }
  }

\cs_new_protected:Nn \niru__LeftRightArrow:nnn 
  { \tikz \draw [-LaTeX,<->] (#1.5-|#2) -- (#1.5-|\int_eval:n{#2+#3}) ; }
\ExplSyntaxOff
\makeatother


\begin{document}

\begin{table}[]
\caption{}
\label{tab:arrow}
\begin{NiceTabular}{llllll}
                 &                      & Text here \\
\LeftRightArrow{4} \\
                 & Some other text here &                  & \Block{1-2}{Some other text here} \\
                 & Some other text here &                  & Some other text here              & Some other text here  &  \\
                 & Some other text here &                  & Some other text here              & Some other text here  &  \\
                 &                      & \LeftRightArrow{3} \\
                 &                      &                  & \Block{1-2}{Some other text here} \\
                 & \LeftRightArrow{5} \\
                 &                      &                  & Some other text here 
\end{NiceTabular}
\end{table}

\end{document}

The output is the same.

2
  • As I mentioned in my suggestion, you are one of the expert :-)
    – MadyYuvi
    Apr 18 at 9:40
  • Last option, you mentioned is fantastic
    – MadyYuvi
    Apr 18 at 10:17
4

With a TikZ matrix:

\documentclass{article}
\usepackage{geometry}

\usepackage{tikz}
\usetikzlibrary{matrix, fit}
\usetikzlibrary{arrows.meta}
\tikzset{
    mynode/.style={text height=3ex, text depth=1ex,inner ysep=0pt},
    mymulti/.style={mynode, inner xsep=0pt},
    }

\usepackage{caption}

\begin{document}
\begin{table}\centering 
  \caption{My table}\label{tab:arrow}
  \begin{tikzpicture} 
    \matrix[
      matrix of nodes, nodes in empty cells, nodes={mynode},
      column 1/.style={text width=.3cm},
      column 2/.style={text width=width("Some other text here")},% put the longest text of the column here
      column 3/.style={text width=width("Text here")},% put the longest text of the column here
      column 4/.style={text width=width("Some other text here")},% put the longest text of the column here
      column 5/.style={text width=width("Some other text here")},% put the longest text of the column here
      column 6/.style={text width=.3cm},
      ] (mymatr) {  
      & & Text here & & &  \\
      & & & & & \\
      & Some other text here & & & & \\
      & Some other text here & & Some other text here & Some other text here & \\
      & Some other text here & & Some other text here & Some other text here & \\
      & & & & & \\
      & & & & & \\
      & & & & & \\
      & & & Some other text here & & \\
      };
      % Multicolumn texts
      \node[fit=(mymatr-3-4)(mymatr-3-5), mymulti] {Some other text here};
      \node[fit=(mymatr-7-4)(mymatr-7-5), mymulti] {Some other text here};
      % Arrows
      \draw[{Latex}-{Latex}] (mymatr-2-1.west) -- (mymatr-2-4.east);
      \draw[{Latex}-{Latex}] (mymatr-6-3.west) -- (mymatr-6-5.east);
      \draw[{Latex}-{Latex}] (mymatr-8-2.west) -- (mymatr-8-6.east);
    \end{tikzpicture}   
  \end{table}
\end{document}

enter image description here

And in case you need the border lines and the gray background:

\documentclass{article}
\usepackage{geometry}

\usepackage{tikz}
\usetikzlibrary{matrix, fit}
\usetikzlibrary{arrows.meta}
\tikzset{
    mynode/.style={text height=3ex, text depth=1ex,inner ysep=0pt, fill=gray!5},
    mymulti/.style={mynode, inner xsep=0pt},
    myarrow/.style={{Latex}-{Latex},shorten <=1pt,shorten >=1pt},
    }

\usepackage{caption}

\begin{document}
\begin{table}\centering 
  \caption{My table}\label{tab:arrow}
  \begin{tikzpicture} 
    \matrix[
      matrix of nodes, nodes in empty cells, nodes={mynode},
      column 1/.style={text width=.3cm},
      column 2/.style={text width=width("Some other text here")},% put the longest text of the column here
      column 3/.style={text width=width("Text here")},% put the longest text of the column here
      column 4/.style={text width=width("Some other text here")},% put the longest text of the column here
      column 5/.style={text width=width("Some other text here")},% put the longest text of the column here
      column 6/.style={text width=.3cm},
      ] (mymatr) {  
      & & Text here & & &  \\
      & & & & & \\
      & Some other text here & & & & \\
      & Some other text here & & Some other text here & Some other text here & \\
      & Some other text here & & Some other text here & Some other text here & \\
      & & & & & \\
      & & & & & \\
      & & & & & \\
      & & & Some other text here & & \\
      };
      % Multicolumn texts
      \node[fit=(mymatr-3-4)(mymatr-3-5), mymulti] {Some other text here};
      \node[fit=(mymatr-7-4)(mymatr-7-5), mymulti] {Some other text here};
      % Border lines
      \foreach \myrow in {1,2,...,9} 
        {\draw[gray!40] (mymatr-\myrow-1.north west) -- (mymatr-\myrow-6.north east);}
      \draw[gray!40] (mymatr-9-1.south west) -- (mymatr-9-6.south east);
      \draw[gray!40] (mymatr-1-1.north west) -- (mymatr-9-1.south west);
      \foreach \mycol in {2,3,4} 
        {\draw[gray!40] (mymatr-1-\mycol.north west) -- (mymatr-1-\mycol.south west);}
      \draw[gray!40] (mymatr-3-2.north west) -- (mymatr-9-2.south west);
      \draw[gray!40] (mymatr-3-3.north west) -- (mymatr-7-3.south west);
      \foreach \mycol in {3,4,5,6} 
        {\draw[gray!40] (mymatr-9-\mycol.north west) -- (mymatr-9-\mycol.south west);}
      \draw[gray!40] (mymatr-3-4.north west) -- (mymatr-5-4.south west);
      \draw[gray!40] (mymatr-7-4.north west) -- (mymatr-7-4.south west);
      \draw[gray!40] (mymatr-1-5.north west) -- (mymatr-2-5.south west);
      \draw[gray!40] (mymatr-4-5.north west) -- (mymatr-5-5.south west);
      \draw[gray!40] (mymatr-1-6.north west) -- (mymatr-7-6.south west);
      \draw[gray!40] (mymatr-1-6.north east) -- (mymatr-9-6.south east);
      % Arrows
      \draw[myarrow] (mymatr-2-1.west) -- (mymatr-2-4.east);
      \draw[myarrow] (mymatr-6-3.west) -- (mymatr-6-5.east);
      \draw[myarrow] (mymatr-8-2.west) -- (mymatr-8-6.east);
    \end{tikzpicture}   
  \end{table}
\end{document}

enter image description here

2
  • 1
    Another expert :-)
    – MadyYuvi
    Apr 18 at 11:20
  • 1
    @MadyYuvi Thank you!
    – CarLaTeX
    Apr 18 at 11:25
3

Below MWE is some what fine, but I expect some other Experts will provide better suggestion than mine :-)

\documentclass{book}

\makeatletter
\def\leftrightarrowfill{$\m@th\mathord\leftarrow-\mkern-21mu
\cleaders\hbox{$\!\mathord-\!$}\hfill
\mkern-25mu\mathord-\rightarrow$}
\makeatother

\begin{document}

\begin{table}[]
\caption{}
\label{tab:arrow}
\begin{tabular}{llllll}
                       &                                           & Text here                                    &                                                         &                                   &  \\
\multicolumn{4}{l}{\hbox to 250pt{\leftrightarrowfill}}                             &                                   &  \\
                       & Some other text here                      &                                              & \multicolumn{2}{c}{Some other text here}                                                    &  \\
                       & Some other text here                      &                                              & Some other text here                                    & Some other text here              &  \\
                       & Some other text here                      &                                              & Some other text here                                    & Some other text here              &  \\
                       &                                           &
                       \multicolumn{3}{l}{\hbox to 150pt{\leftrightarrowfill}} &  \\
                       &                                           &                                              & \multicolumn{2}{c}{Some other text here}                                                    &  \\
                        \multicolumn{6}{l}{\hbox to 350pt{\leftrightarrowfill}}   \\
                       &                                           &                                              & Some other text here                                    &                                   & 
\end{tabular}
\end{table}

\end{document}

enter image description here

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .