通过迭代序列来填充表格会产生一个孤立单元格

通过迭代序列来填充表格会产生一个孤立单元格

我正在尝试用自定义命令按顺序存储的内容来填充表格。

\documentclass{article}

\usepackage{xparse}
\usepackage{expl3}

\ExplSyntaxOn

\seq_new:N \my_sequence

\NewDocumentCommand{\addToMySequence}{mmm}{ \seq_gput_right:Nn \my_sequence {#1 & #2 & #3 \\ \hline} }

\NewDocumentCommand{\fillTable}{}{
    \seq_map_inline:Nn \my_sequence
    {
        ##1
    }
}

\ExplSyntaxOff

\addToMySequence{a}{b}{c}
\addToMySequence{d}{e}{f}
\addToMySequence{g}{h}{i}

\begin{document}

\begin{tabular}{|c|c|c|}
    \hline
    \fillTable
\end{tabular}

\end{document}

代码基本上按预期工作,但在表格末尾产生了一个孤立单元格:

孤儿细胞

如果您注释掉迭代中的所有调用\addToMySequence##1迭代内部的调用,也会发生这种情况。因此它必须来自该命令内部的某个地方。

有什么建议可以解决这个问题吗?

答案1

问题在于,由 启动的循环只有在发出\seq_map_inline:Nn最后一个后才意识到序列已结束,因此启动了新的单元。您可以利用来代替。\hline\seq_use

\documentclass{article}

\usepackage{xparse}

\ExplSyntaxOn

\seq_new:N \g_hurzelchen_cells_seq
\tl_new:N \l_hurzelchen_table_tl

\NewDocumentCommand{\addToMySequence}{mmm}
 {
  \seq_gput_right:Nn \g_hurzelchen_cells_seq  {#1 & #2 & #3 \\ \hline}
 }

\NewDocumentCommand{\fillTable}{}
 {
  \tl_clear:N \l_hurzelchen_table_tl
  \seq_map_inline:Nn \g_hurzelchen_cells_seq
   {
    \tl_put_right:Nn \l_hurzelchen_table_tl { ##1 }
   }
  \tl_use:N \l_hurzelchen_table_tl
 }

\ExplSyntaxOff

\addToMySequence{a}{b}{c}
\addToMySequence{d}{e}{f}
\addToMySequence{g}{h}{i}

\begin{document}

\begin{tabular}{|c|c|c|}
    \hline
    \fillTable
\end{tabular}

\end{document}

g请注意,每个变量名都应以(全局用法)、l(局部用法)或(全局常量)为前缀,c并以变量类型结尾。

在此处输入图片描述

另一种方法非常方便,如果我们必须对序列执行更多操作而不仅仅是传递它,那么可以在标记列表中构建整个表并传递这个表:

\documentclass{article}

\usepackage{xparse}

\ExplSyntaxOn

\seq_new:N \g_hurzelchen_cells_seq

\NewDocumentCommand{\addToMySequence}{mmm}
 {
  \seq_gput_right:Nn \g_hurzelchen_cells_seq  {#1 & #2 & #3 \\ \hline}
 }

\NewDocumentCommand{\fillTable}{}
 {
  \seq_use:Nn \g_hurzelchen_cells_seq { }
 }

\ExplSyntaxOff

\addToMySequence{a}{b}{c}
\addToMySequence{d}{e}{f}
\addToMySequence{g}{h}{i}

\begin{document}

\begin{tabular}{|c|c|c|}
    \hline
    \fillTable
\end{tabular}

\end{document}

这完全执行了第一个单元格中的循环,因此孤立单元格的问题就消失了。

相关内容