我想编写一个宏,使用参数作为列名来创建表。到目前为止,我可以执行以下操作,但我想将列名加粗。有没有简单的方法可以做到这一点?
\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
会产生一个整数表示,可以在任何需要整数的地方使用。