带圆角的桌子

带圆角的桌子

我从中选取了一个非常酷的表格作为示例这里我已经做了一些改变来满足我的需要,问题是表格没有正确地舍入: 在此处输入图片描述

不幸的是,当你只能将某些角弄圆时,似乎不存在矩形元素。这是 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}

答案1

一种可能性是使用tcolorbox以及其内置的交互tabularx

\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[usenames,dvipsnames,table]{xcolor}
\usepackage[most]{tcolorbox}
\usepackage{tabularx}
\usepackage{booktabs}
\usepackage{times}

\renewcommand\rmdefault{phv} % Arial
\renewcommand\sfdefault{phv} % Arial

\colorlet{TablaBordeSuperior}{BurntOrange}
\colorlet{TablaBordeInferior}{Bittersweet}
\colorlet{TablaCentroSuperior}{blue!1}
\colorlet{TablaCentroInferior}{blue!20}
\colorlet{FuenteCabeceraTabla}{white}

\newcolumntype{M}[1]{>{\centering\arraybackslash}m{#1}}

\tcbset{rtab/.style={
freelance,
frame code={
  \path[top color=BurntOrange,bottom color=Bittersweet] 
    ([yshift=-#1*(\baselineskip+2pt)]interior.north west) --
    ([yshift=-#1*(\baselineskip+2pt)]interior.north east) {[rounded corners]--
    ([yshift=3pt]interior.north east) --
    ([yshift=3pt]interior.north west)} -- cycle;
  \path[top color=TablaCentroSuperior,bottom color=TablaCentroInferior] 
    ([yshift=-#1*(\baselineskip+2pt)]interior.north west) --
    ([yshift=-#1*(\baselineskip+2pt)]interior.north east) --
    (interior.south east) --
    (interior.south west) -- cycle;
  \path[top color=TablaBordeInferior,bottom color=TablaBordeSuperior] 
    (interior.south west) --
    (interior.south east) {[rounded corners]--
    ([yshift=-5pt]interior.south east) --
    ([yshift=-5pt]interior.south west)} -- cycle;
  },
interior code={},
 }
}

\newcommand\fuentecabecera[1]{\textcolor{FuenteCabeceraTabla}{\textbf{#1}}}

\begin{document}

\begin{tcolorbox}[
  rtab=1,
  tabularx*={\arrayrulecolor{purple}}%
    {>{\bfseries}M{0.10\linewidth} M{0.33\linewidth}M{0.46\linewidth}}
]
\fuentecabecera{Hito} & \fuentecabecera{Fecha} & \fuentecabecera{Descripción} \\
\\[-1.7ex]
H1 &  Mes 0 & Comienzo del proyecto \\ 
\midrule
H2 & 2 meses y 3 semanas & Fin del estudio del arte \\ 
\midrule
H3 & 6 meses y 1 semana & Finalización de la plataforma de virtualización \\ 
\midrule
H4 & 9 meses & Finalización de lo concerniente a DTN \\ 
\midrule
H5 & 10 meses y 1 semana & Finalización de lo concerniente a CDN \\ 
\midrule
H6 & 12 meses & Fin del Proyecto Fin de Carrera (PFC) \\ 
\end{tcolorbox}

\vspace{1cm}% just for the example

\begin{tcolorbox}[
  rtab=2,
  tabularx*={\arrayrulecolor{purple}}%
    {>{\bfseries}M{0.10\linewidth} M{0.33\linewidth}M{0.46\linewidth}}
]
\fuentecabecera{Lin1} & \fuentecabecera{Lin1} & \fuentecabecera{Lin1} \\
\fuentecabecera{Lin2} & \fuentecabecera{Lin2} & \fuentecabecera{Lin2} \\
\\[-1.7ex]
H1 &  Mes 0 & Comienzo del proyecto \\ 
\midrule
H2 & 2 meses y 3 semanas & Fin del estudio del arte \\ 
\midrule
H3 & 6 meses y 1 semana & Finalización de la plataforma de virtualización \\ 
\midrule
H4 & 9 meses & Finalización de lo concerniente a DTN \\ 
\midrule
H5 & 10 meses y 1 semana & Finalización de lo concerniente a CDN \\ 
\midrule
H6 & 12 meses & Fin del Proyecto Fin de Carrera (PFC) \\ 
\end{tcolorbox}

\end{document}

在此处输入图片描述

样式的参数rtab用于控制表头的行数。

在评论中,有人要求可以为表格提供标题和标签;这是一种可能性:

\documentclass{article}
\usepackage[spanish]{babel}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[usenames,dvipsnames,table]{xcolor}
\usepackage[most]{tcolorbox}
\usepackage{tabularx}
\usepackage{booktabs}
\usepackage{environ}
\usepackage{times}

\renewcommand\rmdefault{phv} % Arial
\renewcommand\sfdefault{phv} % Arial

\colorlet{TablaBordeSuperior}{BurntOrange}
\colorlet{TablaBordeInferior}{Bittersweet}
\colorlet{TablaCentroSuperior}{blue!1}
\colorlet{TablaCentroInferior}{blue!20}
\colorlet{FuenteCabeceraTabla}{white}

\newcolumntype{M}[1]{>{\centering\arraybackslash}m{#1}}

\tcbset{rtab/.style={
freelance,
frame code={
  \path[top color=BurntOrange,bottom color=Bittersweet] 
    ([yshift=-#1*(\baselineskip+2pt)]interior.north west) --
    ([yshift=-#1*(\baselineskip+2pt)]interior.north east) {[rounded corners]--
    ([yshift=3pt]interior.north east) --
    ([yshift=3pt]interior.north west)} -- cycle;
  \path[top color=TablaCentroSuperior,bottom color=TablaCentroInferior] 
    ([yshift=-#1*(\baselineskip+2pt)]interior.north west) --
    ([yshift=-#1*(\baselineskip+2pt)]interior.north east) --
    (interior.south east) --
    (interior.south west) -- cycle;
  \path[top color=TablaBordeInferior,bottom color=TablaBordeSuperior] 
    (interior.south west) --
    (interior.south east) {[rounded corners]--
    ([yshift=-5pt]interior.south east) --
    ([yshift=-5pt]interior.south west)} -- cycle;
  },
interior code={},
 }
}

\newcommand\fuentecabecera[1]{\textcolor{FuenteCabeceraTabla}{\textbf{#1}}}

\NewEnviron{RCtable}[4][htbp]
  {%
    \begin{table}[#1]
    \begin{tcolorbox}[#2]\BODY\end{tcolorbox}%
    \caption{#3}
    \label{tab:#4}
    \end{table}
  }

\begin{document}

Como vemos en los cuadros~\ref{tab:pruebaa} y ~\ref{tab:pruebab}...
\begin{RCtable}{
  rtab=1,
  tabularx*={\arrayrulecolor{purple}}%
    {>{\bfseries}M{0.10\linewidth} M{0.33\linewidth}M{0.46\linewidth}}
}{Primer cuadro de prueba}{pruebaa}
\fuentecabecera{Hito} & \fuentecabecera{Fecha} & \fuentecabecera{Descripción} \\
\\[-1.7ex]
H1 &  Mes 0 & Comienzo del proyecto \\ 
\midrule
H2 & 2 meses y 3 semanas & Fin del estudio del arte \\ 
\midrule
H3 & 6 meses y 1 semana & Finalización de la plataforma de virtualización \\ 
\midrule
H4 & 9 meses & Finalización de lo concerniente a DTN \\ 
\midrule
H5 & 10 meses y 1 semana & Finalización de lo concerniente a CDN \\ 
\midrule
H6 & 12 meses & Fin del Proyecto Fin de Carrera (PFC) \\ 
\end{RCtable}


\begin{RCtable}{
  rtab=2,
  tabularx*={\arrayrulecolor{purple}}%
    {>{\bfseries}M{0.10\linewidth} M{0.33\linewidth}M{0.46\linewidth}}
}{Segundo cuadro de prueba}{pruebab}
\fuentecabecera{Lin1} & \fuentecabecera{Lin1} & \fuentecabecera{Lin1} \\
\fuentecabecera{Lin2} & \fuentecabecera{Lin2} & \fuentecabecera{Lin2} \\
\\[-1.7ex]
H1 &  Mes 0 & Comienzo del proyecto \\ 
\midrule
H2 & 2 meses y 3 semanas & Fin del estudio del arte \\ 
\midrule
H3 & 6 meses y 1 semana & Finalización de la plataforma de virtualización \\ 
\midrule
H6 & 12 meses & Fin del Proyecto Fin de Carrera (PFC) \\ 
\end{RCtable}

\end{document}

在此处输入图片描述

环境RCtable具有一个可选参数,可用于指定放置选项(类似于标准table环境的可选参数),以及三个强制参数:第一个参数用于从构建表格的选项tcolorbox,第二个参数用于标题,第三个参数用于构建标签(标签的形式为tab:text,其中text是的第三个强制参数中使用的字符串RCtable。)

答案2

{NiceTabular}这是 (≥ 6.22 of 2023-08-14) 和 TikZ的解决方案nicematrix。您需要进行多次编译。

\documentclass{article}
\usepackage[usenames,dvipsnames]{xcolor}
\usepackage{nicematrix,tikz}
\usetikzlibrary{patterns}
\usepackage{times}
\renewcommand\rmdefault{phv} % Arial
\renewcommand\sfdefault{phv} % Arial

\begin{document}

\begin{center}

\newcommand{\MyLine}{\Hline[tikz={line width=0.7pt,color=purple}]}

\begin{NiceTabular} 
  [
    width = 0.9 \linewidth , 
    cell-space-limits=1mm, 
    rounded-corners,
    rules/width = 0pt
  ]
  {>{\bfseries} X[m,c,10] X[m,c,33] X[m,c,46]}
  \Block[tikz ={top color = BurntOrange, bottom color = Bittersweet}]{1-*}{}
  \RowStyle[color=white,bold]{}
      Hito & Fecha & Descripción \\
  % In the following \Block, 'transparent' means 'transparent for the rules \Myline'
  \Block[transparent,tikz ={top color = blue!1, bottom color = blue!20}]{6-*}{}
      H1 &  Mes 0 & Comienzo del proyecto \\ \MyLine
      H2 & 2 meses y 3 semanas & Fin del estudio del arte \\ \MyLine
      H3 & 6 meses y 1 semana & Finalización de la plataforma de virtualización \\ \MyLine
      H4 & 9 meses & Finalización de lo concerniente a DTN \\ \MyLine
      H5 & 10 meses y 1 semana & Finalización de lo concerniente a CDN \\ \MyLine
      H6 & 12 meses & Fin del Proyecto Fin de Carrera (PFC) \\ 
  \noalign{\vspace*{-4mm}}  % in order to have a last row with small height
  \Block[tikz ={top color = Bittersweet, bottom color = BurntOrange}]{1-*}{}
\end{NiceTabular}

\end{center}

\end{document}

上述代码的输出

相关内容