使用 expl3 语法的表格中的额外行

使用 expl3 语法的表格中的额外行

我无法使用(令人惊奇的)expl3带有表格环境的包。具体来说,当我使用 创建行时,我的表格中会出现一个完整的额外行\seq_map_inline。我可以通过不在最后一行中包含 来避免这种行为\cr(在下面的 MWE 中,这将涉及更多代码行,但在原始用法中并不是什么大问题),然后逐字包含 \cr。在 MWE 中,我故意删除了很多空格“以防万一”,但这并没有改变任何东西(除了让它更难阅读,抱歉)。另一个修复可能是插入负间距,如这个问题,但我很困惑为什么内核要插入某物放入我的表格中(它至少不占用水平空间,通过在Hi前面添加一个来查看\end{tabular})。

坏了但应该是正确的

\documentclass{article}
\usepackage{xparse}
\ExplSyntaxOn
\DeclareDocumentCommand \myTable {m} {
  \seq_set_split:Nnn \l_tmpa_seq {,} {#1}
  \begin{tabular}{|c|c|}\seq_map_inline:Nn \l_tmpa_seq {Entry&##1\cr}\end{tabular}
}
\ExplSyntaxOff
\begin{document}
\myTable{A,B,C,D}
\end{document}

损坏的版本:多余的一行

有效但更复杂

\documentclass{article}
\usepackage{xparse}
\ExplSyntaxOn
\DeclareDocumentCommand \myTable {m} {
  \seq_set_split:Nnn \l_tmpa_seq {,} {#1}
  \int_zero:N \l_tmpa_int
  \begin{tabular}{|c|c|}
    \seq_map_inline:Nn \l_tmpa_seq {Entry&##1
      \int_gincr:N \l_tmpa_int
      \int_compare:nNnTF{\l_tmpa_int}={\seq_count:N\l_tmpa_seq}{}{\cr}
     }
     \cr
  \end{tabular}
}
\ExplSyntaxOff
\begin{document}
\myTable{A,B,C,D}
\end{document}

工作原理:无需额外线路

答案1

问题是,该操作在最后一个\\(或\cr)之后留下了一些东西,从而启动了一个新单元(尽管不产生输出)。因此,以这种方式在内部进行操作tabular(又名\halign)内部以这种方式操作是危险的;您最好在标记列表变量中构建表并传递它:

\documentclass{article}
\usepackage{xparse}
\ExplSyntaxOn
\DeclareDocumentCommand \myTable {m}
 {
  \seq_set_split:Nnn \l_tmpa_seq {,} {#1}
  \tl_set:Nn \l_tmpa_tl { \begin{tabular}{|c|c|} }
  \seq_map_inline:Nn \l_tmpa_seq
   {
    \tl_put_right:Nn \l_tmpa_tl { Entry & ##1 \\ }
   }
   \tl_put_right:Nn \l_tmpa_tl { \end{tabular} }
  \tl_use:N \l_tmpa_tl
 }
\ExplSyntaxOff
\begin{document}
\myTable{A,B,C,D}
\end{document}

答案2

当您对行使用显式函数而不是内联函数时,问题就消失了。(顺便说一句,在这种情况下,可以从宏中取出函数,但我更喜欢在本地使用它。)

\documentclass{article}
\usepackage{xparse}
\ExplSyntaxOn
\DeclareDocumentCommand \myTable {m} {
  \newcommand{\myrow}[1]{Entry&##1\cr}
  \seq_set_split:Nnn \l_tmpa_seq {,} {#1}
  \begin{tabular}{|c|c|}\seq_map_function:NN \l_tmpa_seq \myrow \end{tabular}
}
\ExplSyntaxOff
\begin{document}
\myTable{A,B,C,D}
\end{document}

在此处输入图片描述

相关内容