如何在表格中添加一行但没有垂直线

如何在表格中添加一行但没有垂直线

我想知道如何添加一行(在本例中为最后一行),而不从表格的 {|c|c...} 添加更多垂直线,以便线条不会像本例中那样超出我的底线。

\resizebox{\textwidth}{!}{% Resize table to fit within \linewidth horizontally
    \begin{tabular}{|c|ccccccccccccc|}
        \toprule
        Feature & $G_1$ & $G_2$ & $G_3$ & ... & $G_{c-1}$ & $G_c$ & & $G_1^M$ & $G_2^M$ & $G_3^M$ & ... & $G_{c-1}^M$ & $G_c^M$\\
        \midrule
        $\varphi_1$ & .4 & .3 & .61 & ...& $\infty$ & .1 & & $\infty$ & .12 & NaN & ... & .83 & NaN\\ [-1.5ex]
        \specialrule{1.8pt}{1pt}{1pt} \\ [-1.5ex]
        $\varphi_2$  & 1 & 9.5 & 49 & ... & 6.5 & 21 & & 16 & 34.5 & 44 & ... & 210 & 32\\
        $\varphi_3$ & 10 & 10.01 & 10 & ... & 10 & 9.99 & & 10.01 & 9.98 & 10 & ... & 10.1 & 10.04\\ [-1.5ex]
        \specialrule{1.8pt}{1pt}{1pt} \\ [-1.5ex]
        $\varphi_4$ & 2 & 19 & 98 & ... & 13 & 42 & & 32 & 69 & 88 & ... & 420 & 64\\ [-1.5ex]
        \specialrule{1.8pt}{1pt}{1pt} \\ [-1.5ex]
        \bottomrule
    \end{tabular}}

解释乳胶代码

如果没有最后一个 \specialrule,它就可以正常工作

\resizebox{\textwidth}{!}{
    \begin{tabular}{|c|ccccccccccccc|}
        \toprule
        Feature & $G_1$ & $G_2$ & $G_3$ & ... & $G_{c-1}$ & $G_c$ & & $G_1^M$ & $G_2^M$ & $G_3^M$ & ... & $G_{c-1}^M$ & $G_c^M$\\
        \midrule
        $\varphi_1$ & .4 & .3 & .61 & ...& $\infty$ & .1 & & $\infty$ & .12 & NaN & ... & .83 & NaN\\ [-1.5ex]
        \specialrule{1.8pt}{1pt}{1pt} \\ [-1.5ex]
        $\varphi_2$  & 1 & 9.5 & 49 & ... & 6.5 & 21 & & 16 & 34.5 & 44 & ... & 210 & 32\\
        $\varphi_3$ & 10 & 10.01 & 10 & ... & 10 & 9.99 & & 10.01 & 9.98 & 10 & ... & 10.1 & 10.04\\ [-1.5ex]
        \specialrule{1.8pt}{1pt}{1pt} \\ [-1.5ex]
        $\varphi_4$ & 2 & 19 & 98 & ... & 13 & 42 & & 32 & 69 & 88 & ... & 420 & 64\\
        \bottomrule
    \end{tabular}}

在此处输入图片描述

我希望你能帮助我,并提前致谢。

答案1

好的,让我们尝试改进这个表格。首先,引用booktabs手动的

  1. 永远不要使用垂直规则。
  2. 切勿使用双重规则。

(只有第一条规则适用于您的情况)。只需删除垂直线即可改善您的表格并使后续步骤更容易。


接下来,\resizebox:像这样调整文本块(如表格)的大小通常不是一个好主意。这会导致各种不一致。如果您的表格不适合,您需要更改表格,而不仅仅是缩放它。如果您的表格非常大,也许最好将其单独放在横向页面上。如果它只是非常宽,也许将其分成两部分可能是合理的(这取决于内容)。如果行的宽度由一个非常大的单元格决定,也许您可​​以只更改该单元格(例如,在您的表格中缩写“Feature”)。

作为最后的手段,通常可以让表格中的文本为\small(但不能小于该值!)或稍微将的值减小\tabcolsep为较小的值(默认值为12pt)。


每当你排版数字时(不仅仅是在表格中),我建议使用siunitx包。表格中最突出的特点是所有小数点都将对齐。我建议查看手册以了解其功能。


最好@tabular列设置中使用说明符在列之间添加额外的空间或符号,而不是在每一行中明确输入额外的列。这还可以让你更好地控制所添加空间的实际尺寸。


