如果我在一个页面上制作不同的表格,它看起来并不总是像我想要的那样好。最大的问题是有些表格比其他表格宽。因此,我想根据文本宽度控制表格的列,这样它就会始终是均匀的宽度。有没有办法做这样的事情:
\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
使用列的列规范。如果包计算列宽,它会处理垂直规则的宽度。X
tabularx
\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}
无包解决方案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}
输出: