你好,我正在使用以下代码尝试动态设置 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}