我想将$\omega_1$
和$\omega_2$
项放在两列的中间。
如果我使各列的宽度相等(如下面代码中为 2em),结果会很差:
\documentclass{article}
\usepackage{array, makecell}
\NewExpandableDocumentCommand\mcc{O{1}m}%
{\multicolumn{#1}{c}{#2}}
\begin{document}
\begin{center}
\setcellgapes{3pt}
\makegapedcells
\begin{tabular}{c | *{2}{>{$}w{c}{2em}<{$} |}}
\mcc{} & \mcc{$m$} & \mcc{$\hat{m}$} \\
\cline{2-3}
$m$ & x+2\alpha-1 & 1-\alpha-x \\
\cline{2-3}
$\hat{m}$ & 1-\alpha-x & x \\
\cline{2-3}
\mcc{} & \mcc[2]{$\omega_1$}
\end{tabular}
\hskip 21mm
\begin{tabular}{c | *{2}{>{$}w{c}{2em}<{$} |}}
\mcc{} & \mcc{$m$} & \mcc{$\hat{m}$} \\
\cline{2-3}
$m$ & y & 1-\alpha-y \\
\cline{2-3}
$\hat{m}$ & 1-\alpha-y & y+2\alpha-1 \\
\cline{2-3}
\mcc{} & \mcc[2]{$\omega_2$}
\end{tabular}
\end{center}
\end{document}
我试图改变“3pt”,但它控制的是高度而不是宽度。
答案1
这两种环境的主要问题tabular
是您将列宽设置为2em
,这实在太窄了。
下面,我将示例代码从使用环境切换tabular
到array
环境,通过删除大量$
内联数学模式启动符和终止符来简化代码。为了获得看起来紧凑的表格,我建议您测量最宽列(称为\lenA
和\lenB
下面)的宽度,并使用这些长度而不是2em
。结果显示在以下屏幕截图中表格的中间一行。
不过,仍然存在一个令人困扰的印刷问题:\omega_1
和\omega_2
数学上讲,但不是光学的,居中。这(视觉或美学)问题是什么?\omega
视觉上主导\omega_1
和\omega_2
术语的字形没有放置在垂直规则的正下方;因此,术语\omega_1
和\omega_2
“看起来”不在表格中居中。为了实现所需的视觉居中,我建议您将1
和2
下标术语放在\mathrlap
包装器中,以便在\omega
字形上执行居中。
我在以下屏幕截图的中间行和底部行中突出显示了 omega 项,以突出显示数学与光学定心问题。
\documentclass{article}
% pre-existing code
\usepackage{array, makecell}
\setcellgapes{3pt}
\makegapedcells
\NewExpandableDocumentCommand\mcc{O{1}m}%
{\multicolumn{#1}{c}{#2}}
% new code
\usepackage{mathtools} % for '\mathrlap' macro
% measure appropriate column widths:
\newlength\lenA
\settowidth\lenA{$x+2\alpha-1$} % for left-hand side array
\newlength\lenB
\settowidth\lenB{$y+2\alpha-1$} % for right-hand side array
\begin{document}
%% original version: incorrect column widths -- why 2em ?
\[
\begin{array}{c | *{2}{w{c}{2em} |}}
\mcc{} & \mcc{m} & \mcc{\hat{m}}\\
\cline{2-3}
m & x+2\alpha-1 & 1-\alpha-x \\
\cline{2-3}
\hat{m} & 1-\alpha-x & x \\
\cline{2-3}
\mcc{} & \mcc[2]{\omega_1}
\end{array}
\hskip 21mm
\begin{array}{c | *{2}{w{c}{2em} |}}
\mcc{} & \mcc{m} & \mcc{\hat{m}} \\
\cline{2-3}
m & y & 1-\alpha-y \\
\cline{2-3}
\hat{m} & 1-\alpha-y & y+2\alpha-1 \\
\cline{2-3}
\mcc{} & \mcc[2]{\omega_2}
\end{array}
\]
%% appropriate column widths, but naive centering of \omega_i terms
\[
\begin{array}{c | *{2}{w{c}{\lenA} |}}
\mcc{} & \mcc{m} & \mcc{\hat{m}}\\
\cline{2-3}
m & x+2\alpha-1 & 1-\alpha-x \\
\cline{2-3}
\hat{m} & 1-\alpha-x & x \\
\cline{2-3}
\mcc{} & \mcc[2]{\omega_1}
\end{array}
\hskip 21mm
\begin{array}{c | *{2}{w{c}{\lenB} |}}
\mcc{} & \mcc{m} & \mcc{\hat{m}} \\
\cline{2-3}
m & y & 1-\alpha-y \\
\cline{2-3}
\hat{m} & 1-\alpha-y & y+2\alpha-1 \\
\cline{2-3}
\mcc{} & \mcc[2]{\omega_2}
\end{array}
\]
%% appropriate column widths and *optical* centering of \omega_i terms
\[
\begin{array}{c | *{2}{w{c}{\lenA} |}}
\mcc{} & \mcc{m} & \mcc{\hat{m}}\\
\cline{2-3}
m & x+2\alpha-1 & 1-\alpha-x \\
\cline{2-3}
\hat{m} & 1-\alpha-x & x \\
\cline{2-3}
\mcc{} & \mcc[2]{\omega\mathrlap{{}_1}}
\end{array}
\hskip 21mm
\begin{array}{c | *{2}{w{c}{\lenB} |}}
\mcc{} & \mcc{m} & \mcc{\hat{m}} \\
\cline{2-3}
m & y & 1-\alpha-y \\
\cline{2-3}
\hat{m} & 1-\alpha-y & y+2\alpha-1 \\
\cline{2-3}
\mcc{} & \mcc[2]{\omega\mathrlap{{}_2}}
\end{array}
\]
\end{document}
答案2
你把事情弄得太复杂了,我不太清楚为什么。
您只需使用跨越第 2 列和第 3 列的多列即可将 ω 居中。
由于这一切都处于数学模式,因此使用数组比表格环境更有意义。
我的建议:
\documentclass{article}
\usepackage{array, makecell}
\NewExpandableDocumentCommand\mcc{O{1}m}%
{\multicolumn{#1}{c}{#2}}
\begin{document}
\renewcommand*{\arraystretch}{1.2}% controls vertical spacing
%\setlength{\arraycolsep}{5pt} % if you want to control cell padding
\[
\begin{array}{r|c|c|}
\mcc[1]{} & \mcc[1]{m} & \mcc[1]{\hat{m}} \\
\cline{2-3}
m & x+2\alpha-1 & 1-\alpha-x \\
\cline{2-3}
\hat{m} & 1-\alpha-x & x \\
\cline{2-3}
\mcc[1]{} & \mcc[2]{\omega_1}
\end{array}
\qquad
\begin{array}{r|c|c|}
\mcc[1]{} & \mcc[1]{m} & \mcc[1]{\hat{m}} \\
\cline{2-3}
m & y & 1-\alpha-y \\
\cline{2-3}
\hat{m} & 1-\alpha-y & y+2\alpha-1 \\
\cline{2-3}
\mcc[1]{} & \mcc[2]{\omega_2}
\end{array}
\]
\end{document}
答案3
这是{NiceArray}
使用 的解决方案nicematrix
,它类似于经典的{array}
(包 的解决方案array
)。
在该环境中,有一个键可以hvlines
绘制所有规则,除非存在“外部”行和列,它们由键first-col
、last-col
和指定。first-row
last-row
为了使两个环境的列具有相同的宽度,我使用了{NiceMatrixBlock}
具有专用键的环境auto-columns-width
(根据设计,此键计算的宽度不适用于外部列,而这正是我们想要的)。
\documentclass{article}
\usepackage{nicematrix}
\begin{document}
\begin{NiceMatrixBlock}[auto-columns-width]%
\NiceMatrixOptions{first-row,first-col,last-row=3,hvlines,cell-space-limits=4pt}%
$\begin{NiceArray}{cc}
& m & \hat{m} \\
m & x+2\alpha-1 & 1-\alpha-x \\
\hat{m} & 1-\alpha-x & x \\
& \Block{1-2}{\omega_1}
\end{NiceArray}
\hspace{21mm}
\begin{NiceArray}{cc}
& m & \hat{m} \\
m & y & 1-\alpha-y \\
\hat{m} & 1-\alpha-y & y+2\alpha-1 \\
& \Block{1-2}{\omega_2}
\end{NiceArray}$
\end{NiceMatrixBlock}
\end{document}
您需要多次编译。