如何使用 tabularx 修复不同的列宽?

如何使用 tabularx 修复不同的列宽?

我想创建一个宽度为页面宽度 100% 的表格,因此我使用 tabularx 包。我需要设置列的宽度,因此我决定将表格分成 20 个单独的列。这样我就可以使用多列为单个单元格分配多个列。我找到了一个例子,并根据我的情况进行了调整。

例如当我:

\hsize=\dimexpr7\hsize+12\tabcolsep+6\arrayrulewidth\relax

其中有 3 个数字:

  • 7 水平尺寸:7 列
  • 12 tabcolsep :新的多列中有 12 个 tabcolsep
  • 6 arrayrulewidth :新的多列内有 6 个 arrayrulewidth

我们可以简化这个:

如果我们想要一个多列{N},我们将有 N hsize、(N-1)*2 tabcolsep 和 N-1 arrayrulewidth

对于以下示例,它是有效的:

\documentclass{article}

    % Français
    \usepackage[utf8]{inputenc}
    \usepackage[T1]{fontenc}
    \usepackage[francais]{babel}

    % Images
    \usepackage{graphicx}
    \usepackage{float}

    % Tables
    \usepackage{array}
    \usepackage{tabularx}
    \usepackage{ragged2e}
    \usepackage{multirow}

    % Custom Header
    \usepackage{fancyhdr}
    \usepackage[headheight=55pt]{geometry}
    \renewcommand{\headrulewidth}{1pt}
\fancypagestyle{plain}{%
 \fancyhead[L]{
      \begin{tabular}[b]{l}
        \textbf{BLABLABLA}  \tabularnewline
        BLABLABLA \tabularnewline
        BLABLABLA \tabularnewline
    \end{tabular}   
  }%
  \fancyhead[R]{
      \begin{tabular}[t]{c}
        \centering\includegraphics[width=2.2cm]{example-image}%
      \end{tabular}
  }%
}
\pagestyle{plain}


\usepackage{textcomp}   


\begin{document}
\noindent
\begin{tabularx}{\textwidth}{|X|X|X|X|X|X|X|X|X|X|X|X|X|X|X|X|X|X|X|X|}
\hline
1&2&3&4&5&6&7&8&9&10&11&12&13&14&15&16&17&18&19&20 \\ \hline

\multicolumn{12}{|>{\bfseries\centering\hsize=\dimexpr12\hsize+22\tabcolsep+11\arrayrulewidth\relax}X|}{TEST}
&
\multicolumn{8}{>{\bfseries\centering\hsize=\dimexpr7\hsize+12\tabcolsep+6\arrayrulewidth\relax}X|}{TEST} \\ \hline

\textbf{N°}
&
\multicolumn{7}{>{\bfseries\centering\hsize=\dimexpr7\hsize+12\tabcolsep+6\arrayrulewidth\relax}X|}{Tests}
&
\multicolumn{7}{>{\bfseries\centering\hsize=\dimexpr7\hsize+12\tabcolsep+6\arrayrulewidth\relax}X|}{Res}
&
\multicolumn{3}{>{\bfseries\centering\hsize=\dimexpr3\hsize+4\tabcolsep+2\arrayrulewidth\relax}X|}{Modif}
&
\multicolumn{2}{>{\bfseries\centering\hsize=\dimexpr2\hsize+2\tabcolsep+\arrayrulewidth\relax}X|}{OK} \\ \hline



1
&
\multicolumn{7}{>{\hsize=\dimexpr7\hsize+12\tabcolsep+6\arrayrulewidth\relax}X|}{Lorem ipsum Lorem ipsum Lorem ipsum Lorem ipsum}
&
\multicolumn{7}{>{\hsize=\dimexpr7\hsize+12\tabcolsep+6\arrayrulewidth\relax}X|}{Lorem ipsum Lorem ipsum Lorem ipsum Lorem ipsum}
&
\multicolumn{3}{>{\centering\hsize=\dimexpr3\hsize+4\tabcolsep+2\arrayrulewidth\relax}X|}{Lorem ipsum}
&
\multicolumn{2}{>{\hsize=\dimexpr2\hsize+2\tabcolsep+\arrayrulewidth\relax}X|}{OK} \\ \hline

