是否有任何代码可以反转表格列的顺序?

是否有任何代码可以反转表格列的顺序?

我已经编写了一个有超过一百行的表的代码(实际上是一组表,有超过一百行!)和五列。

我们将从左到右的列称为 A、B、C、D、E;
我想要反转列的顺序
即得到一个表格,从左到右分别为 E、D、C、B、A 列。

是否有任何代码或包可以为我完成此操作?

我的代码如下:

\begin{table}
\caption‎‎
{computations of the first class}
‎\begin{center}‎
‎\scalebox{1}‎
{ 
‎\begin{tabular}{| c || c | c | c | c |}‎ 
‎\hline‎
A0 & C0 & B0 & D0 & E0 \\ 
‎\hline‎ \hline 
A1 & C1 & B1 & D1 & E1 \\ 
‎\hline‎
A2 & C2 & B2 & D2 & E2 \\ 
‎\hline‎
A3 & C3 & B3 & D3 & E3 \\ 
‎\hline‎
A4 & C4 & B4 & D4 & E4 \\ 
‎\hline‎
A5 & C5 & B5 & D5 & E5 \\ 
‎\hline‎
A6 & C6 & B6 & D6 & E6 \\ 
‎\hline‎
A7 & C7 & B7 & D7 & E7 \\ 
‎\hline‎
A8 & C8 & B8 & D8 & E8 \\ 
‎\hline‎
A9 & C9 & B9 & D9 & E9 \\ 
‎\hline‎
‎\end{tabular}‎
}
‎\end{center}‎‎
‎\end{table}‎


正如@Alan Munn 引导我做到的那样问题
我在代码中添加了一行(在 \begin{tabular} 之前):

\def\1#1&#2&#3&#4&#5\\{#5 &#4 &#3 &#2 &#1 \\} 

这并没有改变任何事情。问题出在哪里?

答案1

这种方法的理念是https://tex.stackexchange.com/a/317425/4686不需要根据列数重新定义。

  • 优点 1:只需要每个表格行以 , 结尾\\(即它不假设\hline它作为分隔符)

  • 优势 2:没有额外的包裹(诚然,这是没有实际意义的,因为上述额外的包裹注定会统治 21 世纪;-)

  • 缺点 1:仅限于 8 列(我很懒)现在最多可以使用 9 列。

  • 缺点 2(一个大缺点!):它需要额外的\1(或其他)标记。遗憾的是,包>{tokens}的构造array在这里没有帮助。但我使用数组编译拍摄了快照,所以我把它留在那里。

代码:

\documentclass{article}
\usepackage{array}

