我不明白为什么我的 Y 列不是等距的:
\documentclass{article}
\usepackage{graphicx}
\usepackage{tabularx}
\usepackage{multirow}
\usepackage{geometry}
\geometry{
a4paper,
left=10mm,
right= 10mm,
top=10mm,
}
\newcolumntype{Y}{>{\centering\arraybackslash}X}
\begin{document}
\noindent\begin{tabularx}{\textwidth} { |p{5cm} Y Y Y Y Y Y p{5cm}| }
\hline
\multirow{5}{*}{logo} & \multicolumn{3}{|c|}{C} & \multicolumn{3}{c|}{A} & M \\ \cline{2-8}
& \multicolumn{6}{|c|}{Titre} & R \\ \cline{2-8}
& \multicolumn{2}{|c|}{C} & \multicolumn{2}{c|}{C} & \multicolumn{2}{c|}{C} & B \\ \cline{2-8}
& \multicolumn{2}{|c|}{C} & \multicolumn{2}{c|}{C} & \multicolumn{2}{c|}{C} & Autres \\ \cline{2-8}
& \multicolumn{2}{|c|}{C} & \multicolumn{2}{c|}{C} & \multicolumn{2}{c|}{C} & DATE \\ \cline{1-8}
\end{tabularx}
\end{document}
答案1
Y
您的代码使用大量包装器来隐藏有关 6 种类型列的信息\multicolumn}{...}{c}{...}
。因此,LaTeX 所“知道”的只是对列Y
应该像单一c
类型的列一样运行,而这正是您所得到的。
我建议你 (a) 去掉 12 个\multicolumn
包装中的 10 个,并且 (b) 更换多余的对类型Y
的列单身的 Y
型列。这意味着总列数从 8 个减少到 5 个。
附录,在 OP 在评论中指出第 1 行中的“C”和“A”标题单元格应具有相同的宽度后发布。由于表格的信息内容有限——特别是因为 3Y
类型列的宽度被确定为残差——LaTeX 无法自行确定这两个单元格应该有多宽。因此,有必要从头开始计算这两个单元格的目标宽度,即直接从有限的可用信息中计算。如何做到这一点如下所示;查看\mylen
前言末尾的长度参数计算。
注意表2和表3的整体结构是相同的:
{| p{5cm} | *{3}{Y|} p{5cm} |}
\documentclass{article}
\usepackage[a4paper,margin=10mm]{geometry}
\usepackage{tabularx,multirow,calc}
\newcolumntype{Y}{>{\centering\arraybackslash}X}
% For the 3rd table, calculate the *usable* width of the 2 columns
% that jointly span the 3 Y-type columns. In a two-step process:
\newlength\mylen
\setlength\mylen{\textwidth-10cm-4\tabcolsep-4\arrayrulewidth}
\setlength\mylen{(\mylen-4\tabcolsep-\arrayrulewidth)/2}
% Or, perfotm the length calculation in a single step:
% \setlength\mylen{(\textwidth-10cm-8\tabcolsep-5\arrayrulewidth)/2}
\begin{document}
\noindent\textbf{before} % 1st table
\smallskip\noindent
\begin{tabularx}{\textwidth} {| p{5cm} *{6}{Y} p{5cm} |}
\hline
\multirow{5}{*}{logo} & \multicolumn{3}{|c|}{C} & \multicolumn{3}{c|}{A} & M \\ \cline{2-8}
& \multicolumn{6}{|c|}{Titre} & R \\ \cline{2-8}
& \multicolumn{2}{|c|}{C} & \multicolumn{2}{c|}{C} & \multicolumn{2}{c|}{C} & B \\ \cline{2-8}
& \multicolumn{2}{|c|}{C} & \multicolumn{2}{c|}{C} & \multicolumn{2}{c|}{C} & Autres \\ \cline{2-8}
& \multicolumn{2}{|c|}{C} & \multicolumn{2}{c|}{C} & \multicolumn{2}{c|}{C} & DATE \\ \cline{1-8}
\end{tabularx}
\bigskip\noindent\textbf{initial adjustments} % 2nd table
\smallskip\noindent
\begin{tabularx}{\textwidth} {| p{5cm} | *{3}{Y|} p{5cm} |}
\hline
\multirow{5}{*}{logo}
& C & \multicolumn{2}{c|}{A} & M \\
\cline{2-5}
& \multicolumn{3}{c|}{Titre} & R \\
\cline{2-5}
& C & C & C & B \\
\cline{2-5}
& C & C & C & Autres \\
\cline{2-5}
& C & C & C & DATE \\
\hline
\end{tabularx}
\bigskip\noindent\textbf{additional adjustments} % 3rd table
\smallskip\noindent
\begin{tabularx}{\textwidth} {| p{5cm} | *{3}{Y|} p{5cm} |}
\hline
\multirow{5}{*}{logo}
& \multicolumn{3}{c|}{%
%% Use "w" column type for both columns, and use a
%% fixed width of "\mylen" (calculated earlier)
\begin{tabular}{@{} wc{\mylen} | wc{\mylen} @{}}
C & A
\end{tabular}} & M \\
\cline{2-5}
& \multicolumn{3}{c|}{Titre} & R \\
\cline{2-5}
& C & C & C & B \\
\cline{2-5}
& C & C & C & Autres \\
\cline{2-5}
& C & C & C & DATE \\
\hline
\end{tabularx}
\end{document}