宏创建表

宏创建表

我想编写一个宏,使用参数作为列名来创建表。到目前为止,我可以执行以下操作,但我想将列名加粗。有没有简单的方法可以做到这一点?

\documentclass{article}
\usepackage{longtable}
\usepackage{xparse}
\usepackage{booktabs}

\ExplSyntaxOn

\NewDocumentCommand{\createTable}{m}
{
\seq_set_from_clist:Nn \l_tmpa_seq {#1}
\int_set:Nn \l_tmpa_int {\seq_count:N \l_tmpa_seq}
\begin{longtable}{*{\int_use:N \l_tmpa_int}{c}}
    \toprule
    \seq_use:Nn \l_tmpa_seq {&} \\
    \midrule
    \endhead
    \bottomrule
    \endfoot
    \endlastfoot
\end{longtable}
}

\ExplSyntaxOff

\begin{document}

    \createTable{a,b,c,d}

\end{document}

答案1

我猜你想要一个环境,而不是一个只能产生标题的命令。

\documentclass{article}
\usepackage{longtable}
\usepackage{booktabs}

\ExplSyntaxOn

\NewDocumentEnvironment{mylongtable}{m}
 {
  \miglo_longtable_preamble:n { #1 }
 }
 { \end{longtable} }

\seq_new:N \l_miglo_longtable_headers_seq

\cs_new_protected:Nn \miglo_longtable_preamble:n
 {
  \seq_set_from_clist:Nn \l_miglo_longtable_headers_seq { #1 }
  \begin{longtable}{*{\seq_count:N \l_miglo_longtable_headers_seq }{c}}
    \toprule
    \seq_map_indexed_function:NN \l_miglo_longtable_headers_seq \miglo_longtable_headers:nn \\
    \midrule
    \endhead
    \bottomrule
    \endfoot
    %\endlastfoot
}
\cs_new_protected:Nn \miglo_longtable_headers:nn
 {
  \int_compare:nF { #1 = 1 } { & } \textbf{#2}
 }

\ExplSyntaxOff

\begin{document}

\begin{mylongtable}{a,b,c,d}
1 & 2 & 3 & 4 \\
11 & 22 & 33 & 44
\end{mylongtable}

\end{document}

我们\seq_map_indexed_function:NN可以检查索引是否为 1,如果是则不插入&

不需要设置int变量,因为\seq_count:N会产生一个整数表示,可以在任何需要整数的地方使用。

在此处输入图片描述

相关内容