答案1
我的评论作为答案:
环境tabular*
以指定的宽度作为其参数。水平线的长度与此宽度相同。垂直线插入在列之后,因此如果列的总宽度与环境的宽度不匹配tabular*
,它们将不会与水平线的末尾对齐。
一个简单的解决方案是使用tabularx
包。它提供了tabularx
环境,也以它应该占用的宽度作为参数,但提供了列说明符X
,它就像一个,p
但占用了可用空间。您可以将其中一列更改为所述X
类型:
\documentclass[]{article}
\usepackage{tabularx}
\begin{document}
\noindent
\begin{tabularx}{0.85\textwidth}{|p{0.075\textwidth}|p{0.3\textwidth}|p{0.075\textwidth}|X|}
\hline
\centering Motto&&& \\ \hline
\centering Class Number&& \centering Full Name& \\ \hline
\end{tabularx}
\end{document}
您的表格太宽的原因是您忘记考虑\tabcolsep
插入在列之间的 s。此外,如果array
加载了包(这是许多与表格相关的包的依赖项,例如tabularx
),垂直规则也会影响宽度。因此,要使您的tabular*
方法(和加载的array.sty
)一切正确,您必须根据\tabcolsep
添加的 s 计算列的宽度(如果您不使用任何@
符号来更改列之间的内容,则每列两个 s)——以下计算是使用 完成的\dimexpr
:
\begin{tabular*}{0.85\linewidth}
{
|p{0.075\linewidth}
|p{0.3\linewidth}
|p{0.075\linewidth}
|p{\dimexpr0.85\linewidth-0.075\linewidth-0.3\linewidth-0.075\linewidth-8\tabcolsep-5\arrayrulewidth\relax}|
}
当然你可以把它缩短为\dimexpr0.4\linewidth-8\tabcolsep-5\arrayrulewidth\relax
。如果没有 loaded,array.sty
你就必须省略\arrayrulewidth
:
\begin{tabular*}{0.85\linewidth}
{
|p{0.075\linewidth}
|p{0.3\linewidth}
|p{0.075\linewidth}
|p{\dimexpr0.4\linewidth-8\tabcolsep\relax}
}
这些应该给出与上述方法相同的结果tabularx
,但使用tabularx
似乎更容易......