表格内的命令可自动放置 \hline

表格内的命令可自动放置 \hline

我正在尝试定义一个简化表格构建的命令。我希望最后一个条目前面自动出现一条水平线。我尝试做一个最小的工作示例,它工作了(令人惊讶),但它在我更复杂的代码中不起作用。

\documentclass{article}
\usepackage{xparse}

%%% Works

\newcommand{\foo}[2]{#1 & #2\\}

\newcommand{\foolast}[2]{\hline
    #1 & #2}

\newcounter{premn}
\setcounter{premn}{0}

%%% Does not work if \hline is present

\newcommand{\premform}{\arabic}

\NewDocumentCommand{\preml}{O{\premform{premn}} m o}{%
    \IfNoValueTF{#3}%
    {%
        \refstepcounter{premn}%
        (#1) & #2 & \\
    }
    {%
        \refstepcounter{premn}%
        (#1) & #2 & #3\\
    }
}

\NewDocumentCommand{\conl}{O{\premform{premn}} m o}{%
    \IfNoValueTF{#3}%
    {%\hline
        \refstepcounter{premn}%
        (#1) & #2 & %
        \setcounter{premn}{0}%
        \ignorespaces%
    }
    {%\hline
        \refstepcounter{premn}%
        (#1) & #2 & #3 %
        \setcounter{premn}{0}%
        \ignorespaces%
    }
}

%%% MWE

\begin{document}

\begin{tabular}{ll}
\foo{a}{b}
\foolast{a}{b}
\end{tabular}

\begin{tabular}{lll}
\preml{a}
\conl{b}
\end{tabular}
    
\end{document}

我确信这个问题一定有答案,但这超出了我的知识范围。

答案1

在该包的帮助下,tabularray您可以访问每个表行的行号,还可以确保在最后一行上方自动绘制一条水平线:

\documentclass{article}
\usepackage{tabularray}

\begin{document}

\begin{tblr}{colspec={>{(\arabic{rownum})\enspace}ll}, hline{Y}}
a & b \\
a & b \\
a & b \\
a & b \\
a & b \\
a & b \\
\end{tblr}
    
\end{document}

答案2

您可以{NiceTabular}使用nicematrix和 Tikz 来实现这一点。

\documentclass{article}
\usepackage{nicematrix,tikz}

\begin{document}

\begin{NiceTabular}
  [code-after = { \tikz \draw (\arabic{iRow}-|1) -- (\arabic{iRow}-|last) ; } ]
  {>{(\arabic{iRow})\enspace}ll}
a & b \\
a & b \\
a & b \\
a & b \\
a & b \\
a & b \\
\end{NiceTabular}
    
\end{document}

您需要多次编译(因为nicematrix在后台使用 PGF/Tikz 节点)。

上述代码的输出

相关内容