反射/翻转/旋转表格或数组而不旋转元素

反射/翻转/旋转表格或数组而不旋转元素

我一直在研究一个array环境,但我意识到如果它沿对角线反射,它将占用更少的空间(我想这与翻转或旋转不完全相同,但我认为我会包含这些关键词以增加相似性)。这个认识来得太晚了,因为我需要很长时间才能以反射的方式重写所有内容。我在想,有没有办法快速解决我的懒惰?我想要一种不旋转任何元素的方法来反射下面的数组。也就是说,我希望x_1,...,x_8在第一行从左到右穿过顶部,b_{1,1},...,b_{8,1}从左到右穿过第二行,依此类推。旋转后将是x_8,...,x_1从左到右,我想这是一个不错的解决方案(尽管我更喜欢反射的那个)。

我尝试了rotateboxadjustboxsidewaystable,但所有这些方法也会旋转元素。这是我的代码:

\documentclass{standalone}

\usepackage{tikz}
\usetikzlibrary{shapes}

\newcommand\squared[1]{\noindent\framebox{\bf{#1}}}
\newcommand*\circled[1]{\tikz[baseline=(char.base)]{
            \node[shape=circle,draw,inner sep=2pt] (char) {#1};}}
\newcommand*\triangled[1]{\tikz[baseline=(char.base)]{
            \node[shape=regular polygon,regular polygon sides=3,draw,inner sep=0pt] (char) {#1};}}

\begin{document}

$
\begin{array}{c|c c c c c c c c c}
x_1 & \squared{$b_{1,1}$} & \circled{$b_{1,2}$} & b_{1,3} & b_{1,4} & b_{1,5} & b_{1,6} & b_{1,7} & b_{1,8} & \cdots \\
x_2 & b_{2,1} & b_{2,2} & b_{2,3} & b_{2,4} & b_{2,5} & b_{2,6} & b_{2,7} & b_{2,8} & \cdots \\
x_3 & \squared{$b_{3,1}$} & \circled{$b_{3,2}$} & \triangled{$b_{3,3}$} & b_{3,4} & b_{3,5} & b_{3,6} & b_{3,7} & b_{3,8} & \cdots \\
x_4 & \squared{$b_{4,1}$} & b_{4,2} & b_{4,3} & b_{4,4} & b_{4,5} & b_{4,6} & b_{4,7} & b_{4,8} & \cdots \\
x_5 & b_{5,1} & b_{5,2} & b_{5,3} & b_{5,4} & b_{5,5} & b_{5,6} & b_{5,7} & b_{5,8} & \cdots \\
x_6 & \squared{$b_{6,1}$} & b_{6,2} & b_{6,3} & b_{6,4} & b_{6,5} & b_{6,6} & b_{6,7} & b_{6,8} & \cdots \\
x_7 & \squared{$b_{7,1}$} & \circled{$b_{7,2}$} & \triangled{$b_{7,3}$} & b_{7,4} & b_{7,5} & b_{7,6} & b_{7,7} & b_{7,8} & \cdots \\
x_8 & \squared{$b_{8,1}$} & \circled{$b_{8,2}$} & b_{8,3} & b_{8,4} & b_{8,5} & b_{8,6} & b_{8,7} & b_{8,8} & \cdots \\
\vdots & 
\end{array}
$

\end{document}

谢谢你的帮助。

答案1

这里的方法与我链接的方法略有不同。您可能需要对其进行一些调整才能得到您想要的结果:

\documentclass{standalone}
\usepackage{environ}
\usepackage{etoolbox}

\usepackage{tikz}
\usetikzlibrary{shapes}

\newcommand\squared[1]{\noindent\framebox{\bf{#1}}}
\newcommand*\circled[1]{\tikz[baseline=(char.base)]{
            \node[shape=circle,draw,inner sep=2pt] (char) {#1};}}
\newcommand*\triangled[1]{\tikz[baseline=(char.base)]{
            \node[shape=regular polygon,regular polygon sides=3,draw,inner sep=0pt] (char) {#1};}}

%-@-(1)------------------------------------------------------------------------------------
\makeatletter

\def\ae@transposed@array{}

\NewEnviron{tarray}[1]
  {\let\ae@transposed@array\relax
   \def\ae@column@max{0}%%
   \expandafter\ae@build@array\BODY\\\@nil
   \def\ae@column@cnt{0}%%
   \ae@assemble@array
   \edef\ae@transposed@array{%%
     \noexpand\begin{array}{#1}
        \expandonce\ae@transposed@array
      \noexpand\end{array}}%%
  \typeout{====>\detokenize\expandafter{\ae@transposed@array}}%%
   \ae@transposed@array 
  }

\def\ae@build@array#1\\#2\@nil{%%
  %\typeout{==> row --> NUM1:\detokenize{#1}}%%
  %\typeout{==> row --> NUM2:\detokenize{#2}}%%
  \def\ae@continue@array{}%%
  \def\ae@column@cnt{0}%%
  \expandafter\ifx\expandafter\relax\detokenize{#2}\relax
    \ae@parse@row@into@columns#1&\@nil
  \else
    \ae@parse@row@into@columns#1&\@nil
    %\typeout{@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@}%%
    \def\ae@continue@array{\ae@build@array#2\@nil}%%
  \fi
  %\typeout{====> columns:\ae@column@cnt:\ae@column@max}%%
  \ae@continue@array
}

\def\ae@parse@row@into@columns#1&#2\@nil{%%
  \def\ae@continue@row{}%%
  \edef\ae@column@cnt{\number\numexpr\ae@column@cnt+1\relax}%%
  \ifnum\ae@column@cnt>\ae@column@max\relax
    \edef\ae@column@max{\ae@column@cnt}%%%
  \fi
  %\typeout{==> row ==> \ae@column@cnt ==> \detokenize{#1}}%%
  %\typeout{==> row ==> \ae@column@cnt ==> \detokenize{#2}}%%
  \expandafter\ifx\expandafter\relax\detokenize{#2}\relax
  \else
    \@ifundefined{ae@row@\ae@column@cnt}
      {\def\ae@tmp{#1}%%
       \expandafter\edef\csname ae@row@\ae@column@cnt\endcsname{\expandonce\ae@tmp}}%%
      {\def\ae@tmp{#1}%%
       \expandafter\edef\csname ae@row@\ae@column@cnt\endcsname{\expandafter\expandonce\csname ae@row@\ae@column@cnt\endcsname&\expandonce\ae@tmp}}
    \def\ae@continue@row{\ae@parse@row@into@columns#2\@nil}%%
    %\typeout{-----------------------------------}%%
  \fi
  \ae@continue@row
}

\def\ae@assemble@array{%%
  \def\ae@continue{}%%
  \ifnum\ae@column@cnt<\ae@column@max\relax
    \typeout{==:\ae@column@cnt:}%%
    \edef\ae@column@cnt{\number\numexpr\ae@column@cnt+1\relax}%%
    \typeout{==:\ae@column@cnt:}%%
    \@ifundefined{ae@transposed@array}
      {\edef\ae@transposed@array{\expandafter\expandonce\csname ae@row@\ae@column@cnt\endcsname\noexpand\\}}%%
      {\edef\ae@transposed@array{\expandonce\ae@transposed@array\expandafter\expandonce\csname ae@row@\ae@column@cnt\endcsname\noexpand\\}}
    \def\ae@continue{\ae@assemble@array}%%
  \fi
  \typeout{==> \ae@column@cnt}%%
  \ae@continue
}


\makeatother
%-@-(2)------------------------------------------------------------------------------------


\begin{document}

$
\begin{tarray}{c|c c c c c c c c c}
x_1    & \squared{$b_{1,1}$} & \circled{$b_{1,2}$} & b_{1,3}               & b_{1,4} & b_{1,5} & b_{1,6} & b_{1,7} & b_{1,8} & \cdots \\
x_2    & b_{2,1}             & b_{2,2}             & b_{2,3}               & b_{2,4} & b_{2,5} & b_{2,6} & b_{2,7} & b_{2,8} & \cdots \\
x_3    & \squared{$b_{3,1}$} & \circled{$b_{3,2}$} & \triangled{$b_{3,3}$} & b_{3,4} & b_{3,5} & b_{3,6} & b_{3,7} & b_{3,8} & \cdots \\
x_4    & \squared{$b_{4,1}$} & b_{4,2}             & b_{4,3}               & b_{4,4} & b_{4,5} & b_{4,6} & b_{4,7} & b_{4,8} & \cdots \\
x_5    & b_{5,1}             & b_{5,2}             & b_{5,3}               & b_{5,4} & b_{5,5} & b_{5,6} & b_{5,7} & b_{5,8} & \cdots \\
x_6    & \squared{$b_{6,1}$} & b_{6,2}             & b_{6,3}               & b_{6,4} & b_{6,5} & b_{6,6} & b_{6,7} & b_{6,8} & \cdots \\
x_7    & \squared{$b_{7,1}$} & \circled{$b_{7,2}$} & \triangled{$b_{7,3}$} & b_{7,4} & b_{7,5} & b_{7,6} & b_{7,7} & b_{7,8} & \cdots \\
x_8    & \squared{$b_{8,1}$} & \circled{$b_{8,2}$} & b_{8,3}               & b_{8,4} & b_{8,5} & b_{8,6} & b_{8,7} & b_{8,8} & \cdots \\
\vdots & 
\end{tarray}
$

\end{document}

可能需要提出一些评论:

\\这里的主要思想是根据以 结尾的行和以 分隔的列条目来解析表格&,然后重建表格,以便行和列被转置。

有两个主要的宏:第一个是\ae@build@array剥离每一行并将该行发送到宏\ae@parse@row@into@columns。我使用计数器(以免弄乱计数器寄存器——不知道我是否真的应该担心这个)来跟踪当前行柱子正在添加到。

解析完整个表格后,我重新组装了新表格。恰好,您有同样多的行和列,但第一个参数应该是格式化每一列转置表。(我认为这在哲学上与链接问题有所不同。)

将规则放入表格中可能有点棘手。现在,我先不解决这个令人头痛的问题。

我保留了\typeout用于帮助我跟踪组装桌子时所做工作的宏。这样,您可以更好地了解组装的进展情况(如果您愿意的话)(特别是如果您尝试调整并且出现问题)。

我毫无顾忌地使用 的资源etoolbox。你可能想看看是否有任何禁忌症与其他软件包:我不知道有什么。我还使用该environ软件包,这使得将表的内容传递给宏进行解析和重新设计变得特别容易。(再次,您可能希望检查与您可能正在使用的其他软件包的冲突。)

相关内容