2

I love the way Latex looks, but sometimes, it's a nightmare to sort things out. I am trying to make a table, and I am at his point.

At first, I tried to create the table using "tabular", but when attempting to set a background color for cells with "multiRow" and "makeCell" (for cells with line breaks), I encountered that annoying almost imperceptible white line. I tried using \arrayrulecolor{red}\hline and also cline, but ultimately gave up.

So, I decided to switch to NiceTabular and with a mixture of code from both approaches, I managed to obtain the table in the photo. This table is in a separate file, but when I copy the code and paste it into my thesis, I get an error of "Missing $", and I've noticed it's related to the options for painting borders like \Block borders={right,left}. If I remove this option, it compiles, but it doesn't paint the borders; if I want borders, it doesn't compile. So here I am.

enter image description here

\documentclass[oneside,a4paper]{book} % One side para que no ponga páginas en blanco entre capitulos
\usepackage{graphicx} % Para usar imágenes
\graphicspath{{images/}} % Ruta a las imágenes
\usepackage[dvipsnames, table, svgnames]{xcolor} % Para usar mas colores
\usepackage{pgfplots} % Gráficos de barras
\pgfplotsset{compat=1.18} % Offset de los gráficos
\usepackage[shortlabels]{enumitem} % Enumerates con letras
\usepackage{tikz} % Usar gráficos

\usepackage{multirow,hhline}
\usepackage{makecell} % Salto de linea en celdas
\usepackage{nicematrix}
\renewcommand\theadalign{bc}
\renewcommand\theadfont{\bfseries}
\renewcommand\theadgape{\Gape[4pt]}
\renewcommand\cellgape{\Gape[4pt]}

\usepackage[usegeometry]{typearea}% load before geometry
%\usepackage[a4paper,width=150mm,vmargin=25mm,bindingoffset=12mm]{geometry}

\usepackage{fancyhdr}

