Latex tabularx 列间距不均匀

Latex tabularx 列间距不均匀

我不明白为什么我的 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}

相关内容