以 \textwidth 的百分比缩放表格的列

以 \textwidth 的百分比缩放表格的列

如果我在一个页面上制作不同的表格,它看起来并不总是像我想要的那样好。最大的问题是有些表格比其他表格宽。因此,我想根据文本宽度控制表格的列,这样它就会始终是均匀的宽度。有没有办法做这样的事情:

\begin{document}
\begin{tabular}{|p{10%}|p{30%}|p{30%}|p{30%}|} 
\hline
A & B & C & D \\
\hline 
\end{tabular}
\end{document}

答案1

tabularx可以帮助计算列宽。有四列,它们应该填满可用空间( )。然后,以下示例中给出了\linewidth使用列的列规范。如果包计算列宽,它会处理垂直规则的宽度。Xtabularx\tabcolsep

\documentclass{article}
\usepackage{array}
\usepackage{tabularx}

\begin{document}
  \noindent
  \begin{tabularx}{\linewidth}{
    |>{\hsize=.4\hsize}X|% 10% of 4\hsize 
    >{\hsize=1.2\hsize}X|% 30% of 4\hsize
    >{\hsize=1.2\hsize}X|% 30% of 4\hsize 
    >{\hsize=1.2\hsize}X|% 30% of 4\hsize
       % sum=4.0\hsize for 4 columns
  }
    \hline
    A & B & C & D \\
    \hline
  \end{tabularx}
\end{document}

Result

无包解决方案tabularx

该问题可以通过简单的列来解决p

  • LaTeX\tabcolsep默认在列的左侧和右侧添加宽度。

  • \arrayrulesep如果已加载包,则垂直线具有宽度array(包通常由其他包隐式加载)。否则,对表宽度的贡献为零。

以下示例首先计算 中使用的列的净表宽p-columns。计算使用 e-TeX 的 完成\dimexpr。或者,calc\setlength可以使用 包。

\documentclass{article}
\usepackage{array}

\newdimen\NetTableWidth

\begin{document}
  \noindent
  \NetTableWidth=\dimexpr
    \linewidth
    - 8\tabcolsep
    - 5\arrayrulewidth % if package array is loaded
  \relax
  \begin{tabular}{%
    |p{.1\NetTableWidth}|%
    p{.3\NetTableWidth}|%
    p{.3\NetTableWidth}|%
    p{.3\NetTableWidth}|%
  }
    \hline
    A & B & C & D \\
    \hline
  \end{tabular}
\end{document}

答案2

我偶然发现了这个帖子,正在寻找没有的解决方案tabluarx。我不想使用 Heiko 解决方案中提出的另一个额外包。

这是我的替代解决方案不需要任何额外的包。我包含了多列单元格来突出显示列的相对宽度,这意味着在这种用例中,您不想手动设置每列的宽度,而是相对于其他列设置,同时使用百分比\linewidth

\documentclass[]{article}
\begin{document}
\newlength{\width}
\width.1\linewidth
\begin{table} [h!]
    \centering\begin{tabular}{|p{\width}|p{\width}|p{\width}|p{\width}|p{\width}|p{\width}|p{\width}|}
        \hline
        Num & A & B & C & D & E & F  \\\hline
        1 & 1A & 1B & \multicolumn{2}{c|}{1CD} &  \multicolumn{2}{c|}{1EF} \\\hline
        2 & 2A & 2B & 2C & 2D &  \multicolumn{2}{c|}{2EF} \\\hline
        3 & \multicolumn{6}{c|}{3ABCDEF} \\\hline
        4 & 4A & 4B & 4C &  \multicolumn{3}{c|}{4DEF} \\\hline
    \end{tabular}
\end{table}
\end{document}

输出:

Screenshot of a table with multi-column cells

相关内容