\renewcommand{\arraystretch}{1.5} % Espaciado por defecto en tablas
\usepackage[spanish]{babel} % Capitulos en español
\addto\captionsspanish{
    \def\tablename{Tabla}
    \def\listtablename{\'Indice de tablas}
}
\usepackage[titles]{tocloft} %Espaciado de las lineas de los índices de tablas y figuras
\renewcommand\cftfigafterpnum{\vskip5pt\par} % Espacio entre figuras mismo capítulo
\renewcommand\cfttabafterpnum{\vskip5pt\par} % Espacio entre tablas mismo capítulo

\usepackage{titlesec} % Customizar portada
\usepackage{color, colortbl} % Colorear tablas

\definecolor{Gris}{gray}{0.9} % Gris claro para las tablas
\definecolor{ud1}{RGB}{230,184,175}
\definecolor{ud2}{RGB}{202,219,255}
\definecolor{ud3}{RGB}{255,236,150}
\definecolor{ud4}{RGB}{182,219,166}
\definecolor{ud5}{RGB}{177,163,218}
\definecolor{ud6}{RGB}{252,206,154}
\definecolor{ud7}{RGB}{161,196,203}
\definecolor{ud8}{RGB}{211,163,190}
\usepackage{geometry} % Para definir formatos de página
\geometry{a4paper,top=25mm,bottom=25mm,left=30mm,right=30mm}%A4 y margenes

\titleformat{\chapter}[display]
  {\normalfont\bfseries}{}{0pt}{\Huge}
  
\title{Programación didáctica del Módulo \protect\\ 0226. Seguridad Informática}
\author{Alberto González Berrio}
\date{Curso 2023-2024}

\begin{document}
            \clearpage
            \KOMAoptions{paper=landscape,DIV=last}
            %\newgeometry{margin=3cm}
            \newgeometry{hmargin=25mm,bottom=20mm,height=180mm,includehead}
            \fancyheadoffset{0pt}% recalculate headwidth for fancyhdr
                \begin{table}[ht]
                \centering
                \begin{NiceTabular}{| m{1.5cm} m{3cm}  m{6.25cm}  m{6.25cm} m{1.5cm} m{1.5cm} |}
                    \Hline
                    \Block[C,fill=ud5]{1-1}{\textbf{UD 5}}& \Block[C,fill=ud5]{1-3}{\textbf{Software de seguridad (malware y antimalware)}} & && \Block[C,fill=ud5]{1-2}{\textbf{19 horas}}   \\
                    \hline
                    \Block[C,fill=gray!15]{2-2}{RAs - Criterios de evaluación} & & \Block[C,fill=gray!15]{2-1}{Conceptos} &\Block[C,fill=gray!15]{2-1}{Actividades} &  \Block[C,fill=gray!15]{1-2}{Ponderación}  \\
                    %\Hline
                          &           &            &                         &     \Block[C,fill=gray!15]{1-1}{Continua} & \Block[C,fill=gray!15]{1-1}{Final}\\
                    \hline
                    \hline
                            \multicolumn{2}{|l|}{\multirow{3}{*}{
                                \makecell[tl]{
                                    \smallskip \textbf{RA3 – Medidas de seguridad activa}\\
                                    \quad a) Sigue planes de contingencia para\\ 
                                    \smallskip \quad\quad actuar ante fallos de seguridad.\\
                                    \quad b) Clasifica los principales tipos de\\ 
                                    \smallskip \quad\quad software malicioso.\\
                                    \quad c) Realiza actualizaciones periódicas\\
                                    \quad\quad de los sistemas para corregir\\
                                    \smallskip \quad\quad posibles vulnerabilidades.\\
                                    \quad d) Verifica el origen y la autenticidad\\ 
                                    \quad\quad de las aplicaciones que se instalan\\
                                    \smallskip \quad\quad en los sistemas.\\
                                    \quad e) Instala, prueba y actualiza \\
                                    \quad\quad aplicaciones específicas para \\
                                    \quad\quad la detección y eliminación de \\
                                    \smallskip \quad\quad software malicioso.\\
                                    \quad f) Aplica técnicas de recuperación \\ 
                                    \quad\quad de datos.\\\\
                                }
                            } }
                            & 
                            \multicolumn{1}{l|}{\multirow{3}{*}{\makecell[tl]{
                                \smallskip\textbf{Malware y Antimalware}\\
                                \smallskip $\bullet$ Motivaciones de un ataque.\\
                                \smallskip $\bullet$ Tipos de atacantes.\\
                                \smallskip $\bullet$ Tipos de ataque:\\
                                        \quad\quad $\circ$ Activos.\\
                                        \smallskip \quad\quad $\circ$ Pasivos.\\
                                \smallskip$\bullet$ Fases y herramientas de un ataque:\\
                                        \quad\quad $\circ$ Reconocimiento.\\
                                        \quad\quad $\circ$ Escaneo.\\
                                        \quad\quad $\circ$ Acceso.\\
                                        \quad\quad $\circ$ Persistencia.\\
                                \smallskip \quad\quad $\circ$ Borrado de huellas.\\
                                \smallskip$\bullet$ Protección:\\
                                \quad\quad $\circ$ Contramedidas.\\
                            } }}
                            &
                            \multicolumn{1}{l|}{
                                \makecell[tl]{
                                    \smallskip \textbf {Entregables de clase:}\\
                                    $\bullet$ Ejercicios cortos planteados en el aula\\
                                    \smallskip \quad  virtual después de cada explicación.\\
                                    \smallskip \quad\quad $\circ$ Reconocimiento de una empresa.\\
                                    \smallskip \quad\quad $\circ$ Análisis de puertos.\\
                                    \smallskip \quad\quad $\circ$ Pentesting.\\
                                    \quad\quad $\circ$ Análisis forense.\\
                                }
                            } 
                            & \multicolumn{1}{c}{10\%}&  \multicolumn{1}{|c|}{-} \\
                        \cline{4-6}
                            \multicolumn{2}{|c|}{}
                            & 
                            \multicolumn{1}{c|}{}
                            &
                            \multicolumn{1}{l|}{
                                \makecell[tl]{
                                    \smallskip \textbf {Práctica:}\\
                                    $\bullet$ Desarrollo completo de las fases\\
                                    \quad  de un ciberataque.\\
                                    \smallskip $\bullet$ CTF - Scape Room.\\\\\\
                                }
                            } 
                            & \multicolumn{1}{c}{60\%} &  \multicolumn{1}{|c|}{65\%} \\
                        \cline{4-6}
                            \multicolumn{2}{|c|}{}
                            & 
                            \multicolumn{1}{c|}{}
                            &
                            \multicolumn{1}{l|}{
                                \makecell[tl]{
                                    \smallskip \textbf {Prueba teórico-práctica:}\\
                                    $\bullet$ Examen de conocimientos adquiridos\\
                                    \quad  en el ejercicio práctico.\\\\\\\\
                                }
                            } 
                            & \multicolumn{1}{c}{30\%} &  \multicolumn{1}{|c|}{35\%} \\

                    \hline
                    \hline
                    \multicolumn{1}{|c|}{\multirow{2}{*}{Requisitos}} & Materiales & \multicolumn{4}{|l|}{Ordenador (de clase o propio) e Internet (para acceder al aula virtual y otras webs de apoyo).} \\\cline{2-6}
                       \multicolumn{1}{|c|}   {}             & Conceptuales & \multicolumn{4}{|l|}{Máquinas Virtuales (\textbf{Sistemas Operativos en Red}), SSH (\textbf{Servicios en Red}), Subnetting (\textbf{Redes Locales}).}\\
                    \hline
                \end{NiceTabular}
                \caption{Unidad Didáctica 5}
                \label{table:UD5}
            \end{table}

