使用计数器的表中条件问题

使用计数器的表中条件问题

我正在尝试制作一个使用计数器进行比较的条件动态表,但是出现了一个不合理的错误,请参阅以下代码:

% !TEX TS-program = xelatex
\documentclass[hidelinks]{article}
\usepackage{pgffor}
\usepackage{longtable}

\newcounter{generalCounter}
\begin{document}
\def\anyy{a}
\begin{longtable}{cccc}
  \setcounter{generalCounter}{0}\foreach\element in\anyy{\stepcounter{generalCounter}}
  \ifnum\thegeneralCounter=1
  1 & 2 & 3 & 4 \\\hline
  \fi
  \ifnum\thegeneralCounter=2
  1 & 2 & 3 & 4 \\\hline
  \fi
\end{longtable}
\end{document}

该代码运行良好,但如果我更改\def\anyy{a}\def\anyy{a,b},则无法构建并显示错误! Incomplete \ifnum; all text was ignored after line 11.

答案1

在此处输入图片描述

循环\foreach不是问题,但\anyy无法正确展开。此外,测试\ifnum从一个表格单元格开始,在其他表格单元格结束——这很奇怪,只能用技巧来捕捉,即黑色 TeX 魔法 ;-)

一种更简单的方法是使用\prg_replicate:nn一个expl3宏,它执行可扩展循环并完成与表格单元格相关的分组。

辅助宏\generatelines将参数存储在 a 中\clist,并用 计算其元素\clist_count:N,即需要进行的重复次数。

实际的表格行条目是另一个可“自由”配置的辅助宏,例如\modeltableentry

\documentclass{article}
\usepackage{longtable}

\usepackage{xparse}

\newcommand{\modeltableentry}{%
  1 & 2 & 3 & 4 \tabularnewline \hline
}
\ExplSyntaxOn

\NewDocumentCommand{\generatelines}{+m}{%
  \clist_set:Nx \l_tmpa_clist {#1}
  \prg_replicate:nn {\clist_count:N \l_tmpa_clist } {\modeltableentry}
}
 \ExplSyntaxOff 
\begin{document}
\newcommand{\anyy}{a,b}
\begin{longtable}{cccc}
  \generatelines{\anyy}
\end{longtable}


\renewcommand{\anyy}{a,b,c,d,e,f,g,h,i,j,k}

\begin{longtable}{cccc}
  \generatelines{\anyy}
\end{longtable}

\end{document}

相关内容