通过以下代码,我可以在表的行中设置一些标签,并在宏中跟踪所需的行。
\documentclass{article}
\usepackage{spreadtab}
\usepackage{array}
\usepackage{etoolbox}
\usepackage{tabularx}
\newcounter{tabline}
\makeatletter
\gdef\ctag#1{\@ifundefined{c#1}
{\expandafter\xdef\csname c#1\endcsname{\thetabline}}{\expandafter\xappto\csname c#1\endcsname{,\thetabline}}}
\makeatother
\begin{document}
\begin{spreadtab}{{tabular}{>{\stepcounter{tabline}\thetabline}cc}}
& @ a\\ @\ctag{1}
& @ b \\
& @ c\\ @\ctag{1}
& @ d\\
\end{spreadtab}
\csname c1\endcsname
\end{document}
一切都很好,但是当我使用它时会出现问题tabularx
并且tabular
结果会重复两/三次。见下图。
\begin{document}
\begin{spreadtab}{{tabularx}{\textwidth}{>{\stepcounter{tabline}\thetabline}cX}}
& @ a\\ @\ctag{1}
& @ b \\
& @ c\\ @\ctag{1}
& @ d\\
& @ e\\ @\ctag{1}
& @ f\\ @\ctag{1}
& @ g\\
\end{spreadtab}
\csname c1\endcsname
\end{document}
我很困惑为什么使用时会发生这种情况tabularx
?!
PS cc 重复两次,cX 重复三次。
答案1
tabularx
旨在找到表格单元格内换行的合适宽度,因此不适用于数据表。tabular
因此,在您的第一个示例中使用 as 可能是最好的方法,但是如果您真的想使用,tabularx
只需在最后的排版运行中累积数据,而不是在进行试运行以计算列宽时
\documentclass{article}
\usepackage{spreadtab}
\usepackage{array}
\usepackage{etoolbox}
\usepackage{tabularx}
\newcounter{tabline}
\makeatletter
\gdef\ctag#1{\ifx\@footnotetext\TX@trial@ftn\else
\@ifundefined{c#1}
{\expandafter\xdef\csname c#1\endcsname{\thetabline}}{\expandafter\xappto\csname c#1\endcsname{,\thetabline}}%
\fi}
\makeatother
\begin{document}
\begin{spreadtab}{{tabularx}{10cm}{>{\stepcounter{tabline}\thetabline}XX}}
& @ a\\ @\ctag{1}
& @ b \\
& @ c\\ @\ctag{1}
& @ d\\
\end{spreadtab}
\csname c1\endcsname
\end{document}