\end{document}

There are several things I don't understand:

  • Why, if I define {| m{1.5cm} m{3cm} m{6.25cm} m{6.25cm} m{1.5cm} m{1.5cm} |}, the columns don't measure exactly that and change size.
  • Why the last column, which has the same size as the penultimate one, appears with different sizes.
  • Why I can't have an exact size for the entire table.
  • Percentage values cannot be centered in the cell.

In a different file, i have the same code but with \Block[C,fill=ud5,borders={right,left} in the right places, and it looks a little bit better. But still the las Row is not center aligned, last column still different sizes, and percentages on top instead of centered.

enter image description here

So, I decided to do it properly without mixing "tabular" and NiceTabular, using only \Blocks and no multiRow, multiColumn, or makecells in order to be able to include it in my thesis. But this one is even harder to control. With this one is very hard to get the floating effect from header and footer with the double hline.

enter image description here

\documentclass[]{article}
\usepackage{multirow,hhline}
\usepackage{makecell} % Salto de linea en celdas
\usepackage{nicematrix}
\renewcommand\theadalign{bc}
\renewcommand\theadfont{\bfseries}
\renewcommand\theadgape{\Gape[8pt]}
\renewcommand\cellgape{\Gape[8pt]}


\usepackage[usegeometry]{typearea}% load before geometry
%\usepackage[a4paper,width=150mm,vmargin=25mm,bindingoffset=12mm]{geometry}
\definecolor{Gris}{gray}{0.9} % Gris claro para las tablas
\definecolor{ud5}{RGB}{177,163,218}

\usepackage{fancyhdr}

\usepackage{geometry} % Para definir formatos de página
\geometry{a4paper,top=25mm,bottom=25mm,left=30mm,right=30mm}%A4 y margenes

\begin{document}

\clearpage
            \KOMAoptions{paper=landscape,DIV=last}
            %\newgeometry{margin=3cm}
            \newgeometry{hmargin=3cm,bottom=25mm,height=170mm,includehead}
            \fancyheadoffset{0pt}% recalculate headwidth for fancyhdr

            \begin{table}[ht]
                \centering
                \NiceMatrixOptions{cell-space-limits = 5pt}
                \begin{NiceTabular}{ m{1.5cm} m{3cm}  m{6.25cm}  m{6.25cm} m{1.5cm} m{1cm} }
                    \Hline
                        \Block[C,fill=ud5,borders={right,left}]{1-1}{\textbf{UD 5}}& \Block[C,fill=ud5,borders={right}]{1-3}{\textbf{Software de seguridad (malware y antimalware)}} & && \Block[C,fill=ud5,borders={right}]{1-2}{\textbf{19 horas}}   \\
                    \Hline
                        \Block[C,fill=gray!15,borders={right,left}]{2-2}{RAs - Criterios de evaluación} & & \Block[C,fill=gray!15,borders={right}]{2-1}{Conceptos} &\Block[C,fill=gray!15,borders={right}]{2-1}{Actividades} &  \Block[C,fill=gray!15,borders={right}]{1-2}{Ponderación}  \\
                    \Hline
                          &           &            &                         &     \Block[C,fill=gray!15,borders={right}]{1-1}{Continua} & \Block[C,fill=gray!15,borders={right}]{1-1}{Final}\\
                    \Hline
                    \rule{0pt}{7cm}
                    \NiceMatrixOptions{cell-space-limits = 5pt}
                            \Block[L,T,borders={right,left}]{3-2}{
                                    \textbf{RA3 – Medidas de seguridad activa}\\
                                    \quad a) Sigue planes de contingencia para\\ 
                                    \smallskip \quad\quad actuar ante fallos de seguridad.\\
                                    \quad b) Clasifica los principales tipos de\\ 
                                    \smallskip \quad\quad software malicioso.\\
                                    \quad c) Realiza actualizaciones periódicas\\
                                    \quad\quad de los sistemas para corregir\\
                                    \smallskip \quad\quad posibles vulnerabilidades.\\
                                    \quad d) Verifica el origen y la autenticidad\\ 
                                    \quad\quad de las aplicaciones que se instalan\\
                                    \smallskip \quad\quad en los sistemas.\\
                                    \quad e) Instala, prueba y actualiza \\
                                    \quad\quad aplicaciones específicas para \\
                                    \quad\quad la detección y eliminación de \\
                                    \smallskip \quad\quad software malicioso.\\
                                    \quad f) Aplica técnicas de recuperación \\ 
                                    \quad\quad de datos.\\
                            }
                            & &
                            \Block[L,T,borders={right,left}]{3-1}{
                                \textbf{Malware y Antimalware}\\
                                \smallskip $\bullet$ Motivaciones de un ataque.\\
                                \smallskip $\bullet$ Tipos de atacantes.\\
                                \smallskip $\bullet$ Tipos de ataque:\\
                                        \quad\quad $\circ$ Activos.\\
                                        \smallskip \quad\quad $\circ$ Pasivos.\\
                                \smallskip$\bullet$ Fases y herramientas de un ataque:\\
                                        \quad\quad $\circ$ Reconocimiento.\\
                                        \quad\quad $\circ$ Escaneo.\\
                                        \quad\quad $\circ$ Acceso.\\
                                        \quad\quad $\circ$ Persistencia.\\
                                \smallskip \quad\quad $\circ$ Borrado de huellas.\\
                                \smallskip$\bullet$ Protección:\\
                                \quad\quad $\circ$ Contramedidas.\\
                            }
                            &
                            \Block[L,T,borders={right,left}]{1-1}{
                                \textbf {Entregables de clase:}\\
                                $\bullet$ Ejercicios cortos planteados en el aula\\
                                \smallskip \quad  virtual después de cada explicación.\\
                                \smallskip \quad\quad $\circ$ Reconocimiento de una empresa.\\
                                \smallskip \quad\quad $\circ$ Análisis de puertos.\\
                                \smallskip \quad\quad $\circ$ Pentesting.\\
                                \quad\quad $\circ$ Análisis forense.\\
                            } 
                            & \Block[C,borders={right,left}]{1-1}{10\%}&  \Block[C,borders={right,left}]{1-1}{-} \\
                        \Hline
                            &&&
                            \Block[L,T,borders={right,left}]{1-1}{
                                \smallskip \textbf {Práctica:}\\
                                $\bullet$ Desarrollo completo de las fases\\
                                \quad  de un ciberataque.\\
                                \smallskip $\bullet$ CTF - Scape Room.\\
                            } 
                            &
                            \Block[C,borders={right,left}]{1-1}{60\%} 
                            &
                            \Block[C,borders={right,left}]{1-1}{65\%} \\
                        \Hline
                            &&&
                            \Block[L,T,borders={right,left}]{1-1}{
                                \smallskip \textbf {Prueba teórico-práctica:}\\
                                $\bullet$ Examen de conocimientos adquiridos\\
                                \quad  en el ejercicio práctico.\\
                            }
                            &
                            \Block[C,borders={right,left}]{1-1}{30\%} 
                            &
                            \Block[C,borders={right,left}]{1-1}{35\%} \\

                    \Hline
                    \hline
                    \multicolumn{1}{|c|}{\multirow{2}{*}{Requisitos}} & Materiales & \multicolumn{4}{|l|}{Ordenador (de clase o propio) e Internet (para acceder al aula virtual y otras webs de apoyo).} \\\cline{2-6}
                       \multicolumn{1}{|c|}   {}             & Conceptuales & \multicolumn{4}{|l|}{Máquinas Virtuales (\textbf{Sistemas Operativos en Red}), SSH (\textbf{Servicios en Red}), Subnetting (\textbf{Redes Locales}).}\\
                    \hline
                \end{NiceTabular}
                \caption{Unidad Didáctica 5}
                \label{table:UD5}
            \end{table}
