给定列,如何提取一行?

给定列,如何提取一行?

给定一个数组的某些列作为逗号分隔的列表,我该如何构造该数组?

我想如果我可以从以逗号分隔的此类列列表中提取特定行,那么我可能就可以完成其余工作,但我甚至无法编译以下代码:

\documentclass{article}
\usepackage{tikz}

\def\colzero{0,0,1}
\def\colone{0,1,0}
\def\coltwo{0,1,1}

\newcommand{\getrow}[2]{%
    \xdef\rowans{}
    \foreach \x in #2 {
        \xdef\rowans{\rowans \pgfmathparse{{\x}[#1]}\pgfmathresult}
        }
    \rowans
}

\begin{document}
$\getrow{0}{{\colzero},{\colone},{\coltwo}}$
\end{document}

我以前曾设法弄清楚如何做到这一点(使用我在 StackExchange 上找到的各种东西),但现在我找不到任何与我所寻找的内容相关的答案。

理想情况下,我希望使用可变数量的列来实现这一点,但不一定是使用可变数量的行来实现。

答案1

我建议使用expl3xparse;使用命令定义列\setcolumn并使用\getrow收集所选行中的项目并使用最后一个参数中给出的分隔符​​生成它们。

\documentclass{article}
\usepackage{xparse}

\ExplSyntaxOn
\NewDocumentCommand{\setcolumn}{mm}
 {
  \clist_if_exist:cF { g_ylab_column_#1_clist }
   {
    \clist_new:c { g_ylab_column_#1_clist }
   }
  \clist_gset:cn { g_ylab_column_#1_clist } { #2 }
 }

\NewDocumentCommand{\getrow}{mmm}
 {
  \seq_clear:N \l_ylab_row_seq
  \clist_map_inline:nn { #2 }
   {
    \seq_put_right:Nx \l_ylab_row_seq
     {
      \clist_item:cn { g_ylab_column_##1_clist } { #1 }
     }
   }
  \seq_use:Nn \l_ylab_row_seq { #3 }
 }
\ExplSyntaxOff

\setcolumn{colone}{0,0,1}
\setcolumn{coltwo}{0,1,0}
\setcolumn{colthree}{0,1,1}

\begin{document}

\getrow{1}{colone,coltwo,colthree}{}

\getrow{2}{colone,coltwo,colthree}{, }

\begin{tabular}[t]{ccc}
\getrow{1}{colone,coltwo,colthree}{&} \\
\getrow{2}{colone,coltwo,colthree}{&} \\
\getrow{3}{colone,coltwo,colthree}{&}
\end{tabular}

\end{document}

命令\setcolumn定义一个clist变量(如果不存在)并(全局)设置它。你可以这样调用它姓名\getrow命令中设置一个seq变量,其中包含指定行中的项目。然后,它会生成带有项目之间选定分隔符的序列。

在此处输入图片描述

请注意,expl3计数项目通常从 1 开始(这比从 0 开始更合乎逻辑)。

相关内容