Erro de borda de tabela com \ toprule \ midrule \ vspace [fechado]

Jan 08 2021

Tenho uma tabela com fórmulas matemáticas e precisei usar comandos para aumentar as dimensões das células. No entanto, isso dificulta a formação de uma borda externa para as mesas. Como posso obter bordas perfeitas nessas tabelas?

TABELA 1

\begin{table}[h!]
    \centering
    \rowcolors{2}{white}{gray!20}   
    \resizebox{\textwidth}{!}{
        \begin{tabular}{|cccc|}
            \toprule
            \rowcolor{white}
            \textbf{AAAA} & \makecell{ \textbf{BBB} \\ \textbf{BBBB}} & \makecell{\textbf{CCCC} \\ \textbf{CCCCCC}} & \textbf{DDDDD} \\
            \midrule 
            AAAAAAAAA & 324 & 1400 or 2100 & AAAAAAA \\
            BBBBBBB & 324 & 1400 or 2100 & BBBBBBB \\
            \makecell{CCCCC \\ CCCCCC} & 380 & 1400 ou 2100 & \makecell{DDDDDDDDDD}   \\
            \midrule
        \end{tabular}
    }
\end{table}

MESA 2

\bgroup
\def\arraystretch{2.7}%
\begin{table}[!h]
    \centering
    \caption{Har}
    \rowcolors{2}{white}{gray!20}   
    \resizebox{\textwidth}{!}{%
         \begin{tabular}{|ll|}
            %\toprule 
            \hline
            \multicolumn{1}{|l}{\textbf{BBBBBBBBBB}} & 
            \multicolumn{1}{l|}{\textbf{AAAAAAAAAA}} \\ 
            \toprule
            
            AAAAAAA
            & $ f_1 = \sum_{i}\sum_{j} \left\{p(i,j)\right\}^2 $ \\
            
            AAAAAAAA
            & \vspace{.5ex}\makecell[|l]{$f_2 = \sum\limits_{n=0}^{N_g - 1} n^2 \left\{ \sum\limits_{i=1}^{N_g}\sum\limits_{j=1}^{N_g}p(i,j)\right\}$, where 
            $n = |i-j| $.}\\
            
            AAAAAAAA
            
            &   \makecell[l]{$f_3 = \dfrac{\sum_{i}\sum_{j}(ij)p(i,j)-\mu_{x}\mu_{y}}{\sigma_{x}\sigma_{y}} $, where $\mu_{x}$, $\mu_{y}$, $\sigma_{x}$ \\ $\sigma_{y}$.}\\
            
            
            AAAAAAAA
            &  $f_4 = \sum_{i}\sum_{j}(i-\mu)^2 p(i,j)$\\
            
            AAAAAAAA
            & \vspace{.5ex} $f_5 = \sum_{i}\sum_{j}\dfrac{p(i,j)}{1+(i-j)^2}$\\
            
            AAAAAAAAA
            &  $f_6 = \sum\limits_{i=2}^{2N_g}ip_{x+y}(i)$\\
            
            AAAAAAAAA
            & \vspace{.5ex} $f_7 = \sum\limits_{i=2}^{2N_g}(i-f_8)^2 p_{x+y}(i)$\\
            
            AAAAAAAAA
            & \vspace{.5ex} $f_8 = -\sum\limits_{i=2}^{2N_g}p_{x+y}(i)log\left\{p_{x+y}(i)\right\}$ \\
            
            AAAAAAAAA
            &  $f_9 = -\sum_{i}\sum_{j}p(i,j)log\left\{p(i,j)\right\}$\\
            
            AAAAAAAAA
            & \vspace{.5ex} $f_{10} = - \sum\limits_{i=0}^{N_g-1}(i-f_{11})^2 p_{x-y}(i)$ \\
            
            AAAAAAAAA
            & \vspace{.5ex} $f_{11} = -\sum\limits_{i=0}^{N_g-1}p_{x-y}(i)log\left\{p_{x-y}(i)\right\}$\\
            

            AAAAAAAAA
            &  \makecell[l]{$f_{14} = \sqrt{\text{...}}$\\ 
            $Q(i,j)=\sum_{k}\dfrac{p(i,k)p(j,k)}{p_x(i)p_y(k)}$}\\
                    
            \midrule

        \end{tabular} 
    }