\end{document} 

I've been trying a thousand things, but I can't get it to look right. Please, can someone help me? I would be eternally grateful.

2
  • 1
    Welcome to tex.sx. Commented Mar 31 at 1:00
  • How many times are you compiling before deciding it isn't working and changing something? I'm not very familiar with nicematrix etc., but lots of these packages take several runs for things to settle down. If you keep making changes, they never settle and that would look very much like columns changing widths on their own.
    – cfr
    Commented Mar 31 at 6:50

1 Answer 1

2

Here is a solution with {NiceTabular} of nicematrix.

\documentclass{article}
\usepackage[usegeometry]{typearea}
\usepackage{geometry}
\geometry{a4paper,top=25mm,bottom=25mm,left=30mm,right=30mm}
\usepackage{fancyhdr}

\usepackage{nicematrix}

\begin{document}


\KOMAoptions{paper=landscape,DIV=last}
\newgeometry{hmargin=3cm,bottom=25mm,height=170mm,includehead}
\fancyheadoffset{0pt}% recalculate headwidth for fancyhdr

\begin{table}[ht]
\centering
\NiceMatrixOptions{cell-space-limits = 5pt}
\begin{NiceTabular}{c w{l}{45mm} l l w{c}{21mm} w{c}{21mm} }[hvlines]
\RowStyle[rowcolor=[RGB]{177,163,218}]{\bfseries}
UD5 & \Block{1-3}{Software de seguridad (malware y antimalware)} &&& \Block{1-2}{19 horas} \\
\RowStyle[rowcolor=gray!15,nb-rows=2]{}
\Block[C]{2-2}{RAs - Criterios de evaluación} && \Block[C]{2-1}{Conceptos} & \Block[C]{2-1}{Actividades} & \Block[C]{1-2}{Ponderación}  \\
& & & & Continua & Final\\
\Block[L,T]{3-2}{ \rule{0pt}{6mm}
        \textbf{RA3 – Medidas de seguridad activa}\\
        \quad a) Sigue planes de contingencia para\\ 
        \smallskip \quad\quad actuar ante fallos de seguridad.\\
        \quad b) Clasifica los principales tipos de\\ 
        \smallskip \quad\quad software malicioso.\\
        \quad c) Realiza actualizaciones periódicas\\
        \quad\quad de los sistemas para corregir\\
        \smallskip \quad\quad posibles vulnerabilidades.\\
        \quad d) Verifica el origen y la autenticidad\\ 
        \quad\quad de las aplicaciones que se instalan\\
        \smallskip \quad\quad en los sistemas.\\
        \quad e) Instala, prueba y actualiza \\
        \quad\quad aplicaciones específicas para \\
        \quad\quad la detección y eliminación de \\
        \smallskip \quad\quad software malicioso.\\
        \quad f) Aplica técnicas de recuperación \\ 
        \quad\quad de datos.\\
}
&& 
\Block[T]{3-1}{\rule{0pt}{6mm}%
    \textbf{Malware y Antimalware}\\
    \smallskip $\bullet$ Motivaciones de un ataque.\\
    \smallskip $\bullet$ Tipos de atacantes.\\
    \smallskip $\bullet$ Tipos de ataque:\\
            \quad\quad $\circ$ Activos.\\
            \smallskip \quad\quad $\circ$ Pasivos.\\
    \smallskip$\bullet$ Fases y herramientas de un ataque:\\
            \quad\quad $\circ$ Reconocimiento.\\
            \quad\quad $\circ$ Escaneo.\\
            \quad\quad $\circ$ Acceso.\\
            \quad\quad $\circ$ Persistencia.\\
    \smallskip \quad\quad $\circ$ Borrado de huellas.\\
    \smallskip$\bullet$ Protección:\\
    \quad\quad $\circ$ Contramedidas.\\
}
&
\Block{}{\rule{0pt}{4mm}%
    \textbf{Entregables de clase:}\\
    $\bullet$ Ejercicios cortos planteados en el aula\\
    \smallskip \quad  virtual después de cada explicación.\\
    \smallskip \quad\quad $\circ$ Reconocimiento de una empresa.\\
    \smallskip \quad\quad $\circ$ Análisis de puertos.\\
    \smallskip \quad\quad $\circ$ Pentesting.\\
    \quad\quad $\circ$ Análisis forense.\\
} 
    & 10\%
    & - \\
    &&&
    \Block{}{
        \smallskip \textbf {Práctica:}\\
        $\bullet$ Desarrollo completo de las fases\\
        \quad  de un ciberataque.\\
        \smallskip $\bullet$ CTF - Scape Room.\\
    } 
    & 60\% 
    & 65\% \\
    &&&
    \Block{}{
        \smallskip \textbf {Prueba teórico-práctica:}\\
        $\bullet$ Examen de conocimientos adquiridos\\
        \quad  en el ejercicio práctico.\\ \quad \\ 
    }
    & 30\%
    & 35\% \\ \Hline \Hline
