我正在尝试制作一个使用计数器进行比较的条件动态表,但是出现了一个不合理的错误,请参阅以下代码:
% !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}