I've taken an example of a very cool table from here and I've made some changes to suit my needs, the problem is that the table it's not correctly rounded:
Unfortunately it doesn't seem to exist a rectagle element when you can only round some corners.
Here's MWE:
\documentclass[12pt,a4paper]{article}
\usepackage[utf8]{inputenc}
\usepackage[top=2.5cm, bottom=4cm, inner=2.5cm, outer=3.5cm]{geometry}
\usepackage{times}
\renewcommand{\rmdefault}{phv} % Arial
\renewcommand{\sfdefault}{phv} % Arial
\usepackage[T1]{fontenc}
\usepackage{textcomp} % necesario para el símbolo €
\usepackage[usenames,dvipsnames]{xcolor}
\usepackage[pdftex]{graphicx}
\usepackage{caption,subcaption}
\setlength\textfloatsep{1.7\baselineskip plus 0.2\baselineskip minus 0.5\baselineskip}
\setlength\intextsep{2\baselineskip plus 0.2\baselineskip minus 0.2\baselineskip}
\usepackage{environ} %lo usaré para crear el environ de tabla colorida
\usepackage{tabularx}
\usepackage{booktabs} % Contiene el comando \midrule
\usepackage{colortbl}
\usepackage{tikz}
\usetikzlibrary{patterns}
\usetikzlibrary{backgrounds,fit,calc}
\usetikzlibrary{%
decorations.fractals%
,decorations.pathmorphing%
,shadows%
}
\usetikzlibrary{decorations.pathmorphing}
\usetikzlibrary{decorations.text}
\usetikzlibrary{decorations.shapes} %para curvar texto
\usetikzlibrary{shapes,positioning} %para los flow charts
\usetikzlibrary{shapes,arrows,chains}
\pgfdeclarelayer{background}
\pgfdeclarelayer{foreground}
\pgfsetlayers{background,main,foreground}
\usetikzlibrary{intersections}
\colorlet{TablaBordeSuperior}{BurntOrange} %\definecolor{TablaBordeSuperior}{cmyk}{0,0.51,1,0} % BurntOrange
\colorlet{TablaBordeInferior}{Bittersweet} %\definecolor{TablaBordeInferior}{cmyk}{0,0.75,1,0.24} % Bittersweet
\colorlet{TablaCentroSuperior}{blue!1}
\colorlet{TablaCentroInferior}{blue!20}
\colorlet{FuenteCabeceraTabla}{white}
\newcommand{\fuentecabecera}[1]{\textcolor{FuenteCabeceraTabla}{\textbf{#1}}}
\newcommand{\encabezadoUnaLineaSuperior}{0.8}
\newcommand{\encabezadoUnaLineaInferior}{0.8}
\newcommand{\espaciadoCabeceraCuerpoUnaLinea}{0.5em}
\newcommand{\encabezadoDosLineasSuperior}{1.3}
\newcommand{\encabezadoDosLineasInferior}{1.2}
%\newcommand{\espaciadoCabeceraCuerpoDosLineas}{1.5em} %hay que aumentar el valor de 0.5 a 1.5 puesto que la cabecera ocupa dos líneas
\newcommand{\espaciadoCabeceraCuerpoDosLineas}{2em}
\newcommand{\encabezadoTresLineasSuperior}{1.8}
\newcommand{\encabezadoTresLineasInferior}{1.8}
\newcommand{\espaciadoCabeceraCuerpoTresLineas}{0.5em}
\newcommand{\encabezadoSuperior}{\encabezadoUnaLineaSuperior} %por defecto una línea
\newcommand{\encabezadoInferior}{\encabezadoUnaLineaInferior} %por defecto una línea
\newcommand{\espaciadoCabeceraCuerpo}{\espaciadoCabeceraCuerpoUnaLinea} %por defecto el de una línea
\newcommand{\encabezadoUnaLinea}{
\renewcommand{\encabezadoSuperior}{\encabezadoUnaLineaSuperior}
\renewcommand{\encabezadoInferior}{\encabezadoUnaLineaInferior}
\renewcommand{\espaciadoCabeceraCuerpo}{\espaciadoCabeceraCuerpoUnaLinea}}
\newcommand{\encabezadoDosLineas}{
\renewcommand{\encabezadoSuperior}{\encabezadoDosLineasSuperior}
\renewcommand{\encabezadoUnaLineaInferior}{\encabezadoDosLineasInferior}
\renewcommand{\espaciadoCabeceraCuerpo}{\espaciadoCabeceraCuerpoDosLineas}}
\newcommand{\encabezadoTresLineas}{
\renewcommand{\encabezadoSuperior}{\encabezadoTresLineasSuperior}
\renewcommand{\encabezadoUnaLineaInferior}{\encabezadoTresLineasInferior}
\renewcommand{\espaciadoCabeceraCuerpo}{\espaciadoCabeceraCuerpoTresLineas}}
%estos tres últimos comandos gestionan si el encabezado será de una línea, de dos o de tres
\newif\iflineaResaltado
\lineaResaltadofalse
\newcommand{\pieInferiorUno}{-5.2}
\newcommand{\pieInferiorDos}{3.45}
\newcommand{\resaltarPie}[2]{\lineaResaltadotrue\renewcommand{\pieInferiorUno}{#1}\renewcommand{\pieInferiorDos}{#2}}
\NewEnviron{tablacolorida}[2]{%
% \vspace*{-2em}
\begin{center}
\captionsetup{type=table} %para que no me de error el posterior comando \captionof
\begin{tikzpicture}
\node (tbl) {
\BODY
};
\begin{pgfonlayer}{background}
\draw[rounded corners,top color=TablaBordeSuperior,bottom color=TablaBordeInferior, draw=white] ($(tbl.north west)+(0.14,0)$)
rectangle ($(tbl.north east)-(0.13,\encabezadoSuperior)$); %el top color indica el color principal de la línea de cabecera %para tener encabezado de dos líneas (0.13,1.3)
\draw[rounded corners,top color=white,bottom color=TablaBordeInferior,
middle color=TablaBordeSuperior,draw=white!20] ($(tbl.south west)
+(0.13,0.5)$) rectangle ($(tbl.south east)-(0.13,0)$);
\draw[top color=TablaCentroSuperior,bottom color=TablaCentroInferior,draw=white] %el top color indica el color de inicio de las filas del medio, el "white" hace que el borde externo de las filas no se pinte
($(tbl.north east)-(0.13,\encabezadoInferior)$) %con el parámetro 0.8 controlamos la altura de la línea de cabecera %para tener encabezado de dos líneas (0.13,1.2)
rectangle ($(tbl.south west)+(0.13,0.2)$); %el 0.2 controla el grosor de la línea decorativa inferior
\iflineaResaltado
\draw[top color=TablaBordeSuperior,bottom color=TablaBordeSuperior, draw=white] ($(0,\pieInferiorUno)+(7.5,2)$)
rectangle ($(-0.5,1)-(7,\pieInferiorDos)$);
% ($(0,-4.8)+(7.5,2)$) ($(-0.5,1)-(7,3.1)$)
% ($(0,-5.2)+(7.5,2)$) ($(-0.5,1)-(7,3.45)$) %una fila más abajo
\fi
\end{pgfonlayer}
\end{tikzpicture}
\captionof{table}{#1} \label{tab:#2}
\end{center}
%\vspace*{-1em}
}
\begin{document}
\begin{tablacolorida}{Hitos del proyecto}{hitosProyecto}
\begin{tabularx}{1\textwidth}{m{0.10\linewidth} m{0.34\linewidth} m{0.48\linewidth}}
\arrayrulecolor{purple}
\centering\fuentecabecera{Hito} & \centering\fuentecabecera{Fecha} & \centering\arraybackslash\raisebox{-0.3em}{\fuentecabecera{Descripción}} \\[+\espaciadoCabeceraCuerpo]
\centering\textbf{H1} & \centering Mes 0 & \centering\arraybackslash Comienzo del proyecto \\ \midrule
\centering\textbf{H2} & \centering 2 meses y 3 semanas & \centering\arraybackslash Fin del estudio del arte \\ \midrule
\centering\textbf{H3} & \centering 6 meses y 1 semana & \centering\arraybackslash Finalización de la plataforma de virtualización \\ \midrule
\centering\textbf{H4} & \centering 9 meses & \centering\arraybackslash Finalización de lo concerniente a DTN \\ \midrule
\centering\textbf{H5} & \centering 10 meses y 1 semana & \centering\arraybackslash Finalización de lo concerniente a CDN \\ \midrule
\centering\textbf{H6} & \centering 12 meses & \centering\arraybackslash Fin del Proyecto Fin de Carrera (PFC) \\[0.5ex]
\end{tabularx}
\end{tablacolorida}
\resaltarPie{-9.7}{7.95}
\newcounter{paqueteTrabajo}
\newcounter{tarea}
\setcounter{paqueteTrabajo}{-1}
\newcommand{\filaRHpt}[7]{\addtocounter{paqueteTrabajo}{1}\setcounter{tarea}{1}\centering \bfseries{PT.\arabic{paqueteTrabajo}.} & \centering \bfseries{#1} & \centering \bfseries{#2} € & \centering \bfseries{#3} & \centering \bfseries{#4 €} & \centering \bfseries{#5} & \centering \bfseries{#6 €} & \centering\arraybackslash \bfseries{#7 €} \\ \midrule}
\newcommand{\filaRHt}[7]{\centering T.\arabic{paqueteTrabajo}\arabic{tarea}. & \centering #1 & \centering #2 € & \centering #3 & \centering #4 € & \centering #5 & \centering #6 € & \centering\arraybackslash #7 € \\ \midrule\addtocounter{tarea}{1}}
\newcommand{\filaRHTOTAL}[7]{\centering \fuentecabecera{Total} & \centering \fuentecabecera{#1} & \centering \fuentecabecera{#2 €} & \centering \fuentecabecera{#3} & \centering \fuentecabecera{#4 €} & \centering \fuentecabecera{#5} & \centering \fuentecabecera{#6 €} & \centering\arraybackslash \raisebox{-0.15em}{\fuentecabecera{#7 €}} \\}
\encabezadoTresLineas
\begin{tablacolorida}{Presupuesto de recursos humanos}{presupuestoRH}
\begin{tabularx}{1\textwidth}{m{0.08\linewidth} m{0.08\linewidth} m{0.11\linewidth} m{0.08\linewidth} m{0.11\linewidth} m{0.08\linewidth} m{0.11\linewidth} m{0.11\linewidth}}
\arrayrulecolor{purple}
\centering\fuentecabecera{\underline{Tarea}} & \multicolumn{7}{c}{\fuentecabecera{\underline{Recurso}}} \\ %[+\espaciadoCabeceraCuerpo]
& \multicolumn{2}{c}{\fuentecabecera{FL}} & \multicolumn{2}{c}{\fuentecabecera{JMC}} & \multicolumn{2}{c}{\fuentecabecera{AM}} & \centering\arraybackslash\fuentecabecera{Coste} \\
& \centering\fuentecabecera{CT} & \centering\fuentecabecera{Coste} & \centering\fuentecabecera{CT} & \centering\fuentecabecera{Coste} & \centering\fuentecabecera{CT} & \centering\fuentecabecera{Coste} & \\ [+\espaciadoCabeceraCuerpo] %Para añadir un último elemento sería \centering\arraybackslash\raisebox{-0.25em}{\fuentecabecera{Total}}
\filaRHpt{7}{0}{0}{0}{312}{0}{0} %PRIMER PAQUETE DE TRABAJO
\filaRHt{2}{0}{0}{0}{120}{0}{0}
\filaRHt{1}{0}{0}{0}{72}{0}{0}
\filaRHt{2}{0}{0}{0}{88}{0}{0}
\filaRHt{2}{0}{0}{0}{32}{0}{0}
\filaRHpt{8}{480}{1}{60}{408}{14688}{15228} %SEGUNDO PAQUETE DE TRABAJO
\filaRHt{1}{60}{0}{0}{88}{3168}{3228}
\filaRHt{1}{60}{0}{0}{72}{2592}{2652}
\filaRHt{3}{180}{0}{0}{88}{3168}{3348}
\filaRHt{3}{180}{1}{60}{160}{5760}{6000}
\filaRHpt{9}{540}{2}{120}{336}{12096}{12756} %TERCER PAQUETE DE TRABAJO
\filaRHt{2}{120}{0}{0}{72}{2592}{2712}
\filaRHt{2}{120}{0}{0}{88}{3168}{3288}
\filaRHt{1}{60}{0}{0}{88}{3168}{3228}
\filaRHt{4}{240}{2}{120}{88}{3168}{3528}
\filaRHpt{26}{1560}{1}{60}{192}{6912}{8532} %CUARTO PAQUETE DE TRABAJO
\filaRHt{24}{1440}{0}{0}{160}{5760}{7200}
\filaRHt{2}{120}{1}{60}{32}{1152}{1332}
\filaRHTOTAL{50}{2580}{4}{240}{1248}{33696}{36516}[0.5ex]
\end{tabularx}
\end{tablacolorida}
\encabezadoUnaLinea
\end{document}
Best Answer
One possibility using
tcolorbox
and its built-in interaction withtabularx
:The argument for the
rtab
style is used to control the number of lines that the table header will have.In comments, it has been requested to have the possibility to provide a caption and label for the tables; here's one possibility:
The
RCtable
environment has one optional argument that can be used to specify the placement options (similar to the optional argument of the standardtable
environment), and three mandatory arguments: the first one, used for the options that build the table from thetcolorbox
, the second one for the caption, and the third one to build the label (the label will have the formtab:text
, wheretext
is the string used in the third mandatory argument forRCtable
.)