我寻求有关在表格环境中实现两种独立效果的建议。
(1)我有两个表,它们的列数不同。我需要将它们合并为一个表。
我有这个
\begin{table}[ht]
\small
\centering
\begin{tabular}{|l|c|l|c|}
\hline
parameter & value & parameter & value \\
\hline
blah blah & a & blah blah & 2 \\
blah blah & 4 & blah blah & 17 \\
blah blah & 4 & blah blah & 4 \\
blah blah & 4 & blah blah & 128 \\
blah blah & 1 & blah blah & 6 \\
blah blah & 8 & blah blah & 48 \\
blah blah & 48 & blah blah & 32 \\
blah blah & 10 & blah blah & 16 \\
\hline
\end{tabular}
\caption{My table 1}
\end{table}
\begin{table}[ht]
\small
\centering
\begin{tabular}{|l|l|l|l|l|l|}
\hline
blah & bloo & bleeblee & bloo bloo & meeh & hoohaa \\ \hline
xyz & 3ubfjdf & 14 & 64 & 4 & 444 \\
abc & fddf4 & 44 & 64 & 8 & 555 \\
mno & dsf4tv & 100 & 64 & 8 & 777 \\
\hline
\end{tabular}
\caption{My even better table 2}
\label{tab:cacheparams}
\end{table}
我想将两张表合并在一起。我试过这个
\begin{table}[ht]
\small
\centering
\begin{tabular}{|l|c|l|c|}
\hline
parameter & value & parameter & value \\
\hline
blah blah & a & blah blah & 2 \\
blah blah & 4 & blah blah & 17 \\
blah blah & 4 & blah blah & 4 \\
blah blah & 4 & blah blah & 128 \\
blah blah & 1 & blah blah & 6 \\
blah blah & 8 & blah blah & 48 \\
blah blah & 48 & blah blah & 32 \\
blah blah & 10 & blah blah & 16 \\
\hline
\end{tabular}
\begin{tabular}{|l|l|l|l|l|l|}
\hline
blah & bloo & bleeblee & bloo bloo & meeh & hoohaa \\ \hline
xyz & 3ubfjdf & 14 & 64 & 4 & 444 \\
abc & fddf4 & 44 & 64 & 8 & 555 \\
mno & dsf4tv & 100 & 64 & 8 & 777 \\
\hline
\end{tabular}
\caption{My merged table}
\end{table}
但它产生了这个
但是我想要这个(请注意两个表格之间缺少空白)。
(2)一旦我正确定位了这两个表格,我想让它们的宽度相等。最好是列的宽度。我尝试使用 tabularx 和使用|X|c|l|c|还行,但第一列的空格太多了。我希望空格分布在所有列上。
有什么方法可以实现这些目标吗?
答案1
这是一个使用选项tabularx
:
\documentclass{book}
\usepackage{tabularx}
\newcolumntype{C}{>{\centering\arraybackslash}X}
\begin{document}
\begin{table}
\small
\centering
\begin{tabularx}{.7\linewidth}{|X|C|X|C|}
\hline
parameter & value & parameter & value \\
\hline
blah blah & a & blah blah & 2 \\
blah blah & 4 & blah blah & 17 \\
blah blah & 4 & blah blah & 4 \\
blah blah & 4 & blah blah & 128 \\
blah blah & 1 & blah blah & 6 \\
blah blah & 8 & blah blah & 48 \\
blah blah & 48 & blah blah & 32 \\
blah blah & 10 & blah blah & 16 \\
\hline
\end{tabularx}\par\vskip-1.4pt
\begin{tabularx}{.7\linewidth}{*{6}{|X}|}
\hline
blah & bloo & bleeblee & bloo bloo & meeh & hoohaa \\ \hline
xyz & 3ubfjdf & 14 & 64 & 4 & 444 \\
abc & fddf4 & 44 & 64 & 8 & 555 \\
mno & dsf4tv & 100 & 64 & 8 & 777 \\
\hline
\end{tabularx}
\caption{My merged table}
\end{table}
\end{document}
答案2
您只需使用标准命令即可multicolumn
实现此目的。然后选择顶部表格的哪些列应跨越底部表格的多个列。然后在顶部表格的每一行中执行此操作。
\begin{tabular}{|l|l|l|l|l|l|}
\hline
\multicolumn{2}{|l|}{ parameter } & value & \multicolumn{2}{l|}{ parameter } & value \\
\hline
\multicolumn{2}{|l|}{ blah blah }& a & \multicolumn{2}{l|}{ blah blah } & 2 \\
\multicolumn{2}{|l|}{ blah blah }& 4 & \multicolumn{2}{l|}{ blah blah } & 17 \\
\multicolumn{2}{|l|}{ blah blah }& 4 & \multicolumn{2}{l|}{ blah blah } & 4 \\
\multicolumn{2}{|l|}{ blah blah }& 4 & \multicolumn{2}{l|}{ blah blah } & 128 \\
\multicolumn{2}{|l|}{ blah blah }& 1 & \multicolumn{2}{l|}{ blah blah } & 6 \\
\multicolumn{2}{|l|}{ blah blah }& 8 & \multicolumn{2}{l|}{ blah blah } & 48 \\
\multicolumn{2}{|l|}{ blah blah }& 48 & \multicolumn{2}{l|}{ blah blah } & 32 \\
\multicolumn{2}{|l|}{ blah blah }& 10 & \multicolumn{2}{l|}{ blah blah } & 16 \\
\hline
blah & bloo & bleeblee & bloo bloo & meeh & hoohaa \\ \hline
xyz & 3ubfjdf & 14 & 64 & 4 & 444 \\
abc & fddf4 & 44 & 64 & 8 & 555 \\
mno & dsf4tv & 100 & 64 & 8 & 777 \\
\hline
\end{tabular}
\caption{My merged table}
\end{table}
看起来像:
这种方法的优点是
- 它使用标准命令
- 它功能多样,您可以轻松使用其他列并组合两个以上的表格。
- 它不依赖于间距和其他可能改变的值
缺点当然是必须手动完成。这可能很麻烦。但不幸的是,LaTeX 中的表格通常都是这种情况。(但是,当制作表格很复杂时,阅读表格也会很复杂。这可能暗示您应该想出另一种方法来显示数据。)
我希望这回答了你的问题。
答案3
另一种具有不同类型的“X”列的布局,以及借助包实现更好的垂直间距 cellspace
:
\documentclass[a4paper, 11pt]{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage{graphicx}%[draft]
\usepackage{array, booktabs, multirow}
\usepackage{tabularx}
\newcolumntype{Y}{ >{\centering\arraybackslash\hsize =0.7165\hsize}X}
\newcolumntype{Z}{ >{\centering\arraybackslash\hsize =0.2835\hsize}X}
\renewcommand{\tabularxcolumn}[1]{ >{\small\centering\arraybackslash}m{#1}}
\usepackage{cellspace}
\renewcommand{\cellspacetoplimit}{3pt}
\renewcommand{\cellspacebottomlimit}{3pt}
\addparagraphcolumntypes{X, Y, Z}
\begin{document}
\begin{minipage}{0.6\linewidth}
\small
\centering
\begin{tabularx}{\linewidth}{|*{2}{S{Y}|S{Z}|}}
\hline
parameter & value & parameter & value \\
\hline
blah blah & a & blah blah & 2 \\
blah blah & 4 & blah blah & 17 \\
blah blah & 4 & blah blah & 4 \\
blah blah & 4 & blah blah & 128 \\
blah blah & 1 & blah blah & 6 \\
blah blah & 8 & blah blah & 48 \\
blah blah & 48 & blah blah & 32 \\
blah blah & 10 & blah blah & 16 \\
\hline
\end{tabularx}\\[-0.25ex]
%%
\begin{tabularx}{\linewidth}{|*{6}{S{X} |}}
blah & bloo & blee blee & bloo bloo & meeh & hoo haa \\
\hline
xyz & 3ubf jdf & 14 & 64 & 4 & 444 \\
abc & fdd f4 & 44 & 64 & 8 & 555 \\
mno & dsf 4tv & 100 & 64 & 8 & 777 \\
\hline
\end{tabularx}
\end{minipage}
\end{document}
答案4
第一次尝试没有相等的宽度,但我不确定我是否正确理解了请求...;-)
\documentclass{book}
\begin{document}
\begin{table}[ht]
\small
\centering
\begin{tabular}{l|l|c|l|c|l}
\cline{2-5}
& parameter & value & parameter & value \\
\cline{2-5}
& blah blah & a & blah blah & 2 \\
& blah blah & 4 & blah blah & 17 \\
& blah blah & 4 & blah blah & 4 \\
& blah blah & 4 & blah blah & 128 \\
& blah blah & 1 & blah blah & 6 \\
& blah blah & 8 & blah blah & 48 \\
& blah blah & 48 & blah blah & 32 \\
& blah blah & 10 & blah blah & 16 \\
\hline
\multicolumn{1}{|l|}{ blah} & bloo & bleeblee & bloo bloo & meeh & \multicolumn{1}{|l|}{hoohaa} \\ \hline
\multicolumn{1}{|l|}{ xyz} & 3ubfjdf & 14 & 64 & 4 & \multicolumn{1}{|l|}{444} \\
\multicolumn{1}{|l|}{ abc} & fddf4 & 44 & 64 & 8 & \multicolumn{1}{|l|}{555} \\
\multicolumn{1}{|l|}{ mno} & dsf4tv & 100 & 64 & 8 & \multicolumn{1}{|l|}{777} \\
\hline
\end{tabular}
\caption{My merged table}
\end{table}
\end{document}