混合 NiceTabular、MultiRow、Multicolumn、对齐问题和缺失 $

混合 NiceTabular、MultiRow、Multicolumn、对齐问题和缺失 $

我喜欢 Latex 的外观,但有时整理东西简直是一场噩梦。我正在尝试制作一张桌子,现在我正处于这个阶段。

起初,我尝试使用“tabular”创建表格,但在尝试使用“multiRow”和“makeCell”(对于有换行符的单元格)为单元格设置背景颜色时,我遇到了令人讨厌的几乎难以察觉的白线。我尝试使用 \arrayrulecolor{red}\hline 和 cline,但最终放弃了。

因此,我决定改用 NiceTabular,并使用两种方法的代码,我设法获得了照片中的表格。该表格位于一个单独的文件中,但当我复制代码并将其粘贴到我的论文中时,我收到“缺少 $”的错误,我注意到它与绘制边框的选项有关,例如 \Block borders={right,left}。如果我删除此选项,它会编译,但不会绘制边框;如果我想要边框,它不会编译。所以我在这里。

在此处输入图片描述

\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}

有几件事我不明白:

  • 为什么,如果我定义 {| m{1.5cm} m{3cm} m{6.25cm} m{6.25cm} m{1.5cm} m{1.5cm} |},列就不会精确地测量并改变大小。
  • 为什么最后一列与倒数第二列大小相同,但大小却不同。
  • 为什么我无法获得整个表格的精确尺寸。
  • 百分比值不能位于单元格的中心。

在另一个文件中,我使用了相同的代码,但\Block[C,fill=ud5,borders={right,left}位置正确,看起来好一点。但最后一行仍未居中对齐,最后一列仍大小不同,百分比位于顶部而不是居中。

在此处输入图片描述

因此,我决定正确地完成它,而不混合使用“tabular”和 NiceTabular,只使用 \Blocks,不使用 multiRow、multiColumn 或 makecells,以便能够将其包含在我的论文中。但这个更难控制。使用这个很难从双线的页眉和页脚中获得浮动效果。

在此处输入图片描述

\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} 

我尝试了上千种方法,但就是无法让它看起来正确。请问有人能帮我吗?我将永远感激不尽。

答案1

这是一个{NiceTabular}使用 的解决方案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} 

上述代码的输出

  • hvlines的键nicematrix绘制所有规则,除了块(由 创建\Block)中的规则。但是,仍然可以使用 添加双水平规则\Hline\Hline

  • 命令不会\Block创建nicematrix空间,除了单列和单行块。这里,主块(“RA3”)有两行和两列,因此不会创建空间。这就是为什么我手动设置了第二列的宽度(w{l}{45mm})。至于该块内容的高度,空间将由第四列(“Actividades”)中的单元格内容确保。这就是为什么我在单元格“Prueba...”的末尾添加了一行,以便为块“RA3”提供足够的空间。

相关内容