如何在表格中垂直居中文本

如何在表格中垂直居中文本

这是我的代码。我想让网格和线性文本不接触顶线。但我做不到。

\begin{table*}[t]
\centering
\fontsize{15}{15}\selectfont
\caption{table}
\label{tab:table1}
\resizebox{17cm}{!}{
\begin{tabular}{|*{17}{c|}}
\cline{1-17}
%\cline{1-1} \cline{9-10}
\multicolumn{7}{|c|}{} & \multicolumn{5}{|c|} {Grid}   & \multicolumn{5}{|c|}{Linear} \\[2ex]
\hline
 N & Pmd & Pfa & N.Pmd & N.Pfa & 2N.Pmd & 2N.Pfa &  N\textsubscript{gd}(N\textsubscript{gd}>2N.Pmd) & N\textsubscript{gd}(N\textsubscript{gd}>2N.Pfa) & h\textsubscript{gd1} & h\textsubscript{gd2} & h\textsubscript{opt\_gd} & N\textsubscript{ln}(N\textsubscript{ln}>2N.Pmd) & N\textsubscript{ln}(N\textsubscript{ln}>2N.Pfa) & h\textsubscript{ln1} & h\textsubscript{ln2} & h\textsubscript{opt\_lm} \\ [1ex] 
\hline
10 & 0.05 & 0.10 & 0.5   & 1 & 1   & 2  & 5 & 5 & 1 & 1 & 1 & 3 & 3 & 1 & 1 & 1\\[1ex]
\hline
50 & 0.05 & 0.10 & 2.5   & 5 & 5   & 10 & 13 & 13 & 2 & 2 & 2 & 11 & 11 & 5 & 5 & 5\\[1ex]
\hline
\end{tabular}
}
\end{table*}

答案1

\arraystretch您可以使用(这将全局更改)命令或具有所需高度但具有宽度的垂直规则来增加行高0pt。在这里,我\Strut为此目的定义了一个命令并在 中使用\multicolumn

在此处输入图片描述

