【问题标题】:Complex multirow/multicolumn table复杂的多行/多列表
【发布时间】:2022-01-03 17:35:10
【问题描述】:

我正在尝试创建一个复杂的表来定义很多概念,这些概念可以有自己定义的子概念。

现在,我的问题是控制表格每一列的宽度。因为定义使用了多行并且可能会变得很长,所以 LaTeX 不会像我在普通表格中所做的那样打破行。为此,我倾向于使用 p{0.X\columnwidth} 而不是 l/c/r,但它似乎在这里不起作用。

目前,此表要达到的目标是:

  • 使其以自动/半自动方式自动调整单元格内的内容(即:无需手动换行);
  • 将每个非定义单元格垂直和水平居中;
  • 使整个表格适合一个页面。

这是一个已经构建的小例子:

\documentclass{article}
\usepackage[utf8]{inputenc}

\usepackage{multirow}

\begin{document}

\begin{table}[]
\begin{tabular}{p{0.1\columnwidth}p{0.1\columnwidth}p{0.1\columnwidth}p{0.5\columnwidth}}
\hline
\multirow{11}{*}{A} & \multicolumn{3}{l}{Definition of A}                        \\ \cline{2-4} 
                    & \multirow{5}{*}{A1} & \multicolumn{2}{l}{Definition of A1} \\ \cline{3-4} 
                    &                     & A11        & Definition of A11       \\ \cline{3-4} 
                    &                     & A12        & Definition of A12       \\ \cline{3-4} 
                    &                     & A13        & Definition of A13       \\ \cline{3-4} 
                    &                     & A14        & Definition of A14       \\ \cline{2-4} 
                    & A2                  & \multicolumn{2}{l}{Definition of A2} \\ \cline{2-4} 
                    & \multirow{4}{*}{A3} & \multicolumn{2}{l}{Definition of A3} \\ \cline{3-4} 
                    &                     & A31        & Definition of A31       \\ \cline{3-4} 
                    &                     & A32        & Definition of A32       \\ \cline{3-4} 
                    &                     & A33        & Definition of A33       \\ \hline
\multirow{4}{*}{B}  & \multicolumn{3}{l}{Definition of B}                        \\ \cline{2-4} 
                    & B1                  & \multicolumn{2}{l}{Definition of B1} \\ \cline{2-4} 
                    & B2                  & \multicolumn{2}{l}{Definition of B2} \\ \cline{2-4} 
                    & B3                  & \multicolumn{2}{l}{Definition of B3} \\ \hline
\multirow{3}{*}{C}  & \multicolumn{3}{l}{Definition of C}                        \\ \cline{2-4} 
                    & C1                  & \multicolumn{2}{l}{Definition of C1} \\ \cline{2-4} 
                    & C2                  & \multicolumn{2}{l}{Definition of C1} \\ \hline
\end{tabular}
\end{table}

\end{document}

【问题讨论】:

  • 你能指定哪个 p 列不工作吗?您的表没有任何换行符,也没有 p 列。
  • @samcarter_is_at_topanswers.xyz 我正在尝试以表格形式声明。我已经相应地更新了。换行符不存在,因为我不想用不相关的文本填充帖子。任何 3-4 段的大文本都可以。
  • l 作为列说明符的\multicolumns 不会破坏文本。您需要一些 p{...} 说明符,而不是在计算宽度的地方。例如\multicolumn{2}{p{0.6\columnwidth+2\tabcolsep}}{Definition of A1 more text ....}。你需要\usepackage{calc} 才能工作。但是使用包tabulararray实际上可能更适合这种表。
  • @PietervanOostrum 我想您的评论有所帮助。你可以看看它,看看我是否正确应用它? overleaf.com/7544793191fnrzkkzqnzzw此外,如何使主要单词垂直和水平居中,因为它们在多行显示中?
  • (1) \multirows 必须有 {=} 而不是 {*} 否则它们将没有换行符。 (2) 一些长词吃了单元格的开头不会被破坏,除非你把\hspace*{0pt}放在其中。 (3) \multicolumn{3}s 必须有 4\tabcolsep 而不是 2。 (4) 为了适应页面上的表格,您可能必须使用 \small\footnotesize

标签: latex tabular multirow


【解决方案1】:

不幸的是multirow不能很好的处理这种表格,因为它没有得到LaTeX的tabular关于表格单元格高度的信息。所以你必须计算单元格占用的实际行数,这很烦人。

