我尝试设计一个具有一些非常具体的偏好的表格:
表格应该横跨整个宽度
每个单元格可以有不同的对齐方式
每个单元格都有完全相同的宽度
有些单元格是多列单元格,2 个组合单元格的宽度应与 2 个单个单元格的宽度完全相同
以下是我尝试过的一小部分示例:
\documentclass[]{article}
\usepackage[a4paper, top=25mm, left=25mm, right=25mm, bottom=20mm, headsep=5mm, footskip=10mm, headheight=25mm]{geometry}
\usepackage{tabularx}
\begin{document}
\noindent
\begin{table}[h!]
\begin{tabularx}{\textwidth}{|X|X|X|X|} \hline
\multicolumn{3}{|l|}{3 cells left} & \multicolumn{1}{|r|}{1 cell right} \\ \hline
\multicolumn{1}{|r|}{1 cell right} & \multicolumn{3}{|l|}{3 cells left} \\ \hline
\multicolumn{1}{|r|}{1 cell right} & \multicolumn{1}{|r|}{1 cell right} & \multicolumn{2}{|r|}{2 cells right} \\ \hline
\multicolumn{1}{|r|}{1 cell right} & \multicolumn{1}{|r|}{1 cell right} & \multicolumn{1}{|r|}{1 cell right} & \multicolumn{1}{|r|}{1 cell right} \\ \hline
\end{tabularx}
\end{table}
\end{document}
此示例中的第一列明显小于其他列。我真的希望有人能帮助我。
答案1
您的问题源于这样一个事实:您的表格定义了 4 个 X 列,但实际上却没有。只需重新定义 X 列类型以确保右对齐,您就会得到一个看起来像您想要的表格,以及更简单的代码。我还在 \multicolumns 中隐藏了多余的垂直线:
\documentclass[a4paper]{article}
\usepackage[top=25mm, hmargin=25mm, bottom=20mm, headsep=5mm, footskip=10mm, headheight=25mm]{geometry}%
\usepackage{tabularx}
\renewcommand{\tabularxcolumn}[1]{>{\raggedleft\arraybackslash}m{#1}}
\begin{document}
\begin{table}[!h]
\begin{tabularx}{\linewidth}{|X|X|X|X|}
\hline
\multicolumn{3}{|l|}{3 cells left} & 1 cell right \\
\hline
1 cell right & \multicolumn{3}{l|}{3 cells left} \\
\hline
1 cell right & 1 cell right & \multicolumn{2}{r|}{2 cells right} \\
\hline
1 cell right & 1 cell right & 1 cell right & 1 cell right \\
\hline
\end{tabularx}
\end{table}
\end{document}
答案2
以下是使用\hsize
\documentclass[]{article}
\usepackage[a4paper, top=25mm, left=25mm, right=25mm, bottom=20mm, headsep=5mm, footskip=10mm, headheight=25mm]{geometry}
\usepackage{tabularx}
\begin{document}
\noindent
\begin{table}[h!]
\begin{tabularx}{\textwidth}{|X|X|X|X|} \hline
\multicolumn{3}{|>{\hsize=3\hsize}X|}{3 cells left} &
\multicolumn{1}{>{\raggedleft}X|}{1 cell
right} \\ \hline
\multicolumn{1}{|>{\raggedleft}X|}{1 cell right} &
\multicolumn{3}{>{\hsize=3\hsize}X|}{3 cells left} \\ \hline
\multicolumn{1}{|>{\raggedleft}X|}{1 cell right} &
\multicolumn{1}{>{\raggedleft}X|}{1 cell right} &
% \multicolumn{1}{X}{} &
\multicolumn{2}{>{\hsize=\dimexpr2\hsize+2\tabcolsep+\arrayrulewidth\relax\raggedleft}X|}{2 cells
right} \\ \hline
\multicolumn{1}{|>{\raggedleft}X|}{1 cell right} &
\multicolumn{1}{>{\raggedleft}X|}{1 cell right} &
\multicolumn{1}{>{\raggedleft}X|}{1 cell right} &
\multicolumn{1}{>{\raggedleft}X|}{1 cell right} \\ \hline
\end{tabularx}
\end{table}
\end{document}