\begin{table*}[t]
\centering
\fontsize{15}{15}\selectfont
\caption{table}
\label{tab:table1}
\renewcommand\arraystretch{1.5}
\newcommand\Strut[1]{\vrule height #1 width 0pt depth 0pt}
\resizebox{14cm}{!}{\begin{tabular}{|*{17}{c|}}
\cline{1-17}
%\cline{1-1} \cline{9-10}
\multicolumn{7}{|c|}{} & \multicolumn{5}{|c|} {Grid \Strut{2pc}}  &     \multicolumn{5}{|c|}{Linear} 
\\[2ex]
\hline
 N & Pmd & Pfa & N.Pmd & N.Pfa & 2N.Pmd & 2N.Pfa &  N\textsubscript{gd}    (N\textsubscript{gd}>2N.Pmd) & N\textsubscript{gd}    (N\textsubscript{gd}>2N.Pfa) & h\textsubscript{gd1} & h\textsubscript{gd2} &     h\textsubscript{opt\_gd} & N\textsubscript{ln}(N\textsubscript{ln}>2N.Pmd) &     N\textsubscript{ln}(N\textsubscript{ln}>2N.Pfa) & h\textsubscript{ln1} &     h\textsubscript{ln2} & h\textsubscript{opt\_lm} \\ [1ex] 
\hline
10 & 0.05 & 0.10 & 0.5   & 1 & 1   & 2  & 5 & 5 & 1 & 1 & 1 & 3 & 3 & 1 & 1 &     1\\[1ex]
\hline
50 & 0.05 & 0.10 & 2.5   & 5 & 5   & 10 & 13 & 13 & 2 & 2 & 2 & 11 & 11 & 5 &     5 & 5\\[1ex]
\hline
\end{tabular}
}
\end{table*}

答案2

我提出了两种解决方案,使用更大的字体,不需要resizebox

一个带有垂直线的行。行的内容与包垂直居中cellspace,确保以字母为前缀的列中的单元格顶部和底部具有最小的垂直填充S

看起来更专业的表格,只有水平规则,其中填充是通过包的\aboverulesep\belowrulesep长度实现的booktabs

两种解决方案都使用makecell,允许在单元格中换行。

最后,我冒昧地认为第 6 至第 7 列(对应于琐碎的计算)是不必要的,因为公式在第 8-9 列和第 13-14 列中提到——但也许我错了。结果是一个包含 13 列的表格,适合边距。

\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{graphicx,array, booktabs, caption}
\usepackage[textwidth=17cm, showframe, nomarginpar]{geometry}
\usepackage{makecell}
\usepackage{cellspace}
\setlength\cellspacetoplimit{4pt}
\setlength\cellspacebottomlimit{4pt}

\begin{document}

\null\vskip1cm
\begin{table}[!htb]
  \centering\footnotesize\setlength\tabcolsep{3.6pt}
  \caption{table1}
  \label{tab:table1}
  \begin{tabular}{|*{13}{Sc|}}
    \cline{4-13}
    \multicolumn{3}{c|}{} & \multicolumn{5}{Sc|} {Grid} & \multicolumn{5}{Sc|}{Linear} \\
    \hline
    N & Pmd & Pfa & \makecell{N\textsubscript{gd} \\(N\textsubscript{gd}>2N.Pmd)} & \makecell{N\textsubscript{gd}\\(N\textsubscript{gd}>2N.Pfa)} & h\textsubscript{gd1} & h\textsubscript{gd2} & h\textsubscript{opt\_gd} & \makecell{N\textsubscript{ln}\\(N\textsubscript{ln}>2N.Pmd)} & \makecell{N\textsubscript{ln}\\(N\textsubscript{ln}>2N.Pfa)} & h\textsubscript{ln1} & h\textsubscript{ln2} & h\textsubscript{opt\_lm} \\
    \hline
    10 & 0.05 & 0.10 & 5 & 5 & 1 & 1 & 1 & 3 & 3 & 1 & 1 & 1 \\
    \hline
    50 & 0.05 & 0.10 & 13 & 13 & 2 & 2 & 2 & 11 & 11 & 5 & 5 & 5 \\
    \hline
  \end{tabular}
\end{table}

\begin{table}[!htb]
  \centering\footnotesize\setlength\tabcolsep{3.6pt}
  \renewcommand\cellalign{bc}
  \caption{table1}
  \label{tab:table1}
  \begin{tabular}{*{13}{c}}
    \noalign{\vspace*{-\aboverulesep}}\cmidrule[\heavyrulewidth]{4-13}
    \multicolumn{3}{c}{} & \multicolumn{5}{c} {Grid} & \multicolumn{5}{c}{Linear} \\
    \cmidrule(lr){4-8}\cmidrule(lr){9-13}
    N & Pmd & Pfa & \makecell{N\textsubscript{gd} \\(N\textsubscript{gd}>2N.Pmd)} & \makecell{N\textsubscript{gd}\\(N\textsubscript{gd}>2N.Pfa)} & h\textsubscript{gd1} & h\textsubscript{gd2} & h\textsubscript{opt\_gd} & \makecell{N\textsubscript{ln}\\(N\textsubscript{ln}>2N.Pmd)} & \makecell{N\textsubscript{ln}\\(N\textsubscript{ln}>2N.Pfa)} & h\textsubscript{ln1} & h\textsubscript{ln2} & h\textsubscript{opt\_lm} \\
    \midrule
    10 & 0.05 & 0.10 & 5 & 5 & 1 & 1 & 1 & 3 & 3 & 1 & 1 & 1 \\
    \addlinespace
    50 & 0.05 & 0.10 & 13 & 13 & 2 & 2 & 2 & 11 & 11 & 5 & 5 & 5 \\
    \bottomrule
  \end{tabular}
\end{table}

\end{document} 

在此处输入图片描述

答案3

首先,请删除语句\fontsize{15}{15}\selectfont。其次,删除间距指令[2ex][1ex]。第三,在后面添加诸如\renewcommand\arraystretch{1.5}立即执行之类的指令。另外,请将(默认值:)\begin{table*}的值减小为类似于的值,以防止由引起的字体大小的线性减小变得过于极端(并可能导致整个表格难以辨认)。最后,您应该删除第一个标题行中的双倍厚度垂直条。\tabcolsep6pt2pt\resizebox

在此处输入图片描述

\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{graphicx,array}
\usepackage[textwidth=17cm]{geometry}
\begin{document}
\begin{table*}[t]
%\fontsize{15}{15}\selectfont
\caption{table}
\label{tab:table1}
\renewcommand\arraystretch{1.5}
\setlength\tabcolsep{2pt} % default value: 6pt
\resizebox{\textwidth}{!}{
\begin{tabular}{|*{17}{c|}}
\hline
%\cline{1-1} \cline{9-10}
\multicolumn{7}{|c|}{} & \multicolumn{5}{c|}{Grid}   & \multicolumn{5}{c|}{Linear} \\
\hline
 N & Pmd & Pfa & N.Pmd & N.Pfa & 2N.Pmd & 2N.Pfa &  N\textsubscript{gd}(N\textsubscript{gd}>2N.Pmd) & N\textsubscript{gd}(N\textsubscript{gd}>2N.Pfa) & h\textsubscript{gd1} & h\textsubscript{gd2} & h\textsubscript{opt\_gd} & N\textsubscript{ln}(N\textsubscript{ln}>2N.Pmd) & N\textsubscript{ln}(N\textsubscript{ln}>2N.Pfa) & h\textsubscript{ln1} & h\textsubscript{ln2} & h\textsubscript{opt\_lm} \\  
\hline
10 & 0.05 & 0.10 & 0.5   & 1 & 1   & 2  & 5 & 5 & 1 & 1 & 1 & 3 & 3 & 1 & 1 & 1\\
\hline
50 & 0.05 & 0.10 & 2.5   & 5 & 5   & 10 & 13 & 13 & 2 & 2 & 2 & 11 & 11 & 5 & 5 & 5\\
\hline
\end{tabular}
}
\end{table*}
\end{document}

附录:在进一步研究了您的表格后,我发现,只要对标题行进行轻微的重新组织,就不再需要大幅调整表格材料的大小以使其适合文本块。通过指令简单地将尺寸线性缩小 10% 就足够\small了。我还建议删除所有垂直规则,并\hline用包中更复杂的宏替换booktabs\toprule、、和。我还建议您将\midrule各个标题条目替换为。\cmidrule\bottomrule.\cdot

在此处输入图片描述

\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{graphicx,array,booktabs,caption}
\usepackage[textwidth=17cm]{geometry}
\begin{document}
\begin{table}[t]
\small % 10% linear reduction of font size
\caption{table}
\label{tab:table1}
\renewcommand\arraystretch{1.5}
\setlength\tabcolsep{0pt} % let LaTeX figure out the intercolumn whitespace
\begin{tabular*}{\textwidth}{c @{\extracolsep{\fill}} *{16}{c} }
\toprule
\multicolumn{7}{c}{} & \multicolumn{5}{c}{Grid} & \multicolumn{5}{c}{Linear} \\
\cmidrule{8-12} \cmidrule{13-17}
N & Pmd & Pfa & N$\cdot$Pmd & N$\cdot$Pfa & 2N$\cdot$Pmd & 2N$\cdot$Pfa &  
\multicolumn{2}{c}{N\textsubscript{gd} >} &  
h\textsubscript{gd1} & h\textsubscript{gd2} & h\textsubscript{opt\_gd} & 
\multicolumn{2}{c}{N\textsubscript{ln} >} & 
h\textsubscript{ln1} & h\textsubscript{ln2} & h\textsubscript{opt\_lm} \\  
\cmidrule{8-9} \cmidrule{13-14}
\multicolumn{7}{c}{} & 2N$\cdot$Pmd & 2N$\cdot$Pfa & 
\multicolumn{3}{c}{} & 2N$\cdot$Pmd & 2N$\cdot$Pfa \\
\midrule
10 & 0.05 & 0.10 & 0.5   & 1 & 1   & 2  & 5 & 5 & 1 & 1 & 1 & 3 & 3 & 1 & 1 & 1\\
50 & 0.05 & 0.10 & 2.5   & 5 & 5   & 10 & 13 & 13 & 2 & 2 & 2 & 11 & 11 & 5 & 5 & 5\\
\bottomrule
\end{tabular*}
\end{table}
\end{document}

相关内容