最后,你永远不应该...用 LaTeX 打字,这就是它\dots的用途。由于 的间距\dots默认有点宽,你可能希望加载ellipsis包进行调整。


好的,根据所有这些调整表格后,即使使用,它仍然宽了 70 pt \small(即仅使用\documentclass{article},根据页面大小和边距可能会有所不同)。我们可以通过设置来使其适合\tabcolsep=3.5pt。仅查看这个孤立的表格,我会说没问题。但是,您应该考虑在整个文档的上下文中情况是否并非如此。

NaN用宏替换了你的\nan。这样可以更轻松地更改用于表示此内容的符号。通常,我更喜欢--或不同于其他相当笨拙的符号NaN,但这可能只是个人喜好。(此外,它实际上不适用于删除线行。)

最后,我用基于 TikZ 的解决方案替换了您删除表格行的相当老套的方法。这应该会更加灵活,并且不会以任何方式干扰行距。就我个人而言,我不明白您为什么要删除行(我认为在我能想到\varphi_2的所有情况下,在表格标题/文档文本中提到所有值都被丢弃会更好),但就是这样。如果您真的希望线条变粗,您可以取消注释相关行,但我认为删除线比删除线更粗是不可取的,\midrule而且阅读粗线后面的文本会变得非常困难。

\documentclass{article}

\usepackage{booktabs}
\usepackage{siunitx}
\usepackage{ellipsis}
\def\ellipsisgap{.1ex}
\usepackage{tikz}

\makeatletter
    \tikzset{
        strike through node/.style={
            shape=rectangle,
            inner sep=0pt,
            outer sep=0pt,
        },
        strike through line/.style={
%           thick,
        }
    }
    \def\switch@current@strikethroughpoint@toA{%
        \gdef\current@strikethroughpoint{strike through point A}%
        \global\let\switch@current@strikethroughpoint\switch@current@strikethroughpoint@toB
    }
    \def\switch@current@strikethroughpoint@toB{%
        \gdef\current@strikethroughpoint{strike through point B}%
        \global\let\switch@current@strikethroughpoint\switch@current@strikethroughpoint@toA
    }
    \switch@current@strikethroughpoint@toB
    \newif\ifexecute@strikethrough
    \def\strikethroughpoint{%
        \switch@current@strikethroughpoint
        \tikz [remember picture, baseline=(\[email protected])] \node [strike through node] (\current@strikethroughpoint) {\vphantom{0}};%
        \ifexecute@strikethrough
            \tikz [remember picture, overlay] \draw [strike through line] (strike through point A.west) -- (strike through point B.east);
            \global\execute@strikethroughfalse
        \fi
    }
    \def\strikethisrow{\global\execute@strikethroughtrue}
\makeatother

\newcommand*\nan{{NaN}}
%\newcommand*\nan{{--}}

\begin{document}\makeatletter

\begin{table}
    \centering
    \small
    \tabcolsep=3.5pt
    \begin{tabular}{>{\strikethroughpoint}c S[table-format=2.1] *{2}{S[table-format=2.2]} @{\hspace{2\tabcolsep}\dots\hspace{2\tabcolsep}} S[table-format=2.1] S[table-format=2.2] @{\hspace{4\tabcolsep}} *{2}{S[table-format=2.2]} S[table-format=2.0] @{\hspace{2\tabcolsep}\dots\hspace{2\tabcolsep}} S[table-format=3.2] S[table-format=2.2]<{\strikethroughpoint}}\toprule
        feat.   &   {$G_1$} &   {$G_2$} &   {$G_3$} &   {$G_{c-1}$} &   {$G_c$} &   {$G_1^M$}   &   {$G_2^M$}   &   {$G_3^M$}   &   {$G_{c-1}^M$}   &   {$G_c^M$}   \\\midrule
        \strikethisrow
        $\varphi_1$ &   .4  &   .3  &   .61 &   $\infty$    &   .1  &   $\infty$    &   .12 &   \nan    &   .83 &   \nan    \\
        $\varphi_2$ &   1   &   9.5 &   49  &   6.5 &   21  &   16  &   34.5    &   44  &   210 &   32  \\
        \strikethisrow
        $\varphi_3$ &   10  &   10.01   &   10  &   10  &   9.99    &   10.01   &   9.98    &   10  &   10.1    &   10.04   \\
        \strikethisrow
        $\varphi_4$ &   2   &   19  &   98  &   13  &   42  &   32  &   69  &   88  &   420 &   64  \\\bottomrule
    \end{tabular}
\end{table}

\end{document}

MWE 输出

相关内容