调整数组列宽以填充页面

调整数组列宽以填充页面

我正在尝试利用array环境(任何类似操作都可以),它会自动将列拉伸为等宽并分布在整个页面上。一个例子:

\documentclass[12pt]{article}
\usepackage{amsmath}
\renewcommand{\u}[1]{\underline{#1}}

\begin{document}
\[\begin{array}{rrr}
    5 & 5 & 5\\
    \u{+4} &\u{+4} &\u{+4}
\end{array}\]
\end{document}

目前我知道要做的就是在每对列之间插入一个“假”列,并强制\hspace*{##cm}列展开,但如果我有 13 行上的 7 列,由于某种原因,它们不能全部成为单个数组环境的一部分,那么这会变得有点乏味。

有没有一种比较简单的方法可以解决这个问题?我一直在搜索,但没有找到任何非常有用的东西(也可能是因为我对术语不够熟悉,无法输入最佳搜索短语)。

答案1

您可以使用tabular*并填充空格。要在数学模式下显示列,请使用array包和,>{$}就像我做的那样。

\documentclass[12pt]{article}
\usepackage{amsmath,array}
\renewcommand{\u}[1]{\underline{#1}}

\begin{document}
\begin{tabular*}{\linewidth}{>{$}r<{$}@{\extracolsep{\fill}}>{$}r<{$}>{$}r<{$}}
    5 & 5 & 5\\
    \u{+4} &\u{+4} &\u{+4}
\end{tabular*}
\end{document}

您可以按照 Mico 的建议,通过定义新的列类型来简化:

\documentclass[12pt]{article}
\usepackage{amsmath,array}
\renewcommand{\u}[1]{\underline{#1}}

\newcolumntype{R}{>{$}r<{$}}

\begin{document}
\begin{tabular*}{\linewidth}{R@{\extracolsep{\fill}}RR}
    5 & 5 & 5\\
    \u{+4} &\u{+4} &\u{+4}
\end{tabular*}
\end{document}

答案2

(答案已更新,以纳入 OP 的后续评论。)

如果我理解正确你的需求,你想要

  • 每列中的数字按小数对齐

  • 列本身居中

  • 自动调整列宽和/或列间空白量,以便整个表格占据文本块的宽度。

实现这些目标的一种方法是使用tabularx环境,加载dcolumn包以对数字进行十进制对齐,并使用修改后的(即居中)形式的X列类型来排版每行的标题。

在此处输入图片描述

\documentclass[12pt]{article}
\usepackage{tabularx}
\newcolumntype{Y}{>{\centering\arraybackslash}X}
\newcommand\mc[1]{\multicolumn{1}{Y}{#1}}

\usepackage{dcolumn}
\newcolumntype{d}[1]{D..{#1}} % "decimal-aligned" column type

\usepackage[normalem]{ulem} % for "safe underlining"
\renewcommand\u[1]{\uline{#1}}

\begin{document}
\hrule % just to illustrate width of text block
\smallskip\noindent
\begin{tabularx}{\linewidth}{ *{4}{d{2.0}} }
\mc{Header 1} & \mc{Header 2} & \mc{Header 3} & \mc{Header 4}\\
    5 & 5 & 5 & 5\\
    \u{+4} &\u{+4} &\u{+4} &\u{+4}\\
\end{tabularx}
\end{document}

相关内容