ข้อผิดพลาดเส้นขอบตารางกับ \ toprule \ midrule \ vspace [ปิด]

Jan 08 2021

ฉันมีตารางที่มีสูตรทางคณิตศาสตร์และฉันจำเป็นต้องใช้คำสั่งเพื่อเพิ่มขนาดเซลล์ อย่างไรก็ตามสิ่งนี้ขัดขวางการก่อตัวของเส้นขอบภายนอกสำหรับตาราง ฉันจะทำให้เส้นขอบไร้ที่ติบนตารางเหล่านี้ได้อย่างไร

ตารางที่ 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}

ตารางที่ 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


อัปเดต: เมื่อใช้ tabularx ฉันมีปัญหานี้ ฉันต้องการตารางที่กะทัดรัดกว่านี้ฉันไม่ต้องการหลายแถวในคอลัมน์สุดท้าย ฉันไม่สนใจว่าฉันจะต้องลดขนาดตัวอักษรหรือไม่ ฉันต้องการเอฟเฟกต์ที่คล้ายกับเมื่อใช้\resizeboxมีช่องว่างระหว่างคอลัมน์มากมาย ช่องว่างนี้สามารถลดลงเพื่อไม่ให้ข้อความของคอลัมน์สุดท้ายแตกในหลายบรรทัด

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

ฉันต้องการมีแง่มุมนี้ (เกี่ยวกับการแตกเส้นในเซลล์) อย่างไรก็ตามฉันต้องการมันด้วยเส้นขอบด้านนอก

คำตอบ

6 Zarko Jan 08 2021 at 12:25

แก้ไข:คุณไม่ได้ให้ MWE (ตัวอย่างการทำงานน้อยที่สุด) ซึ่งเป็นเอกสารขนาดเล็ก แต่สมบูรณ์ซึ่งเราสามารถทดสอบชิ้นส่วนโค้ดของคุณได้ คำถามของ Alo ไม่ค่อยชัดเจนนักดังนั้นการออกแบบโต๊ะจึงเป็นไปตามรสนิยมของฉันเป็นส่วนใหญ่ ดังนั้นโปรดแก้ไขคำถามของคุณและชี้แจงสิ่งที่เป็นปัญหาในโต๊ะของคุณ

ตอนนี้ฉันได้เพิ่มคำอธิบายว่าจะจัดการกับพื้นที่แนวตั้งรอบ ๆ เนื้อหาของเซลล์อย่างไรโดยการลบปลอม\limitsออกจากโค้ดของคุณสำหรับตารางที่สองและเพิ่ม\nolimits (which you can remove, if you liked such form of \ sum`)

  • กฎที่กำหนดไว้ในbooktabsแพ็คเกจไม่ได้มีไว้สำหรับใช้ในตารางที่มีเส้นแนวตั้ง คุณควรใช้กฎเหล่านั้นแทน\hlineหรือเมื่อคุณต้องการให้กฎตารางที่มีความหนาต่างกันhlineB{<factor>}กำหนดboldlineแพ็กเกจ (ใช้ในตารางแรก) หรือXhline{<thicknes>}กำหนดไว้ในmakecellแพ็กเกจ (ใช้ในตารางที่สอง)
  • สำหรับพื้นที่แนวตั้งเพิ่มเติมรอบ ๆ เนื้อหาของเซลล์คุณสามารถใช้แพ็คเกจcellspaceได้ ช่องว่างนี้กำหนดโดย
    \setlength\cellspacetoplimit{5pt}
    \setlength\cellspacebottomlimit{5pt}
  • หากคุณพบว่า5ptมากเกินไปคุณสามารถลดเป็นจำนวนที่ต้องการได้ (ใน MWE ลดลงเป็น 2pt)
  • \resizeboxไม่แนะนำให้ใช้ที่ตารางเนื่องจากเมื่อใช้ขนาดตัวอักษรที่ใช้ในตารางจะหายไป ที่ดีกว่าคือการใช้สภาพแวดล้อมตารางซึ่งคุณสามารถกำหนดความกว้างเช่นtabular*หรือtabularxใช้ใน MWE ทั้งสองด้านล่าง

ตารางแรก:

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

ตารางที่สอง:

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

ภาคผนวก:

  • ให้ฉันสังเกตก่อนว่าเป็นการยากมากที่จะช่วยคุณเนื่องจากคุณไม่ได้ช่วยให้เราช่วยคุณ คุณยังคงให้เฉพาะส่วนรหัสไม่ว่าฉันจะขอให้คุณหลายครั้งขยายส่วนย่อยนี้เพื่อทำเอกสารขนาดเล็กให้เสร็จสมบูรณ์ เรายังไม่ทราบอะไรเกี่ยวกับเค้าโครงเอกสารและแพ็คเกจที่คุณใช้
  • โปรดทำความคุ้นเคยกับ LaTeX มากขึ้นโดยเฉพาะกับการเขียนตาราง อาจมีข้อความแนะนำเกี่ยวกับ LaTeX (เช่นหนังสือ Dickimawหรือคำแนะนำสั้น ๆ เกี่ยวกับ LaTeX ) และเกี่ยวกับการเขียนตารางด้วย LaTeX ( wiki / ตาราง )
  • การอ่านเอกสารประกอบแพคเกจก็ช่วยได้มากเช่นกัน

เกี่ยวกับตารางจริงของคุณ:

  • เห็นได้ชัดว่าคุณไม่จำเป็นต้องให้คอลัมน์ทั้งหมดมีความกว้างเท่ากันดังนั้นคุณไม่จำเป็นต้องมีทุกXประเภท
  • คอลัมน์Xแบ่งข้อความอัตโนมัติในเซลล์ให้เป็นบรรทัดมากขึ้นดังนั้นจึงไม่จำเป็นต้องใช้\makecellภายในด้วยการทำลายข้อความด้วยตนเอง ยิ่งไปกว่านั้นการใช้งานของพวกเขาทำให้คุณมีปัญหาเนื่องจากข้อความ pf ที่คุณทำลายด้วยตนเองนั้นไม่เพียงพอส่งผลให้ข้อความล้นออกจากตาราง
  • ตัวเลขในคอลัมน์ที่สอง (ตามความชอบของฉัน) จะดีกว่าถ้าจัดชิดขวาและอยู่กึ่งกลางคอลัมน์ สิ่งนี้สามารถทำได้โดยใช้Sประเภทคอลัมน์ที่กำหนดไว้ในsiunitxแพ็คเกจ
  • การใช้siunitxแพ็คเกจจำเป็นต้องกำหนดตัวระบุคอลัมน์ใหม่ที่กำหนดในcellspaceแพ็คเกจจากค่าเริ่มต้นSอื่น ๆ ใน MWE ด้านล่างฉันเลือกOสำหรับสิ่งนี้

MWE ที่แนะนำสำหรับตารางใหม่นี้คือ:

\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

นี่คือสิ่งที่คุณสามารถทำได้ด้วยการ{NiceTabular}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}

คุณต้องมีการคอมไพล์หลายรายการ (เนื่องจากnicematrixใช้โหนด PGF / Tikz)