我想创建一个新的表格环境,使我可以添加 n(1-10)个参数而不添加额外的列(这样下面的两个示例都可以正常工作)。
这是我的代码:
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[sfdefault]{AlegreyaSans}
\RequirePackage{booktabs}
\usepackage[table,x11names,dvipsnames,table]{xcolor}
\usepackage{tabularx}
\definecolor{mygreen}{RGB}{126,169,105}
\definecolor{myblue}{RGB}{9,28,87}
\begin{document}
\newenvironment{tabulargreen}[3]
{
% \renewcommand{\tempcaption}{#3}
\rowcolors{1}{mygreen!20}{mygreen!10}
\begin{tabular}{lcr}
\rowcolor{mygreen}
\textcolor{white}{\bfseries #1} & \textcolor{white}{\bfseries #2} & \textcolor{white}{\bfseries #3} \\
}
{
% \caption{\tempcaption}
\end{tabular}
}
\begin{tabulargreen}{Name}{Zahl}{Nummer}
Modul eins & 2 & 3 \\
Modul zwei & 5 & 6 \\
Modul drei & 8 & 9 \\
Modul vier & 2 & 3 \\
Modul fünf & 5 & 6 \\
Modul sechs & 8 & 9 \\
\end{tabulargreen}
\vspace{5mm}
\begin{tabulargreen}{Name}{Zahl}
Modul eins & 3 \\
Modul zwei & 4 \\
Modul drei & 7 \\
\end{tabulargreen}
\end{document}
表格仍然如下所示:
“M” 从何而来?我怎样才能摆脱它?
问候并非常感谢!
米莉
答案1
如果只有一个参数,那么会更容易,即标题和单元格之间用通常的 分隔&
。
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[sfdefault]{AlegreyaSans}
\usepackage[table,x11names,dvipsnames,table]{xcolor}
\usepackage{xparse}
\definecolor{mygreen}{RGB}{126,169,105}
\definecolor{myblue}{RGB}{9,28,87}
\ExplSyntaxOn
\seq_new:N \l_millie_tabgreen_head_in_seq
\seq_new:N \l_millie_tabgreen_head_out_seq
\NewDocumentEnvironment{tabulargreen}{m}
{
\seq_set_split:Nnn \l_millie_tabgreen_head_in_seq { & } { #1 }
\seq_set_map:NNn
\l_millie_tabgreen_head_out_seq
\l_millie_tabgreen_head_in_seq
{ \millie_tabgreen_head:n { ##1 } }
\rowcolors{1}{mygreen!20}{mygreen!10}
\begin{tabular}
{
l
*{ \int_eval:n { \seq_count:N \l_millie_tabgreen_head_in_seq - 2 } } { c }
r
}
\rowcolor{mygreen}
\seq_use:Nn \l_millie_tabgreen_head_out_seq { & } \\
}
{
\end{tabular}
}
\cs_new_protected:Nn \millie_tabgreen_head:n
{
\textcolor{white}{\bfseries #1}
}
\ExplSyntaxOff
\begin{document}
\begin{tabulargreen}{Name & Zahl & Nummer}
Modul eins & 2 & 3 \\
Modul zwei & 5 & 6 \\
Modul drei & 8 & 9 \\
Modul vier & 2 & 3 \\
Modul fünf & 5 & 6 \\
Modul sechs & 8 & 9 \\
\end{tabulargreen}
\vspace{5mm}
\begin{tabulargreen}{Name & Zahl}
Modul eins & 3 \\
Modul zwei & 4 \\
Modul drei & 7 \\
\end{tabulargreen}
\end{document}
这个想法是计算标题的数量,减去 2 并制作一个合适的前言l c … c r
;对标题进行修改以添加所请求的格式,然后构建表格。
答案2
正如大卫所说,你仍然需要传递三根据您定义tabulargreen
环境的方式确定参数:
\begin{tabulargreen}{Name}{Zahl}{}
根据评论,代码已被修改为允许 4 个参数(其中前两个是必需的,后两个是可选的)。因此,您不需要将其调用为
\begin{tabulargreen}{Name}{Zahl}{}{}
然后,tabulargreen
您需要在选项中检查可选参数是否为空,如果为空则不定义列标题。我使用包ifmtarg
来执行此操作,但任何其他检测空选项的方法(例如使用xparse
)都可以。
此技术最多可扩展至 9 个参数。除此之外,您还需要进行其他处理(请参阅参考)。
笔记:
- 您缺少尾随:
\end{tabular}%
——我已将其添加到下面的代码中。这将删除表格后面的额外水平间距(这不会在此显示任何不同平均能量损失,但如果你看\fbox{}
一下它的用法,tabulargreen
你就会看到差异。
参考:
代码:
\documentclass{article}
%\usepackage[utf8]{inputenc}
%\usepackage[T1]{fontenc}
%\usepackage[sfdefault]{AlegreyaSans}
\RequirePackage{booktabs}
\usepackage[table,x11names,dvipsnames,table]{xcolor}
\usepackage{tabularx}
\usepackage{ifmtarg}
\makeatletter%
\newcommand{\IfIsEmptyArg}[3]{\@ifmtarg{#1}{#2}{#3}}%
\makeatother%
\definecolor{mygreen}{RGB}{126,169,105}
\definecolor{myblue}{RGB}{9,28,87}
\begin{document}
\newenvironment{tabulargreen}[4]% <-- Note: 4 paramaters
{
%\renewcommand{\tempcaption}{#3}
\rowcolors{1}{mygreen!20}{mygreen!10}
\begin{tabular}{lcrr}
\rowcolor{mygreen}
\textcolor{white}{\bfseries #1}
& \textcolor{white}{\bfseries #2}
\IfIsEmptyArg{#3}{}{& \textcolor{white}{\bfseries #3}}
\IfIsEmptyArg{#4}{}{& \textcolor{white}{\bfseries #4}}
\\
}
{
%\caption{\tempcaption}
\end{tabular}% <---- Note trailing %
}
\begin{tabulargreen}{Name}{Zahl}{Nummer}{}% <-- Note: 4 paramaters
Modul eins & 2 & 3 \\
Modul zwei & 5 & 6 \\
Modul drei & 8 & 9 \\
Modul vier & 2 & 3 \\
Modul funf & 5 & 6 \\
Modul sechs & 8 & 9 \\
\end{tabulargreen}
\par\medskip
\begin{tabulargreen}{Name}{Zahl}{}{}% % <-- Note: 4 paramaters
Modul eins & 3 \\
Modul zwei & 4 \\
Modul drei & 7 \\
\end{tabulargreen}
\par\medskip
\begin{tabulargreen}{A}{B}{C}{D}% % <-- Note: 4 paramaters
1 & 2 & 3 & 4 \\
a & b & c & d \\
\end{tabulargreen}
\end{document}