Latex3 内联映射在表格中产生额外的行

Latex3 内联映射在表格中产生额外的行

考虑以下 Latex3 的示例用法\clist_map_inline:nn

\documentclass[margin=0.1cm]{standalone}
\usepackage{expl3}
\begin{document}
\begin{tabular}{|c|c|}
    \hline%
    \ExplSyntaxOn%
        \clist_map_inline:nn {A,B,C,D}%
            {#1: & something \\\hline}%
    \ExplSyntaxOff%
\end{tabular}

\begin{tabular}{|c|c|}
    \hline%
    \ExplSyntaxOn%
        \clist_map_inline:nn {A,B,C}%
            {#1: & something \\\hline}%
    \ExplSyntaxOff%
    D: & something \\\hline
\end{tabular}
\end{document}

结果:

在此处输入图片描述

为什么第一个表格底部有一个多余的空行?

答案1

您可以使用以下方法避免此问题\clist_use:Nn

\documentclass[margin=0.1cm]{standalone}
\usepackage{xparse}

\ExplSyntaxOn
\NewDocumentCommand{\makerow}{mm}
 {
  \clist_set:Nn \l_tmpa_clist { #1 }
  \clist_use:Nn \l_tmpa_clist { #2 }
  #2
 }
\ExplSyntaxOff

\begin{document}

\begin{tabular}{|c|c|}
\hline
\makerow{A,B,C,D}{& something \\\hline}
\end{tabular}

\begin{tabular}{|c|c|}
\hline
\makerow{A,B,C}{& something \\\hline}
D: & something \\\hline
\end{tabular}

\end{document}

在此处输入图片描述

问题在于\clist_map_inline:nn它让 TeX 处于新单元已经开始的状态。

答案2

正如 Egreg 所说:

它使 TeX 处于新单元已经开始的状态。

我认为这是因为您\clist_map_inline:nn处于tabular环境中,所以如果您仍然想使用map(用于编程),您可以在 goto 之前生成表的内容tabular

\documentclass{article}
\usepackage{expl3}
\begin{document}.

    \ExplSyntaxOn
    % A variable for save contents.
    \tl_gclear_new:N \g_thomas_tableContent_tl

    \clist_map_inline:nn {A,B,C,D}{
        \tl_gput_right:Nx \g_thomas_tableContent_tl {
            #1: & something \exp_not:n {\\ \hline}
        }
    }
    % Copy to LaTeX2e's macro.'
    \cs_gset_eq:NN \tableContent \g_thomas_tableContent_tl
    \ExplSyntaxOff

    \begin{tabular}{|c|c|}
        \hline
        \tableContent
    \end{tabular}
\end{document}

注意,\tl_gput_right:我使用Nx了。因为我需要在表中\exp_not:n {\\ \hline}使用变量 ( ),所以需要扩展。如果不需要扩展,也可以使用。\l_tmpa_tlNn

相关内容