2
&
\multicolumn{7}{>{\hsize=\dimexpr7\hsize+12\tabcolsep+6\arrayrulewidth\relax}X|}{Lorem ipsum Lorem ipsum Lorem ipsum Lorem ipsum}
&
\multicolumn{7}{>{\hsize=\dimexpr7\hsize+12\tabcolsep+6\arrayrulewidth\relax}X|}{Lorem ipsum Lorem ipsum Lorem ipsum Lorem ipsum}
&
\multicolumn{3}{>{\centering\hsize=\dimexpr3\hsize+4\tabcolsep+2\arrayrulewidth\relax}X|}{Lorem ipsum}
&
\multicolumn{2}{>{\hsize=\dimexpr2\hsize+2\tabcolsep+\arrayrulewidth\relax}X|}{OK} \\ \hline



\end{tabularx}

\end{document}

标签正在工作

但是现在,如果我们尝试放置另一个类似的行:

3
&
\multicolumn{7}{>{\hsize=\dimexpr7\hsize+12\tabcolsep+6\arrayrulewidth\relax}X|}{Lorem ipsum Lorem ipsum Lorem ipsum Lorem ipsum}
&
\multicolumn{7}{>{\hsize=\dimexpr7\hsize+12\tabcolsep+6\arrayrulewidth\relax}X|}{Lorem ipsum Lorem ipsum Lorem ipsum Lorem ipsum}
&
\multicolumn{3}{>{\centering\hsize=\dimexpr3\hsize+4\tabcolsep+2\arrayrulewidth\relax}X|}{Lorem ipsum}
&
\multicolumn{2}{>{\hsize=\dimexpr2\hsize+2\tabcolsep+\arrayrulewidth\relax}X|}{OK} \\ \hline

这给了我:

Tab 不起作用

编辑:您现在可以复制粘贴我的文档代码。

如果您找到了解决方案,请放入其他列来检查它是否运行良好。

如果你问为什么是 20 列,那是因为我想为某个单元格分配一定数量的列。(例如页面宽度的 12/20 或页面宽度的 17/20)

第一行有列(从 1 到 20),只是为了检查列是否不大于正常大小。(调试)

编辑-2:

我同意使用 tabular 而不是 tabularx 但如何做到这一点:

  • 表格占满页面宽度
  • 细胞必须接受多种细胞系
  • 单元格内的数字对应于单元格与表格的比例

单元格与表格的比例

(最后一行第一个单元格为多行2)

在这种情况下,如何使用 tabular 而不是 tabularx 来做到这一点?

答案1

如果我添加第四行,我得到

在此处输入图片描述

\documentclass{article}

\DeclareUnicodeCharacter{00B0}{??}
\usepackage{tabularx}

\begin{document}
\noindent
\begin{tabularx}{\textwidth}{|X|X|X|X|X|X|X|X|X|X|X|X|X|X|X|X|X|X|X|X|}
\hline
1&2&3&4&5&6&7&8&9&10&11&12&13&14&15&16&17&18&19&20 \\ \hline
\textbf{N°}
&
\multicolumn{7}{>{\bfseries\centering\hsize=\dimexpr7\hsize+12\tabcolsep+6\arrayrulewidth\relax}X|}{Tests}
&
\multicolumn{7}{>{\bfseries\centering\hsize=\dimexpr7\hsize+12\tabcolsep+6\arrayrulewidth\relax}X|}{Res}
&
\multicolumn{3}{>{\bfseries\centering\hsize=\dimexpr3\hsize+4\tabcolsep+2\arrayrulewidth\relax}X|}{Modif}
&
\multicolumn{2}{>{\bfseries\centering\hsize=\dimexpr2\hsize+2\tabcolsep+\arrayrulewidth\relax}X|}{OK} \\ \hline


1
&
\multicolumn{7}{>{\hsize=\dimexpr7\hsize+12\tabcolsep+6\arrayrulewidth\relax}X|}{Lorem ipsum Lorem ipsum Lorem ipsum Lorem ipsum}
&
\multicolumn{7}{>{\hsize=\dimexpr7\hsize+12\tabcolsep+6\arrayrulewidth\relax}X|}{Lorem ipsum Lorem ipsum Lorem ipsum Lorem ipsum}
&
\multicolumn{3}{>{\centering\hsize=\dimexpr3\hsize+4\tabcolsep+2\arrayrulewidth\relax}X|}{Lorem ipsum}
&
\multicolumn{2}{>{\hsize=\dimexpr2\hsize+2\tabcolsep+\arrayrulewidth\relax}X|}{OK} \\ \hline


2
&
\multicolumn{7}{>{\hsize=\dimexpr7\hsize+12\tabcolsep+6\arrayrulewidth\relax}X|}{Lorem ipsum Lorem ipsum Lorem ipsum Lorem ipsum}
&
\multicolumn{7}{>{\hsize=\dimexpr7\hsize+12\tabcolsep+6\arrayrulewidth\relax}X|}{Lorem ipsum Lorem ipsum Lorem ipsum Lorem ipsum}
&
\multicolumn{3}{>{\centering\hsize=\dimexpr3\hsize+4\tabcolsep+2\arrayrulewidth\relax}X|}{Lorem ipsum}
&
\multicolumn{2}{>{\hsize=\dimexpr2\hsize+2\tabcolsep+\arrayrulewidth\relax}X|}{OK} \\ \hline