\Block{2-1}{Requisitos} 
 & Materiales & \Block[l]{1-4}{Ordenador (de clase o propio) e Internet (para acceder al aula virtual y otras webs de apoyo).} \\

 & Conceptuales & \Block[l]{1-4}{Máquinas Virtuales (\textbf{Sistemas Operativos en Red}), SSH (\textbf{Servicios en Red}), Subnetting (\textbf{Redes Locales}).}\\

\end{NiceTabular}
\caption{Unidad Didáctica 5}
\label{table:UD5}
\end{table}
\end{document} 

Output of the above code

  • The key hvlines of nicematrix draws all the rules, except in the blocks (created by \Block). However, it's still possible to add a double horizontal rule with \Hline\Hline.

  • The command \Block of nicematrix does not create space, except for the mono-column and mono-row blocks. Here, the main block ("RA3") has two rows and two columns and therefore, won't create space. That's why I have set the width of the second column by hand (w{l}{45mm}). As regards the height of the content of that block, the space will be ensured by the contents of the cells in the fourth column ("Actividades"). That's why I have added a line at the end of the cell "Prueba..." in order to have enough space for the block "RA3".

4
  • @Alberto Gonzalez Berrio: If this code does not work in a document which loads more package, you should try to add those packages to this MWE (minimal working example) to see which package has an incompatibility with nicematrix. Commented Mar 31 at 17:14
  • I have tried, but, even accesing the table with \usepackage{subfiles}, I see it right in the table.tex file but same as the picture in the tesis. Commented Mar 31 at 18:44
  • It will be difficult to solve that problem here. I suggest you to send me a mail (you will find my address on the documentation of nicematrix). Commented Mar 31 at 18:47
  • If you use Overleaf, you should upload the latest version of the file nicematrix.sty in the repertory of your Overleaf project. You can find that file on the SVN server of TeXLive: www.tug.org/svn/texlive/trunk/Master/texmf-dist/tex/latex/nicematrix/nicematrix.sty Commented Mar 31 at 19:45

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .