我想知道如何添加一行(在本例中为最后一行),而不从表格的 {|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
手动的
- 永远不要使用垂直规则。
- 切勿使用双重规则。
(只有第一条规则适用于您的情况)。只需删除垂直线即可改善您的表格并使后续步骤更容易。
接下来,\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}