3
&
\multicolumn{7}{>{\hsize=\dimexpr7\hsize+12\tabcolsep+6\arrayrulewidth\relax}X|}{Lorem ipsum Lorem ipsum Lorem ipsum Lorem ipsum}
&
\multicolumn{7}{>{\hsize=\dimexpr7\hsize+12\tabcolsep+6\arrayrulewidth\relax}X|}{Lorem ipsum Lorem ipsum Lorem ipsum Lorem ipsum}
&
\multicolumn{3}{>{\centering\hsize=\dimexpr3\hsize+4\tabcolsep+2\arrayrulewidth\relax}X|}{Lorem ipsum}
&
\multicolumn{2}{>{\hsize=\dimexpr2\hsize+2\tabcolsep+\arrayrulewidth\relax}X|}{OK} \\ \hline

4
&
\multicolumn{7}{>{\hsize=\dimexpr7\hsize+12\tabcolsep+6\arrayrulewidth\relax}X|}{Lorem ipsum Lorem ipsum Lorem ipsum Lorem ipsum}
&
\multicolumn{7}{>{\hsize=\dimexpr7\hsize+12\tabcolsep+6\arrayrulewidth\relax}X|}{Lorem ipsum Lorem ipsum Lorem ipsum Lorem ipsum}
&
\multicolumn{3}{>{\centering\hsize=\dimexpr3\hsize+4\tabcolsep+2\arrayrulewidth\relax}X|}{Lorem ipsum}
&
\multicolumn{2}{>{\hsize=\dimexpr2\hsize+2\tabcolsep+\arrayrulewidth\relax}X|}{OK} \\ \hline
\end{tabularx}
\end{document}

但是你真的需要 20 列吗?如果 1-20 仅用于调试而不是数据,则似乎你实际上只有 5 列。

答案2

感谢@david-carlisle的帮助,也感谢其他人最终找到解决方案。让我们看看以下代码和图片:

\noindent\begin{tabular}{| 
    p{\dimexpr 0.05\linewidth-2\tabcolsep-\arrayrulewidth} |
    p{\dimexpr 0.05\linewidth-2\tabcolsep-\arrayrulewidth} |
    p{\dimexpr 0.05\linewidth-2\tabcolsep-\arrayrulewidth} |
    p{\dimexpr 0.05\linewidth-2\tabcolsep-\arrayrulewidth} |
    p{\dimexpr 0.05\linewidth-2\tabcolsep-\arrayrulewidth} |
    p{\dimexpr 0.05\linewidth-2\tabcolsep-\arrayrulewidth} |
    p{\dimexpr 0.05\linewidth-2\tabcolsep-\arrayrulewidth} |
    p{\dimexpr 0.05\linewidth-2\tabcolsep-\arrayrulewidth} |
    p{\dimexpr 0.05\linewidth-2\tabcolsep-\arrayrulewidth} |
    p{\dimexpr 0.05\linewidth-2\tabcolsep-\arrayrulewidth} |
    p{\dimexpr 0.05\linewidth-2\tabcolsep-\arrayrulewidth} |
    p{\dimexpr 0.05\linewidth-2\tabcolsep-\arrayrulewidth} |
    p{\dimexpr 0.05\linewidth-2\tabcolsep-\arrayrulewidth} |
    p{\dimexpr 0.05\linewidth-2\tabcolsep-\arrayrulewidth} |
    p{\dimexpr 0.05\linewidth-2\tabcolsep-\arrayrulewidth} |
    p{\dimexpr 0.05\linewidth-2\tabcolsep-\arrayrulewidth} |
    p{\dimexpr 0.05\linewidth-2\tabcolsep-\arrayrulewidth} |
    p{\dimexpr 0.05\linewidth-2\tabcolsep-\arrayrulewidth} |
    p{\dimexpr 0.05\linewidth-2\tabcolsep-\arrayrulewidth} |
    p{\dimexpr 0.05\linewidth-2\tabcolsep-\arrayrulewidth} |
    }
\hline
1&2&3&4&5&6&7&8&9&10&11&12&13&14&15&16&17&18&19&20 \\ \hline
\multicolumn{12}{|p{\dimexpr 0.6\linewidth-2\tabcolsep-\arrayrulewidth}|}{Lorem ipsum l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l}
&
\multicolumn{8}{p{\dimexpr 0.4\linewidth-2\tabcolsep-\arrayrulewidth}|}{Lorem ipsum l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l} \\ \hline

