如何使用 tabular 包右对齐表格单元格

如何使用 tabular 包右对齐表格单元格
\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包已过时;不要使用它。相反,请加载newtxtextnewtxmath包。

最后,不要忘记\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;剩下要做的就是选择lr作为列类型。

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

使用包表,tblrtabularray的表代码简短而简单:

\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}

特别是,列pmbX一个可选参数(位于方括号之间)用于水平对齐。

\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}

第二段代码的输出

相关内容