我正在尝试创建一个具有方形单元格且内容垂直和水平居中的表格。我对表格的定义如下:
\documentclass{article}
\usepackage{tabu}
\newcolumntype{K}[1]{>{\vbox to #1{\vfill}\centering}m{#1}}
\renewcommand{\i}{$\cdot$}
\begin{document}
\begin{tabu}{|[1pt]*{3}{K{3mm}|K{3mm}|[1pt]}}
\tabucline[1pt]{1-6}
0 & 4 & \i & 4 & \i & \i \\ \tabucline{1-6}
2 & 0 & \i & \i & \i & -3 \\ \tabucline[1pt]{1-6}
\i & \i & 0 & 3 & 5 & -1 \\ \tabucline{1-6}
4 & \i & 3 & 0 & -6 & \i \\ \tabucline[1pt]{1-6}
-3 & \i & \i & -6 & 0 & 9 \\ \tabucline{1-6}
\i & \i & -1 & 5 & 7 & 0 \\ \tabucline[1pt]{1-6}
\end{tabu}
\end{document}
结果是
我怎样才能使数字垂直居中?
答案1
您的\vbox
位于单元格的基线上,这会将所有内容向下推,因此您还需要添加深度。您可以通过添加规则将单元格强制到一定高度。要垂直居中,必须将其高度降低一半,再加上字母高度的一半的补偿。
\documentclass{article}
\usepackage{calc}
\usepackage{colortbl}
\usepackage{tabu}
\usepackage{array}
%\newcolumntype{K}[1]{>{a\vbox to #1{b\vfill c}d\centering}m{#1}}
\newcolumntype{K}[1]{>{\rule[0.5\ht\strutbox-#1/2]{0pt}{#1}\centering}m{#1-2\tabcolsep}}
\begin{document}
\begin{tabu}{|[1pt]*{3}{K{10mm}|K{10mm}|[1pt]}}
\tabucline[1pt]{1-6}
0 & 4 & \i & 4 & \i & \i \\ \tabucline{1-6}
2 & 0 & \i & \i & \i & -3 \\ \tabucline[1pt]{1-6}
\i & \i & 0 & \cellcolor[gray]{0.8}3 & 5 & -1 \\ \tabucline{1-6}
4 & \i & 3 & 0 & -6 & \i \\ \tabucline[1pt]{1-6}
-3 & \i & \i & -6 & 0 & 9 \\ \tabucline{1-6}
\i & \i & -1 & 5 & 7 & 0 \\ \tabucline[1pt]{1-6}
\end{tabu}
\end{document}
答案2
根据我的回答,使用堆栈的另一种方法创建这种二进制矩阵的最佳方法是什么?。
网格厚度、颜色和大小均可在序言中预设。
\documentclass{article}
\usepackage[usestackEOL]{stackengine}
\usepackage{xcolor, graphicx}
\newsavebox{\Bbox}
\def\thk{.8pt} % RULE THICKNESS
\def\gsize{1.4cm} % GRID SIZE
\def\gridcolor{red!40}
\def\coresize{\dimexpr\gsize-2\dimexpr\thk\relax\relax}
\def\grid{\kern-\thk\fboxsep=.5\coresize\relax%
\fboxrule=\thk\relax\textcolor{\gridcolor}{\fbox{}}}
\newcommand\G[1][.]{\unskip\stackinset{c}{.0pt}{c}{-.4pt}{\scalebox{2}{$#1$}}{\grid}}
\setstackgap{S}{-\thk}
\begin{document}
\Shortstack{%
\G[0] \G[4]\G \G[4] \G \G \\
\G[2] \G[0]\G \G \G \G[-3]\\
\G \G \G[0] \G[3] \G[5] \G[-1]\\
\G[4] \G \G[3] \G[0] \G[-6]\G \\
\G[-3]\G \G \G[-6]\G[0]\G[9] \\
\G \G \G[-1]\G[5] \G[7]\G[0]
}
\end{document}