在下面的代码中
\documentclass{article}
\usepackage[usenames,dvipsnames]{xcolor}
\usepackage{tcolorbox}
\usepackage{tabularx}
\usepackage{array}
\usepackage{colortbl}
\tcbuselibrary{skins}
%table
\newcolumntype{Y}{>{\centering\arraybackslash}X}
\tcbset{tab2/.style={enhanced,fonttitle=\bfseries,fontupper=\normalsize\sffamily,
colback=white!10!white,colframe=red!50!black,colbacktitle=Salmon!40!white,
coltitle=black,center title}}
\newcommand{\btable}[2]{\begin{table}
\refstepcounter{table}\label{#2}
\begin{tcolorbox}[tab2,tabularx*={\renewcommand{\arraystretch}{1.7}}{#1},title=Table \ref{#2},boxrule=0.8pt]}
\newcommand{\ntable}{\end{tcolorbox} \end{table}}
%end ot table commands
\begin{document}
\btable{Y|Y|Y|Y|Y|Y}{kk}
group & one & two & three & four & sum \\\hline
red & 1000.00 & 2000.00 & 3000.00 & 4000.00 & 10000.00 \\\hline
green & 2000.00 & 3000.00 & 4000.00 & 5000.00 & 14000.00 \\\hline
blue & 3000.00 & 4000.00 & 5000.00 & 6000.00 & 18000.00 \\\hline
sum & 6000.00 & 9000.00 & 12000.00 & 15000.00 & 42000.00
%\end{tcolorbox}
%\end{table}
\ntable
\end{document}
产生\ntable
错误
! File ended while scanning use of \TX@get@body.
我该如何修复它?
答案1
我最简单的解决方案是加载environ
包并定义一个新环境
\usepackage{environ}
\NewEnviron{mytable}[2]%
{%
\begin{table}%
\refstepcounter{table}\label{#2}%
\begin{tcolorbox}[tab2,tabularx*={\renewcommand{\arraystretch}{1.7}}{#1},title=Table \ref{#2},boxrule=0.8pt]%
\BODY%
\end{tcolorbox}%
\end{table}%
}
这样你就可以把你的桌子称为
\begin{mytable}{Y|Y|Y|Y|Y|Y}{kk}
... whatever ...
\end{mytable}
您也可以使用普通的方法来做到这一点\newenvironment
,但这会比较棘手......
只是为了完整性:如果你真的想坚持语法,\btable{Y|Y|Y|Y|Y|Y}{kk} ... \ntable
你可以使用\def
,如
\def\btable#1#2#3\ntable{%
\begin{table}%
\refstepcounter{table}\label{#2}%
\begin{tcolorbox}[tab2,tabularx*={\renewcommand{\arraystretch}{1.7}}{#1},title=Table \ref{#2},boxrule=0.8pt]%
#3%
\end{tcolorbox}%
\end{table}%
}
但我不太鼓励采用这种解决方案。
答案2
不需要使用其他包。它tcolorbox
本身就可以完成。
\newtcolorbox{mytable}[3][]{
tab2,
tabularx*={\renewcommand{\arraystretch}{1.7}}{#2},
title=Table \ref{#3},
boxrule=0.8pt,
before={\begin{table}[htb]\refstepcounter{table}\label{#3}},
after={\end{table}},
#1
}
然后mytable
环境就会完成这项工作。
\documentclass{article}
\usepackage[usenames,dvipsnames]{xcolor}
\usepackage{tcolorbox}
\usepackage{tabularx}
\usepackage{array}
\usepackage{colortbl}
\tcbuselibrary{skins}
%table
\newcolumntype{Y}{>{\centering\arraybackslash}X}
\tcbset{tab2/.style={enhanced,fonttitle=\bfseries,fontupper=\normalsize\sffamily,
colback=white!10!white,colframe=red!50!black,colbacktitle=Salmon!40!white,
coltitle=black,center title}}
\newtcolorbox{mytable}[3][]{
tab2,
tabularx*={\renewcommand{\arraystretch}{1.7}}{#2},
title=Table \ref{#3},
boxrule=0.8pt,
before={\begin{table}[htb]\refstepcounter{table}\label{#3}},
after={\end{table}},
#1
}
\begin{document}
\begin{mytable}{Y|Y|Y|Y|Y|Y}{kk}
group & one & two & three & four & sum \\\hline
red & 1000.00 & 2000.00 & 3000.00 & 4000.00 & 10000.00 \\\hline
green & 2000.00 & 3000.00 & 4000.00 & 5000.00 & 14000.00 \\\hline
blue & 3000.00 & 4000.00 & 5000.00 & 6000.00 & 18000.00 \\\hline
sum & 6000.00 & 9000.00 & 12000.00 & 15000.00 & 42000.00
\end{mytable}
\end{document}