\end{table}
\egroup


ATUALIZAÇÃO: Usando tabularx, estou tendo esse problema. Preciso de uma tabela mais compacta, não quero muitas linhas na última coluna. Não me importo se preciso diminuir o tamanho da fonte. Preciso de um efeito semelhante ao de quando uso \resizeboxHá muito espaço entre as colunas. Este espaço pode ser reduzido para não quebrar o texto da última coluna em tantas linhas.

    \usepackage[table]{xcolor}
    \usepackage{boldline, cellspace, makecell, tabularx}
    \setlength\cellspacetoplimit{5pt}
    \setlength\cellspacebottomlimit{5pt}
    \newcolumntype{C}{>{\centering\arraybackslash}X}
    \addparagraphcolumntypes{C}
    
           
\begin{table}[h!]
    \centering
    \caption{Características dos conjuntos de dados formados.}
    \label{quadro:conjuntosdados}
    \rowcolors{2}{white}{gray!20}   

\begin{tabularx}{\linewidth}{|*{4}{SC}|}
    \hlineB{2}      
    \rowcolor{white}
    \textbf{Método} & \makecell{ \textbf{N. de} \\ \textbf{variáveis}} & \makecell{\textbf{N. de} \\ \textbf{amostras}} & \textbf{Descrição} \\
    \hlineB{2}      
    
    Valores dos pixels s/ equalização & 324 & 1400 ou 2100 & Nível de intensidade de cada pixel \\
    Valores dos pixels c/ equalização & 324 & 1400 ou 2100 & Nível de intensidade de cada pixel \\
    Segmentação & 324 & 1400 ou 2100 & Estado do pixel (0 ou 1) \\
    Segmentação (maior região) & 324 & 1400 ou 2100 & Estado do pixel (0 ou 1) \\
    Máscara elíptica & 126 & 1400 ou 2100 & Nível de intensidade de cada pixel \\
    Histograma & 64 & 1400 ou 2100 & Quant. de pixels em cada nível de cinza\\
    Haralick & 56 & 1400 ou 2100 &  Valores dos descritores de textura \\
    Haralick reduzido & 14 & 1400 ou 2100 & Valores dos descritores de textura \\
    Haralick duplo & 112 & 1400 ou 2100 & Valores dos descritores de textura \\
    \makecell{Haralick e valores dos pixels \\com equalização} & 380 & 1400 ou 2100 & \makecell{Valores dos descritores de textura \\e nível de intensidade de cada pixel}   \\
    \hlineB{2}      
\end{tabularx}
\end{table}

Eu gostaria de ter esse aspecto (em relação à quebra de linhas nas células). No entanto, preciso disso com as linhas das bordas externas.

Respostas

6 Zarko Jan 08 2021 at 12:25

Edit: você não fornece MWE (Minimal Working Example), um documento pequeno, mas completo, com o qual podemos testar seus fragmentos de código. A pergunta não é muito clara, então o design da mesa é principalmente do meu gosto. Então, por favor, edite sua pergunta e esclareça o que são todos os problemas em suas mesas.

