如何防止“tabularx”在试运行中运行宏?

如何防止“tabularx”在试运行中运行宏?

通过以下代码,我可以在表的行中设置一些标签,并在宏中跟踪所需的行。

\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}

相关内容