我有一张表格,表格中有两条粗线(一条水平线和一条垂直线),并且有多行和多列单元格。现在其中一条线没有连接到我想要的位置。
这就是我必须创建的其他线型。(公然从这个网站窃取的):
\makeatletter
\newcommand{\thickhline}{%
\noalign {\ifnum 0=`}\fi \hrule height 1pt
\futurelet \reserved@a \@xhline
}
\newcolumntype{"}{@{\hskip\tabcolsep\vrule width 1pt\hskip\tabcolsep}}
\makeatother
以及表格本身:
\begin{table}[h]
\centering
\begin{tabular}{|c|>{\centering\arraybackslash}p{1cm}">{\centering\arraybackslash}p{1cm}|>{\centering\arraybackslash}p{1cm}|>{\centering\arraybackslash}p{1cm}|}
\hline
\multicolumn{2}{|c"}{\multirow{2}{*}{}} & \multicolumn{3}{c|}{Retort Diameter (mm)} \\ \cline{3-5}
\multicolumn{2}{|c"}{} & 750 & 1000 & 1200 \\ \thickhline
\multirow{3}{*}{Gas Flow (SLM)} & 25 & 5.7 & 3.2 & 2.2 \\ \cline{2-5}
& 50 & 11 & 6.4 & 4.4 \\ \cline{2-5}
& 75 & 17 & 9.6 & 6.6 \\ \hline
\end{tabular}
\caption{Approximate Peclet values}
\label{tb:Peclet}
\end{table}
\cline{3-5} 没有完全连接到粗垂直线。有办法解决这个问题吗?
附注:有没有更简洁的方法将文本置于定义的列的中心?
答案1
该array
包提供!{decl.}
来<decl.>
代替垂直线。要获得 1pt 宽的垂直线,可以使用\vrule width 1pt
。您还可以基于此声明新的列类型,使用类似 的内容\newcolumntype{V}{!{\vrule width 1pt}}
。(我在这里使用V
而不是您的原始内容,"
以避免与包发生可能的冲突,babel
因为"
在某些语言中是简写。)
除了定义命令之外\thickrule
,您还可以使用包\Xhline
中的命令makecell
。它接受宽度作为参数:\Xhline{1pt}
如果您计划在整个文档中多次使用较粗的垂直线和水平线,那么您可能有兴趣在行距中定义它们的宽度,就像我在下面的示例中所做的那样。
在以下 MWE 中,我还包含了表格的第二个版本,该版本利用booktabs
包来实现没有垂直线和较少水平线的布局。我还在其中添加了siunitx
包以排版单位:
\documentclass{article}
\usepackage{array}
\usepackage{multirow}
\usepackage{makecell}
\newlength{\mytablinewidth}
\setlength{\mytablinewidth}{1pt}
\newcommand{\myhline}{\Xhline{\mytablinewidth}}
\newcolumntype{V}{!{\vrule width \mytablinewidth}}
\usepackage{booktabs}
\usepackage{siunitx}
\begin{document}
\begin{table}[h]
\centering
\begin{tabular}{|c|>{\centering\arraybackslash}p{1cm}V>{\centering\arraybackslash}p{1cm}|>{\centering\arraybackslash}p{1cm}|>{\centering\arraybackslash}p{1cm}|}
\hline
\multicolumn{2}{|cV}{\multirow{2}{*}{}} & \multicolumn{3}{c|}{Retort Diameter (mm)} \\ \cline{3-5}
\multicolumn{2}{|cV}{} & 750 & 1000 & 1200 \\ \myhline
\multirow{3}{*}{Gas Flow (SLM)} & 25 & 5.7 & 3.2 & 2.2 \\ \cline{2-5}
& 50 & 11 & 6.4 & 4.4 \\ \cline{2-5}
& 75 & 17 & 9.6 & 6.6 \\ \hline
\end{tabular}
\caption{Approximate Peclet values}
\label{tb:Peclet}
\end{table}
\begin{table}[h]
\centering
\begin{tabular}{ccccc}
\toprule
& & \multicolumn{3}{c}{Retort Diameter} \\
& & \multicolumn{3}{c}{(\si{\mm})} \\
\cmidrule{3-5}
& & 750 & 1000 & 1200 \\
\midrule
\multirow{3}{*}{\makecell[cl]{Gas Flow \\ (SLM)}}& 25 & 5.7 & 3.2 & 2.2 \\
& 50 & 11 & 6.4 & 4.4 \\
& 75 & 17 & 9.6 & 6.6 \\
\bottomrule
\end{tabular}
\caption{Approximate Peclet values}
\label{tb:Peclet2}
\end{table}
\end{document}
答案2
除了!
已经提到的技巧之外莱安德里斯,您可以使用w
代码更轻量的列类型。
您也可以删除左上角的空白矩形。但我认为还有更好的方法来排版表格,下面我将介绍其中一种。
\documentclass{article}
\usepackage{array,multirow}
\usepackage{booktabs}
\makeatletter
\newcommand{\thickhline}{%
\noalign {\ifnum 0=`}\fi \hrule height 1pt
\futurelet \reserved@a \@xhline
}
\newcolumntype{"}{!{\vline width 1pt}}
\makeatother
\newcommand{\smashedheader}[2][c]{%
\smash{\begin{tabular}[t]{@{}#1@{}}#2\end{tabular}}%
}
\begin{document}
\begin{tabular}{| c | w{c}{1cm} " w{c}{1cm} | w{c}{1cm} | w{c}{1cm} |}
\cline{3-5}
\multicolumn{2}{c"}{\multirow{2}{*}{}} & \multicolumn{3}{c|}{Retort Diameter (mm)} \\
\cline{3-5}
\multicolumn{2}{c"}{} & 750 & 1000 & 1200 \\
\thickhline
\multirow{3}{*}{Gas Flow (SLM)} & 25 & 5.7 & 3.2 & 2.2 \\
\cline{2-5}
& 50 & 11 & 6.4 & 4.4 \\
\cline{2-5}
& 75 & 17 & 9.6 & 6.6 \\
\hline
\end{tabular}
\bigskip
\begin{tabular}{ @{} c w{c}{1.5cm} w{c}{1.5cm} w{c}{1.5cm} @{} }
\toprule
\smashedheader{Gas Flow \\ (SLM)} & \multicolumn{3}{c@{}}{Retort Diameter (mm)} \\
\cmidrule(l){2-4}
& 750 & 1000 & 1200 \\
\midrule
25 & 5.7 & 3.2 & 2.2 \\
50 & 11 & 6.4 & 4.4 \\
75 & 17 & 9.6 & 6.6 \\
\bottomrule
\end{tabular}
\end{document}
答案3
这里是一种使用 制作表格的{NiceTabular}
方法nicematrix
。
\documentclass{article}
\usepackage{nicematrix}
\usepackage{tikz}
\begin{document}
\begin{table}[h]
\centering
\renewcommand{\arraystretch}{1.2}
\begin{NiceTabular}{c c |[tikz=very thick] *{3}{w{c}{1cm}}}[hvlines]
\Block{2-2}{} & & \Block{1-3}{Retort Diameter (mm)} \\
& & 750 & 1000 & 1200 \\
\Hline[tikz=very thick]
\Block{3-1}{Gas Flow (SLM)} & 25 & 5.7 & 3.2 & 2.2 \\
& 50 & 11 & 6.4 & 4.4 \\
& 75 & 17 & 9.6 & 6.6
\end{NiceTabular}
\caption{Approximate Peclet values}
\label{tb:Peclet}
\end{table}
\begin{table}[h]
\centering
\renewcommand{\arraystretch}{1.2}
\begin{NiceTabular}{c c |[tikz=very thick] *{3}{w{c}{1cm}}}[hvlines,corners=NW]
& & \Block{1-3}{Retort Diameter (mm)} \\
& & 750 & 1000 & 1200 \\
\Hline[tikz=very thick]
\Block{3-1}{Gas Flow (SLM)} & 25 & 5.7 & 3.2 & 2.2 \\
& 50 & 11 & 6.4 & 4.4 \\
& 75 & 17 & 9.6 & 6.6
\end{NiceTabular}
\caption{Approximate Peclet values}
\label{tb:Peclet}
\end{table}
\end{document}
您需要多次编译(因为nicematrix
使用 PGF/Tikz 节点)。