如何在表格中绘制左右箭头

如何在表格中绘制左右箭头

我不知道如何在表格中绘制左右箭头,这个箭头应该像这样 左右箭头

这是表格的代码

\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}

答案1

与。{NiceTabular}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}

您需要多次编译。

上述代码的输出

如果您想将规则可视化,您只需使用密钥hvlines(由提供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}

上述代码的输出


如果您不想计算行数和列数,也可以使用块(命令 \Block)并为该块命名。

\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}

输出是一样的。


还可以创建一个命令\LeftRightArrow放入主表格中,该命令将完成所有工作(无需在中输入说明\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}

输出是一样的。

答案2

使用 TikZ 矩阵:

\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}

在此处输入图片描述

如果您需要边框线和灰色背景:

\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}

在此处输入图片描述

答案3

下面MWE有些不错,但我希望其他专家会提供比我的更好的建议:-)

\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}

在此处输入图片描述

相关内容