使用tabularray 包更容易实现这种表,它有自己的表机制实现,确实提供了这种信息。实际上,只需将\usepackage{tabular} 替换为\usepackage{tabularray} 并将tabular 环境替换为tblr,就可以使用您的大部分代码。但是,尽管\multirows 会被正确定位,但您将无法获得tabularray 的全部功能,例如条目不会水平居中。此外,tabularray 中对\multirow\multicolumn 的支持将在未来的版本中消失。所以我重写了它以使用tabularray 在这些情况下使用\SetCell 的语法。先说几点:

  • tabular 中,您可以使用0.7\textwidth+2\tabcolsep 之类的表达式来计算\multicolumn 的宽度。但是,tabularray 不使用 \tabcolsep。相反,它有 leftseprightsep 参数。这些在单元格内以\leftsep\rightsep 的形式提供,但不幸的是,它们没有在单元格外部设置,例如在宽度规范中。因此我(ab)在宽度计算中使用了\tabcolsep,并设置了colsep=\tabcolsep,它同时设置了leftseprightsep
  • tabularray 在内部将 \raggedright 用于 lp 列,但是对于标准的 LaTeX 定义,这使得断字非常困难。因此我使用了ragged2e 包来获得更好的定义。它必须包含在之前 tabularray 才能正常工作。
  • 我为\multicolumn{2}{3} 单元定义了命令\Mdois\Mtres。我包含了\justifying 命令(来自ragged2e 包)以获得完全合理的文本。如果您不希望文本被证明是合理的,您可以忽略它。
  • 我包含cells={c,m} 以使单元格默认水平和垂直居中。我还使用m{} 类型的列说明符在较大的文本列中垂直居中。
  • 我使用rowsep=1pt 使行彼此靠近。我仍然必须使用\small 才能让所有内容都适合页面。实际上表格是粘在页脚的,所以你可能需要使用更小的字体,比如\footnotesize
  • TeX 不会将段落的第一个单词连字,除非你在它前面加上 \hspace{0pt} 之类的东西。我为此制作了一个宏\HH,并将其放在“Confidencialidade”之类的大词之前。如果需要,您实际上可以将其放入列定义中。
  • 原本在\multirow\multicolumn 中的文本仍然有括号{...},尽管这不再是必需的(它们不是\SetCell\Mdois\Mtres 的参数。我认为移除它们的工作量太大,而且它们不会造成伤害。

所以这是解决方案。我把它减少到桌子所需的最低限度。

\documentclass[sigplan]{acmart}
\usepackage[portuguese]{babel}
\usepackage{calc}
\usepackage[newcommands]{ragged2e}
\usepackage{tabularray}
\UseTblrLibrary{booktabs}

\begin{document}

\begin{table*}[tbp]
\newcommand\HH{\hspace{0pt}}
\NewTableCommand{\Mdois}{\SetCell[c=2]{preto=\justifying,wd=0.7\textwidth+2\tabcolsep}}
\NewTableCommand{\Mtres}{\SetCell[c=3]{preto=\justifying,wd=0.8\textwidth+4\tabcolsep}}
\SetTblrInner{rowsep=1pt}
\small
\centering
\caption{Especificação das Métricas do CVSS}
\label{tab:metricas-cvss}
\begin{tblr}{colspec={ m{0.1\textwidth} m{0.1\textwidth} m{0.1\textwidth} Q[preto=\justifying,wd={0.6\textwidth}] },colsep=\tabcolsep,cells={c,m}}
\toprule
\SetCell[r=11]{c}{\textbf{Métricas de Base}}   & \Mtres {Todas as métricas que servem de base para o cálculo da vulnerabilidade, de forma preliminar.}                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       \\ \cline{2-4} 
                                     & \SetCell[r=5]{c}{\textbf{Métricas de Explorabilidade}} & \Mdois {As métricas de explorabilidade refletem valores relativos ao componente afetado, bem como propriedades de uma vulnerabilidade que leve a cabo um ataque bem-sucedido.}                                &                                                                                                                                                                                                                                      \\ \cline{3-4} 
                                     &                                              & \SetCell[r=1]{c,m}\textbf{Vetor de Ataque (AV)}         & \SetCell[r=1]{c,m}
Contexto pela qual a exploração da vulnerabilidade é possível - o valor será tanto maior quanto mais um atacante conseguir atingir (lógica e fisicamente) para explorar o componente vulnerável.                                                                                                                                                                                                                                \\ \cline{3-4} 
                                     &                                              & \HH\textbf{Complexidade do Ataque (AC)}  & Condições para além do controlo do atacante que devem existir para explorar a vulnerabilidade.                                                                                                                                                                                                                                                                                                                                  \\ \cline{3-4} 
                                     &                                              & \textbf{Privilégios Necessários (PR)} & Nível de privilégios que um atacante deve possuir antes de explorar a vulnerabilidade com sucesso – quantos menos privilégios forem necessários, mais alta será a pontuação.                                                                                                                                                                                                                                                    \\ \cline{3-4} 
                                     &                                              & \textbf{Interação do Utilizador (UI)} & Captura a necessidade de um utilizador humano, diferente do atacante, participar no comprometimento bem-sucedido do componente vulnerável                                                                                                                                                                                                                                                                                       \\ \cline{2-4} 
                                     & \textbf{Contexto (S)}                                 & \Mdois {Captura se uma vulnerabilidade num componente vulnerável afeta os recursos noutros componentes para além do seu contexto de segurança.}                                                                                                                                                                                                                                                                                                     \\ \cline{2-4} 
                                     & \SetCell[r=4]{c}{\textbf{Métricas de Impacto}}         & \Mdois {Capturam os efeitos de uma vulnerabilidade explorada com sucesso no componente que sofre o pior resultado que está mais direta e previsivelmente associado ao ataque.}                                                                                                                                                                                                                                                                      \\ \cline{3-4} 
                                     &                                              & \HH\textbf{Confidencialidade (C)}        & Mede o impacto sobre a confidencialidade dos recursos de informação geridos por um componente de software graças a uma vulnerabilidade explorada com sucesso – a classificação é maior quando a perda para o componente afetado é maior.                                                                                                                                                                                        \\ \cline{3-4} 
                                     &                                              & \textbf{Integridade (I)}              & Mede o impacto na integridade de uma vulnerabilidade explorada com sucesso – a classificação é maior quando a consequência para o componente afetado é maior.                                                                                                                                                                                                                                                                   \\ \cline{3-4} 
                                     &                                              & \HH\textbf{Disponibilidade (A)}          & Mede o impacto na disponibilidade do componente afetado resultante de uma vulnerabilidade explorada com sucesso. Como a disponibilidade se refere à acessibilidade dos recursos de informação, os ataques que consomem largura de banda da rede, ciclos do processador ou espaço em disco impactam a disponibilidade do componente afetado – a classificação é maior quando a consequência para o componente impactado é maior. \\ \hline
\SetCell[r=4]{c}{\textbf{Métricas Temporais}}  & \Mtres {As métricas temporais medem o estado atual das técnicas de exploração ou disponibilidade de código, a existência de \textit{patches} ou uma solução de recurso (comumente designado em inglês por \textit{workaround}), ou a certeza da descrição da vulnerabilidade}                                                                                                                                                                                                                                        \\ \cline{2-4} 
                                     & \textbf{Exploração da Maturidade do Código (E)}       & \Mdois {Mede a probabilidade de a vulnerabilidade ser atacada e é normalmente baseada no estado atual das técnicas de exploração, disponibilidade de código de exploração ou exploração ativa \textit{in-the-wild}.}                                                                                                                                                                                                                                         \\ \cline{2-4} 
                                     & \textbf{Nível de Remediação (RL)}                     & \Mdois {É um fator importante para a priorização - quanto menos oficial EXPLICAR O QUE É OFICIAL?! e permanente for uma correção, maior será a pontuação de uma vulnerabilidade.}                                                                                                                                                                                                                                                                   \\ \cline{2-4} 
                                     & \textbf{Confiança no Reporte (RC)}                    & \Mdois {Mede o grau de confiança na existência da vulnerabilidade e na credibilidade dos detalhes técnicos conhecidos - quanto mais uma vulnerabilidade é validada pelo fornecedor ou outras fontes confiáveis, maior será a pontuação.}                                                                                                                                                                                                            \\ \hline
\SetCell[r=3]{c}{\textbf{Métricas Ambientais}} & \Mtres {As métricas ambientais permitem a personalização da pontuação do CVSS, dependendo da importância do ativo de TI afetado para a organização de um utilizador, medida em termos de controlos de segurança complementares e/ou alternativos implementados, confidencialidade, integridade e disponibilidade.}                                                                                                                                                                                 \\ \cline{2-4}
                                     & \textbf{Requisitos de Segurança (CR, IR, AR)}         & \Mdois {Permitem que o analista personalize a pontuação CVSS, dependendo da importância do ativo de TI afetado para a organização de um utilizador, medida em termos de confidencialidade, integridade ou disponibilidade - cada requisito de segurança tem três valores possíveis: Baixo, Médio ou Alto.}                                                                                                                                          \\ \cline{2-4}
                                     & \textbf{Métricas de Base Modificadas}                 & \Mdois {Permitem que o analista substitua as métricas básicas individuais com base em características específicas do ambiente de um utilizador; delas fazem parte a Modified Attack Vector (MAV), Modified Attack Complexity (MAC), Modified Privileges Required (MPR), Modified User Interaction (MUI), Modified Scope (MS), Modified Confidentiality (MC), Modified Integrity (MI) ou Modified Availability (MA).}                                \\
\bottomrule
\end{tblr}
\end{table*}

\end{document}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-20
    • 2019-07-07
    • 1970-01-01
    • 2017-06-08
    • 2014-12-28
    相关资源
    最近更新 更多