\multicolumn{20}{|p{\dimexpr \linewidth-2\tabcolsep-\arrayrulewidth}|}{Lorem ipsum l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l lLorem ipsum l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l} \\ \hline

\multicolumn{20}{|p{\dimexpr \linewidth-2\tabcolsep-\arrayrulewidth}|}{Lorem ipsum l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l lLorem ipsum l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l} \\ \hline

&
\multicolumn{7}{p{\dimexpr 0.35\linewidth-2\tabcolsep-\arrayrulewidth}|}{Lorem ipsum l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l}
&
\multicolumn{7}{p{\dimexpr 0.35\linewidth-2\tabcolsep-\arrayrulewidth}|}{Lorem ipsum l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l}
&
\multicolumn{3}{p{\dimexpr 0.15\linewidth-2\tabcolsep-\arrayrulewidth}|}{Lorem ipsum}
&
\multicolumn{2}{p{\dimexpr 0.1\linewidth-2\tabcolsep-\arrayrulewidth}|}{Lorem ipsum} \\ \hline

&
\multicolumn{7}{p{\dimexpr 0.35\linewidth-2\tabcolsep-\arrayrulewidth}|}{Lorem ipsum l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l}
&
\multicolumn{7}{p{\dimexpr 0.35\linewidth-2\tabcolsep-\arrayrulewidth}|}{Lorem ipsum l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l}
&
\multicolumn{3}{p{\dimexpr 0.15\linewidth-2\tabcolsep-\arrayrulewidth}|}{Lorem ipsum}
&
\multicolumn{2}{p{\dimexpr 0.1\linewidth-2\tabcolsep-\arrayrulewidth}|}{Lorem ipsum} \\ \hline

&
\multicolumn{7}{p{\dimexpr 0.35\linewidth-2\tabcolsep-\arrayrulewidth}|}{Lorem ipsum l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l}
&
\multicolumn{7}{p{\dimexpr 0.35\linewidth-2\tabcolsep-\arrayrulewidth}|}{Lorem ipsum l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l}
&
\multicolumn{3}{p{\dimexpr 0.15\linewidth-2\tabcolsep-\arrayrulewidth}|}{Lorem ipsum}
&
\multicolumn{2}{p{\dimexpr 0.1\linewidth-2\tabcolsep-\arrayrulewidth}|}{Lorem ipsum} \\ \hline

&
\multicolumn{7}{p{\dimexpr 0.35\linewidth-2\tabcolsep-\arrayrulewidth}|}{Lorem ipsum l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l}
&
\multicolumn{7}{p{\dimexpr 0.35\linewidth-2\tabcolsep-\arrayrulewidth}|}{Lorem ipsum l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l}
&
\multicolumn{3}{p{\dimexpr 0.15\linewidth-2\tabcolsep-\arrayrulewidth}|}{Lorem ipsum}
&
\multicolumn{2}{p{\dimexpr 0.1\linewidth-2\tabcolsep-\arrayrulewidth}|}{Lorem ipsum} \\ \hline

&
\multicolumn{7}{p{\dimexpr 0.35\linewidth-2\tabcolsep-\arrayrulewidth}|}{Lorem ipsum l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l}
&
\multicolumn{7}{p{\dimexpr 0.35\linewidth-2\tabcolsep-\arrayrulewidth}|}{Lorem ipsum l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l}
&
\multicolumn{3}{p{\dimexpr 0.15\linewidth-2\tabcolsep-\arrayrulewidth}|}{Lorem ipsum}
&
\multicolumn{2}{p{\dimexpr 0.1\linewidth-2\tabcolsep-\arrayrulewidth}|}{Lorem ipsum} \\ \hline

&
\multicolumn{7}{p{\dimexpr 0.35\linewidth-2\tabcolsep-\arrayrulewidth}|}{Lorem ipsum l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l}
&
\multicolumn{7}{p{\dimexpr 0.35\linewidth-2\tabcolsep-\arrayrulewidth}|}{Lorem ipsum l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l}
&
\multicolumn{3}{p{\dimexpr 0.15\linewidth-2\tabcolsep-\arrayrulewidth}|}{Lorem ipsum}
&
\multicolumn{2}{p{\dimexpr 0.1\linewidth-2\tabcolsep-\arrayrulewidth}|}{Lorem ipsum} \\ \hline
\end{tabular}

代码生成:

代码对应的标签

相关内容