如何循环设置表格环境中的列数

如何循环设置表格环境中的列数

你好,我正在使用以下代码尝试动态设置 Latex 表格环境中的列数:

    \documentclass{article}

\usepackage{array}

\newcounter{numcols}
\setcounter{numcols}{4}

\begin{document}

\begin{tabular}{
$\loop
\stepcounter{col}
\ifnum \value{col} < \value{numcols}
    c & 
\else
    c
\fi
\ifnum \value{col} = \value{numcols}
    \setcounter{col}{0}
\repeat$
}
\hline
\loop
\stepcounter{col}
\ifnum \value{col} < \value{numcols}
    \textbf{Column \thecol} & 
\else
    \textbf{Column \thecol} \\
\fi
\ifnum \value{col} = \value{numcols}
    \setcounter{col}{0}
\repeat
\hline
\loop
\stepcounter{row}
\ifnum \value{row} < 10
    \loop
    \stepcounter{col}
    \ifnum \value{col} < \value{numcols}
        Cell \therow,\thecol & 
    \else
        Cell \therow,\thecol \\
    \fi
    \ifnum \value{col} = \value{numcols}
        \setcounter{col}{0}
    \repeat
\repeat
\hline
\end{tabular}

\end{document}

但是,它会引发一个错误,即非法的前置标记 ($): c' 使用了,如果我删除 $ 我会收到相同的错误,但它说非法的前置标记 (\loop): c' 使用了。

任何有关解决此错误的帮助都将非常感激。

我需要在 Latex 中创建一个具有动态列数的表

答案1

为什么$要引入数学模式?

并且您还需要填充表体吗?

如果没有,那么获取由一定数量的c列组成的表序言就简单多了,即

\begin{tabular}{ *{4}{c} }

您可以使用 而不是 4 \value{numcols},但我认为没有什么优势,因为您需要预先设置计数器。

填写通用表格:

\documentclass{article}

\ExplSyntaxOn

\NewDocumentCommand{\generictabular}{mm}
 {% #1 = number of rows, #2 = number of columns
  \tl_clear:N \l__mencel_tabular_body_tl
  \mencel_tabular:nn { #1 } { #2 }
  \begin{tabular}{ *{#2}{c} }
  \hline
  \tl_use:N \l__mencel_tabular_body_tl
  \hline
  \end{tabular}
 }

\tl_new:N \l__mencel_tabular_body_tl

\cs_new_protected:Nn \mencel_tabular:nn
 {
  \int_step_inline:nn { #1 }
   {% ##1 is the row index
    \int_step_inline:nn { #2 }
     {% ####1 is the column index
      \tl_put_right:Nn \l__mencel_tabular_body_tl { Cell~##1.####1 }
      \int_compare:nTF { ####1 = #2 }
       {
        \tl_put_right:Nn \l__mencel_tabular_body_tl { \\ }
       }
       {
        \tl_put_right:Nn \l__mencel_tabular_body_tl { & }
       }
     }
   }
 }

\ExplSyntaxOff

\begin{document}

\generictabular{5}{4}

\end{document}

在此处输入图片描述

嵌套\int_step_inline:nn函数类似于您的循环。我们需要在排版之前构建表体。

也许更有效的方法是使用\tl_build...

\documentclass{article}

\ExplSyntaxOn

\NewDocumentCommand{\generictabular}{mm}
 {% #1 = number of rows, #2 = number of columns
  \mencel_tabular:nn { #1 } { #2 }
  \begin{tabular}{ *{#2}{c} }
  \hline
  \tl_use:N \l__mencel_tabular_body_tl
  \hline
  \end{tabular}
 }

\tl_new:N \l__mencel_tabular_body_tl

\cs_new_protected:Nn \mencel_tabular:nn
 {
  \tl_build_begin:N \l__mencel_tabular_body_tl
  \int_step_inline:nn { #1 }
   {% ##1 is the row index
    \int_step_inline:nn { #2 }
     {% ####1 is the column index
      \tl_build_put_right:Nn \l__mencel_tabular_body_tl { Cell~##1.####1 }
      \int_compare:nTF { ####1 = #2 }
       {
        \tl_build_put_right:Nn \l__mencel_tabular_body_tl { \\ }
       }
       {
        \tl_build_put_right:Nn \l__mencel_tabular_body_tl { & }
       }
     }
   }
  \tl_build_end:N \l__mencel_tabular_body_tl
 }

\ExplSyntaxOff

\begin{document}

\generictabular{5}{4}

\end{document}

相关内容