Agora eu adicionei a explicação de como é tratado o espaço vertical em torno do conteúdo das células, remova o espúrio \limitsdeixado de seu código para a segunda tabela e adicione \nolimits (which you can remove, if you liked such form of \ sum`)

  • As regras definidas no booktabspacote não se destinam ao uso em tabelas com linhas verticais. Em vez disso, você deve usar essas regras \hlineou quando quiser ter regras de tabela com espessuras diferentes hlineB{<factor>}definidas nos boldlinepacotes (usadas na primeira tabela) ou Xhline{<thicknes>}definidas no makecellpacote (usadas na segunda tabela).
  • Para obter mais espaço vertical em torno do conteúdo das células, você pode usar o pacote cellspace. Este espaço é definido por
    \setlength\cellspacetoplimit{5pt}
    \setlength\cellspacebottomlimit{5pt}
  • Se você achar que 5pté muito, você pode reduzi-lo para a quantidade desejada (em MWE agora é reduzido para 2pt)
  • O uso de \resizeboxem tabelas não é recomendado porque com ele o tamanho da fonte usado na tabela é perdido. Melhor é usar o ambiente de mesa, embora você possa prescrever largura, por exemplo, tabular*ou tabularxconforme usado em ambos os MWEs abaixo.

A primeira mesa:

\documentclass[a4paper]{article}
\usepackage{amsmath}
\usepackage[table]{xcolor}
\usepackage{boldline, cellspace, makecell, tabularx}
    \setlength\cellspacetoplimit{5pt}
    \setlength\cellspacebottomlimit{5pt}
    \newcolumntype{C}{>{\centering\arraybackslash}X}
    \addparagraphcolumntypes{C}

\begin{document}
    \begin{table}[ht]
    \centering
    \rowcolors{2}{white}{gray!20}
\begin{tabularx}{\linewidth}{|*{4}{SC}|}
    \hlineB{2}        
\textbf{AAAA}
        &   \makecell{\textbf{BBB} \\ \textbf{BBBB}}
            &   \makecell{\textbf{CCCC} \\ \textbf{CCCCCC}}
                &   \textbf{DDDDD}              \\
    \hlineB{1.5}
AAAAAAAAA   & 324 & 1400 or 2100 & AAAAAAA      \\
BBBBBBB     & 324 & 1400 or 2100 & BBBBBBB      \\
\makecell{CCCCC \\ CCCCCC} 
            & 380 & 1400 or 2100 & DDDDDDDDDD   \\
    \hlineB{2}
\end{tabularx}
    \end{table}
\end{document}

A segunda mesa:

\documentclass[a4paper]{article}
\usepackage{amsmath}
\usepackage[table]{xcolor}
\usepackage{cellspace, makecell, tabularx}
    \setlength\cellspacetoplimit{2pt}
    \setlength\cellspacebottomlimit{2pt}
    \newcolumntype{L}{>{\raggedright\arraybackslash}X}
    \addparagraphcolumntypes{L}

\begin{document}
    \begin{table}[ht]
    \centering
    \rowcolors{2}{white}{gray!20}
\begin{tabularx}{\linewidth}{|Sl >{$\displaystyle}SL<{$}|}
        \Xhline{1.2pt}
\textbf{BBBBBBBB}   
        &   \textbf{AAAAAAAAAA}     \\
        \Xhline{0.8pt}
AAAAAAA & f_1 = \sum\nolimits_{i}\sum\nolimits_{j} \{p(i,j)\}^2         \\

AAAAAA  & f_2 = \sum_{n=0}^{N_g - 1} n^2
                \left\{\sum_{i=1}^{N_g}\sum\limits_{j=1}^{N_g}p(i,j)\right\},
                \text{ where }
                n = |i-j|.                                              \\
AAAAAA  & f_3 = \frac{\sum_{i}\sum_{j}(ij)p(i,j)-\mu_{x}\mu_{y}}{\sigma_{x}\sigma_{y}},
                \text{ where }
                \mu_{x}, \mu_{y}, \sigma_{x}, \sigma_{y} ?              \\
AAAAAA  & f_4 = \sum_{i}\sum_{j}(i-\mu)^2 p(i,j)                        \\
AAAAAA  & f_5 = \sum\nolimits_{i}\sum\nolimits_{j}\frac{p(i,j)}{1+(i-j)^2}        \\
AAAAAA  & f_6 = \sum_{i=2}^{2N_g}ip_{x+y}(i)                            \\
AAAAAA  & f_7 = \sum_{i=2}^{2N_g}(i-f_8)^2 p_{x+y}(i)                   \\
AAAAAA  & f_8 = -\sum_{i=2}^{2N_g}p_{x+y}(i)\log\{p_{x+y}(i)\}          \\
AAAAAA  & f_9 = -\sum\nolimits_{i}\sum\nolimits_{j}p(i,j)\log\{p(i,j)\} \\
AAAAAA  & f_{10} = - \sum_{i=0}^{N_g-1}(i-f_{11})^2 p_{x-y}(i)          \\
AAAAAA  & f_{11} = - \sum_{i=0}^{N_g-1}p_{x-y}(i)\log\{p_{x-y}(i)\}     \\
AAAAAA  &   \begin{aligned} f_{14} & = \sqrt{\text{...}} \\ Q(i,j) & =\sum_{k}\frac{p(i,k)p(j,k)}{p_x(i)p_y(k)} \end{aligned}                                               \\
    \Xhline{1.2pt}
\end{tabularx}
    \end{table}
\end{document}

Termo aditivo:

  • Deixe-me observar primeiro que é muito difícil ajudá-lo, já que você não nos ajuda a ajudá-lo. Você ainda fornece apenas fragmentos de código, apesar de eu pedir muitas vezes que estenda esses fragmentos para completar pequenos documentos. Ainda não sabemos nada sobre o layout do seu documento e pacotes usados.
  • Familiarize-se mais com o LaTeX, especificamente com a escrita de tabelas. Pode haver um texto introdutório sobre LaTeX (por exemplo, livros Dickimaw ou Não tão curta introdução ao LaTeX ) e sobre como escrever tabelas com LaTeX ( wiki / tabelas ).
  • Ler a documentação do pacote também é de grande ajuda.

Em relação à sua mesa real:

  • Agora é, aparentemente, que você não precisa que todas as colunas tenham largura igual, então você não precisa ter todos do Xtipo.
  • As colunas Xquebram automaticamente o texto nas células em mais linhas, portanto, não há necessidade de usar o \makecelltexto interno para quebrar manualmente. Ainda mais, seu uso causa seus problemas porque quebrar manualmente o texto pf não é adequado - conseqüentemente, o texto sai da tabela.
  • Os números na segunda coluna são (para meu gosto) mais agradáveis ​​se estiverem alinhados à direita e centralizados na coluna. Isso pode ser feito pelo uso do Stipo de coluna definido no siunitxpacote.
  • Usando siunitxpackage require para redefinir o especificador de colunas definido no cellspacepackage do padrão para Salgum outro. No MWE abaixo eu seleciono Opara isso.

O MWE sugerido para esta nova tabela é:

\documentclass[a4paper]{article}
\usepackage[spanish]{babel}
\usepackage{amsmath}
\usepackage[table]{xcolor}
\usepackage[column=O]{cellspace}
    \setlength\cellspacetoplimit{2pt}
    \setlength\cellspacebottomlimit{2pt}
\usepackage{makecell, tabularx}
    \renewcommand\theadfont{\bfseries}
    \renewcommand\theadgape{}
    \newcolumntype{L}[1]{>{\raggedright\arraybackslash\hsize=#1\hsize}X}
    \addparagraphcolumntypes{L}
\usepackage{siunitx}

\begin{document}
    \begin{table}[ht]
    \centering
\caption{Características dos conjuntos de dados formados.}
\label{quadro:conjuntosdados}
    \renewcommand\tabularxcolumn[1]{m{#1}}
    \rowcolors{2}{white}{gray!20}
\begin{tabularx}{\linewidth}{|O{L{0.8}} 
                              S[table-format=3.0]
                              c 
                              O{L{1.2}}|}
    \Xhline{1.2pt}
    \rowcolor{white}
\thead{Método} 
    &   {\thead{N. de\\ variáveis}} 
            &   \thead{N. de\\ amostras}  
                    &   \thead{Descrição}           \\
    \Xhline{0.8pt}
Valores dos pixels s/ equalização 
    & 324   & 1400 ou 2100  & Nível de intensidade de cada pixel    \\
Valores dos pixels c/ equalização 
    & 324   & 1400 ou 2100  & Nível de intensidade de cada pixel    \\
Segmentação 
    & 324   & 1400 ou 2100  & Estado do pixel (0 ou 1)              \\
Segmentação (maior região) 
    & 324   & 1400 ou 2100  & Estado do pixel (0 ou 1)              \\
Máscara elíptica 
    & 126   & 1400 ou 2100  & Nível de intensidade de cada pixel    \\
Histograma 
    & 64    & 1400 ou 2100  & Quant. de pixels em cada nível de cinza   \\
Haralick 
    & 56    & 1400 ou 2100  &  Valores dos descritores de textura       \\
Haralick reduzido 
    & 14    & 1400 ou 2100  & Valores dos descritores de textura        \\
Haralick duplo 
    & 112   & 1400 ou 2100  & Valores dos descritores de textura    \\
Haralick e valores dos pixels com equalização
    & 380   & 1400 ou 2100  & Valores dos descritores de textura e nível de intensidade de cada pixel   \\
    \Xhline{1.2pt}
\end{tabularx}
    \end{table}
\end{document}

4 F.Pantigny Jan 08 2021 at 17:42

Aqui está o que você pode fazer com {NiceTabular}de nicematrix.

\documentclass{article}
\usepackage{xcolor}
\usepackage{booktabs}
\usepackage{nicematrix}

\begin{document}


\begin{table}[h!]
\centering
\begin{NiceTabular}{|cccc|}[code-before=\rowcolors{2}{}{gray!20}]
    \toprule
    \textbf{AAAA} & \Block{}{ \textbf{BBB} \\ \textbf{BBBB}} & \Block{}{\textbf{CCCC} \\ \textbf{CCCCCC}} & \textbf{DDDDD} \\
    \midrule 
    AAAAAAAAA & 324 & 1400 or 2100 & AAAAAAA \\
    BBBBBBB & 324 & 1400 or 2100 & BBBBBBB \\
    \Block{}{CCCCC \\ CCCCCC} & 380 & 1400 ou 2100 & DDDDDDDDDD   \\
    \midrule
\end{NiceTabular}
\end{table}





\begin{table}[!ht]
\centering
\caption{Har}
 \begin{NiceTabular}{|ll|}[code-before = \rowcolors{2}{}{gray!20},cell-space-top-limit=1ex,cell-space-bottom-limit=1ex]
%\toprule 
\hline
\Block[l]{}{\textbf{BBBBBBBBBB}} & 
\Block[l]{}{\textbf{AAAAAAAAAA}} \\ 
\toprule
AAAAAAA
& $ f_1 = \sum_{i}\sum_{j} \left\{p(i,j)\right\}^2 $ \\
AAAAAAAA
&\Block[l]{}{$f_2 = \sum\limits_{n=0}^{N_g - 1} n^2 \left\{ \sum\limits_{i=1}^{N_g}\sum\limits_{j=1}^{N_g}p(i,j)\right\}$, where 
$n = |i-j| $.}\\
AAAAAAAA
&   \Block[l]{}{$f_3 = \dfrac{\sum_{i}\sum_{j}(ij)p(i,j)-\mu_{x}\mu_{y}}{\sigma_{x}\sigma_{y}} $, \\
               where $\mu_{x}$, $\mu_{y}$, $\sigma_{x}$ and $\sigma_{y}$ are...}\\
AAAAAAAA
&  $f_4 = \sum_{i}\sum_{j}(i-\mu)^2 p(i,j)$\\
AAAAAAAA
& $f_5 = \sum_{i}\sum_{j}\dfrac{p(i,j)}{1+(i-j)^2}$\\
AAAAAAAAA
&  $f_6 = \sum\limits_{i=2}^{2N_g}ip_{x+y}(i)$\\
AAAAAAAAA
& $f_7 = \sum\limits_{i=2}^{2N_g}(i-f_8)^2 p_{x+y}(i)$\\
AAAAAAAAA
& $f_8 = -\sum\limits_{i=2}^{2N_g}p_{x+y}(i)\log\left\{p_{x+y}(i)\right\}$ \\
AAAAAAAAA
&  $f_9 = -\sum_{i}\sum_{j}p(i,j)\log\left\{p(i,j)\right\}$\\
AAAAAAAAA
& $f_{10} = - \sum\limits_{i=0}^{N_g-1}(i-f_{11})^2 p_{x-y}(i)$ \\
AAAAAAAAA
& $f_{11} = -\sum\limits_{i=0}^{N_g-1}p_{x-y}(i)\log\left\{p_{x-y}(i)\right\}$\\
AAAAAAAAA
&  \Block[l]{}{$f_{14} = \sqrt{\text{...}}$\\ 
$Q(i,j)=\sum_{k}\dfrac{p(i,k)p(j,k)}{p_x(i)p_y(k)}$}\\
\midrule
\end{NiceTabular} 
\end{table}

\end{document}

Você precisa de várias compilações (porque nicematrixusa nós PGF / Tikz).