\documentclass[11pt,a4paper]{article}
\usepackage[utf8]{inputenc}
\usepackage{times}
\usepackage{booktabs}
\begin{document}
\begin{tabular}{p{0.5\textwidth} p{0.5\textwidth}}
\toprule
& rtcol0 \\
leftcol1 & rtcol1 \\
leftcol2 & rtcol2 \\
leftcol3 & rtcol3 \\
leftcol4 & rtcol4 \\
\midrule
Ref: & Date:\\
\bottomrule
\end{tabular}
\vspace{2cm}
I want the table to be "textwidth" wide with the right column right aligned.
With this code the right column is left aligned.
Is there a simple way to achieve this, hopefully, using only the package tabular?
\end{document}
答案1
正如您所发现的,默认情况下,-type 列的内容p
是左对齐的(以及完全对齐)。要将其行为更改为右对齐,需要 (a) 加载包array
并 (b) 发出如下指令
>{\raggedleft\arraybackslash}p{...}
如果你需要几列右对齐的内容,并且需要自动换行,那么为它创建一个新的列类型是有意义的,比如通过
\newcolumntype{q}[1]{>{\raggedleft\arraybackslash}p{#1}}
在计算可用的列宽,不要忘记根据\tabcolsep
需要减去 的倍数。在下面的代码中,这个倍数是1
。
顺便说一句,该times
包已过时;不要使用它。相反,请加载newtxtext
和newtxmath
包。
最后,不要忘记\noindent
在 之前立即发出指令\begin{tabular}
,否则整个tabular
环境将在 的数量内右缩进\parindent
。
\documentclass[11pt,a4paper]{article}
%\usepackage[utf8]{inputenc} % that's the default nowadays
%\usepackage{times} % times package is obsolete
\usepackage{newtxtext,newtxmath}
\usepackage{booktabs}
\usepackage{array,calc}
\newcolumntype{q}[1]{>{\raggedleft\arraybackslash}p{#1}}
\begin{document}
\noindent% <-- important
\begin{tabular}{@{}
p{0.5\textwidth-\tabcolsep}
q{0.5\textwidth-\tabcolsep}
@{}}
\toprule
& rtcol0 \\
leftcol1 & rtcol1 \\
leftcol2 & rtcol2 \\
leftcol3 & rtcol3 \\
leftcol4 & rtcol4 \\
\midrule
Ref: xxxxxxx & Date: yyyyyyy \\
\bottomrule
\end{tabular}
\end{document}
附录,这是由 OP 的后续评论引起的,即两列中的单元格内容都不会溢出,即超出0.5\textwidth-\tabcolsep
宽度。有了这个额外的信息,设置表格结构可以大大简化,现在只需使用环境tabular*
(而不是tabular
环境)并将其目标宽度设置为 textwidth;剩下要做的就是选择l
和r
作为列类型。
LaTeX 代码如下(由于视觉效果与上面相同,因此没有发布屏幕截图):
\noindent% <-- important
\begin{tabular*}{\textwidth}{%
@{\extracolsep{\fill}} l r @{}}
\toprule
& rtcol0 \\
leftcol1 & rtcol1 \\
leftcol2 & rtcol2 \\
leftcol3 & rtcol3 \\
leftcol4 & rtcol4 \\
\midrule
Ref: xxxxxxx & Date: yyyyyyy \\
\bottomrule
\end{tabular*}
答案2
使用包表,tblr
您tabularray
的表代码简短而简单:
\documentclass[11pt,a4paper]{article}
\usepackage{newtxtext,newtxmath}
\usepackage{tabularray}
\UseTblrLibrary{booktabs}
\begin{document}
\noindent%
\begin{tblr}{colspec = {@{} X[l]X[r] @{}}}
\toprule
& rtcol0 \\
leftcol1 & rtcol1 \\
leftcol2 & rtcol2 \\
leftcol3 & rtcol3 \\
leftcol4 & rtcol4 \\
\midrule
Ref: xxxxxxx & Date: yyyyyyy \\
\bottomrule
\end{tblr}
\end{document}
答案3
该软件包提供了与经典环境类似但具有新功能的nicematrix
环境。{NiceTabular}
{tabular}
特别是,列p
、m
和b
有X
一个可选参数(位于方括号之间)用于水平对齐。
\documentclass[11pt,a4paper]{article}
\usepackage{newtxtext,newtxmath}
\usepackage{nicematrix}
\usepackage{booktabs}
\begin{document}
\noindent
\begin{NiceTabular}{@{} X[l]X[r] @{}}
\toprule
& rtcol0 \\
leftcol1 & rtcol1 \\
leftcol2 & rtcol2 \\
leftcol3 & rtcol3 \\
leftcol4 & rtcol4 \\
\midrule
Ref: xxxxxxx & Date: yyyyyyy \\
\bottomrule
\end{NiceTabular}
\end{document}
默认情况下,当使用键时X
, a 的宽度{NiceTabular}
等于参数\linewidth
。但是,可以使用键 更改表格所需的宽度width
。
\documentclass[11pt,a4paper]{article}
\usepackage{newtxtext,newtxmath}
\usepackage{nicematrix}
\usepackage{booktabs}
\begin{document}
\begin{center}
\begin{NiceTabular}[width=8cm]{@{}X[l]X[r]@{}}
\toprule
& rtcol0 \\
leftcol1 & rtcol1 \\
leftcol2 & rtcol2 \\
leftcol3 & rtcol3 \\
leftcol4 & rtcol4 \\
\midrule
Ref: xxxxxxx & Date: yyyyyyy \\
\bottomrule
\end{NiceTabular}
\end{center}
\end{document}