我正在尝试利用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}