\makeatletter
\long\def\REVERSEIT #1\\%
  {\@REVERSEIT 
  #1&\@gobble&\@gobble&\@gobble&\@gobble&\@gobble&\@gobble&\@gobble&\@gobble\\}

\long\def\@REVERSEIT #1&#2&#3&#4&#5&#6&#7&#8&#9\\%
  {#9&#8&#7&#6&#5&#4&#3&#2&#1\\}
\makeatother

\let\1\REVERSEIT

\begin{document}

\begin{tabular}{| c || c | c | c | c |}
\hline
\1 A0 & C0 & B0 & D0 & E0 \\
\hline\hline
\1 A1 & C1 & B1 & D1 & E1 \\
\hline
\1 A2 & C2 & B2 & D2 & E2 \\
\hline
\1 A3 & C3 & B3 & D3 & E3 \\
\1 A4 & C4 & B4 & D4 & E4 \\
\1 A5 & C5 & B5 & D5 & E5 \\
\hline
\1 A6 & C6 & B6 & D6 & E6 \\
\1 A7 & C7 & B7 & D7 & E7 \\
\1 A8 & C8 & B8 & D8 & E8 \\
\1 A9 & C9 & B9 & D9 & E9 \\
\hline
\end{tabular}‎
\quad
\begin{tabular}{| c || c | c | c |}
\hline
\1 A0 & C0 & B0 & D0 \\
\hline\hline
\1 A1 & C1 & B1 & D1 \\
\hline
\1 A2 & C2 & B2 & D2 \\
\hline
\1 A3 & C3 & B3 & D3 \\
\1 A4 & C4 & B4 & D4 \\
\1 A5 & C5 & B5 & D5 \\
\hline
\1 A6 & C6 & B6 & D6 \\
\1 A7 & C7 & B7 & D7 \\
\1 A8 & C8 & B8 & D8 \\
\1 A9 & C9 & B9 & D9 \\
\hline
\end{tabular}‎
\quad
\begin{tabular}{| c || c | c |}
\hline
\1 A0 & C0 & B0  \\
\hline\hline
\1 A1 & C1 & B1  \\
\hline
\1 A2 & C2 & B2  \\
\hline
\1 A3 & C3 & B3  \\
\1 A4 & C4 & B4  \\
\1 A5 & C5 & B5  \\
\hline
\1 A6 & C6 & B6  \\
\1 A7 & C7 & B7  \\
\1 A8 & C8 & B8  \\
\1 A9 & C9 & B9  \\
\hline
\end{tabular}‎

\end{document}

在此处输入图片描述

与 OP 相比,我故意删除了一些,\hline以表明方法不需要它们。请注意,在上面我从原文复制而来,并且 B 和 C 列已经置换了!

使用九列进行测试:

\begin{tabular}{| c || c | c | c | c |c | c | c | c |}
\hline
\1 A1 & B2 & C3 & D4 & E5 & F6 & G7 & H8 & I9 \\
\1 A1 & B2 & C3 & D4 & E5 & F6 & G7 & H8 & I9 \\
\1 A1 & B2 & C3 & D4 & E5 & F6 & G7 & H8 & I9 \\
\1 A1 & B2 & C3 & D4 & E5 & F6 & G7 & H8 & I9 \\
\1 A1 & B2 & C3 & D4 & E5 & F6 & G7 & H8 & I9 \\
\1 A1 & B2 & C3 & D4 & E5 & F6 & G7 & H8 & I9 \\
\hline
\end{tabular}‎

答案2

假设您使用规则(但您不应该使用)。行数没有限制。

\documentclass{article}
\usepackage{xparse,environ}

\ExplSyntaxOn
\NewEnviron{reversetabular}[1]
 {
  \famke_revtab_main:nV { #1 } \BODY
 }

\seq_new:N \l__famke_revtab_rows_seq
\seq_new:N \l__famke_revtab_out_seq
\seq_new:N \l__famke_revtab_row_seq
\tl_new:N \l__famke_revtab_temp_tl

\cs_new_protected:Nn \famke_revtab_main:nn
 {
  \seq_set_split:Nnn \l__famke_revtab_rows_seq { \hline } { #2 }
  \seq_clear:N \l__famke_revtab_out_seq
  \seq_map_inline:Nn \l__famke_revtab_rows_seq
   {
    \tl_if_blank:nTF { ##1 }
     {
      \seq_put_right:Nn \l__famke_revtab_out_seq { }
     }
     {
      \tl_set:Nn \l__famke_revtab_temp_tl { ##1 }
      \tl_remove_once:Nn \l__famke_revtab_temp_tl { \\ }
      \seq_set_split:NnV \l__famke_revtab_row_seq { & } \l__famke_revtab_temp_tl
      \seq_reverse:N \l__famke_revtab_row_seq
      \seq_put_right:Nx \l__famke_revtab_out_seq
       {
        \seq_use:Nn \l__famke_revtab_row_seq { & } \exp_not:N \\
       }
     }
   }
  \begin{tabular}{#1}
  \seq_use:Nn \l__famke_revtab_out_seq { \hline }
  \end{tabular}
 }
\cs_generate_variant:Nn \famke_revtab_main:nn { nV }
\ExplSyntaxOff

\begin{document}

\begin{reversetabular}{| c || c | c | c | c |}
\hline
A0 & C0 & B0 & D0 & E0 \\
\hline\hline
A1 & C1 & B1 & D1 & E1 \\
\hline
A2 & C2 & B2 & D2 & E2 \\
\hline
A3 & C3 & B3 & D3 & E3 \\
\hline‎
A4 & C4 & B4 & D4 & E4 \\
\hline
A5 & C5 & B5 & D5 & E5 \\
\hline
A6 & C6 & B6 & D6 & E6 \\
\hline
A7 & C7 & B7 & D7 & E7 \\
\hline
A8 & C8 & B8 & D8 & E8 \\
\hline
A9 & C9 & B9 & D9 & E9 \\
\hline
\end{reversetabular}‎

\end{document}

在此处输入图片描述

相关内容