使用 multirow 和 smallmatrix

使用 multirow 和 smallmatrix

我想排版一堆小的 3x3 矩阵来描述某些理想的生成器,就像这张纸,第 7 页。

在此处输入图片描述

只要我只想要圆圈和项目符号,使用 smallmatrix 效果就很好,但是当我尝试使用 multirow 合并单元格并在矩阵的四个条目中放置一个正方形时,它根本不起作用。它在标准矩阵或数组环境中有效,但它们对于我的需求来说太大了。

我也尝试过如何用{array}对{smallmatrix}进行建模?但方块缩小了,看起来不太对劲。由于我不太理解该线程中的代码,我不知道如何编辑它以使其按我想要的方式工作。我认为如果我能让方块变大一点就好了。

以下是我希望说明我正在尝试做的事情的代码。 smallarray 环境直接来自我上面链接的线程。

\documentclass{article}

\usepackage{amssymb}
\usepackage{amsmath}
\usepackage{multirow}


\newcommand{\ZZ}{\multicolumn{2}{c}{\multirow{2}{*}{$\square$}}}

\newenvironment{smallarray}[1]
 {\null\,\vcenter\bgroup\scriptsize
  \renewcommand{\arraystretch}{0.7}%
  \arraycolsep=.13885em
  \hbox\bgroup$\array{@{}#1@{}}}
 {\endarray$\egroup\egroup\,\null}


\begin{document}
When there's no cells to merge, both smallmatrix (left) and smallarray (right) work fine.
\begin{equation}
 \begin{smallmatrix}
   \circ & \circ & \bullet \\
   \circ  & \circ &\bullet \\
   \circ & \circ & \circ  
 \end{smallmatrix}
\qquad
\begin{smallarray}{ccc}
   \circ & \circ & \bullet \\
   \circ  & \circ &\bullet \\
   \circ & \circ & \circ  
  \end{smallarray}
\end{equation}
But when we try to merge some cells...
\begin{equation}
 \begin{smallmatrix}
   \circ & \ZZ \\
   \circ &  &  \\
   \circ & \circ & \circ  
 \end{smallmatrix}
\qquad
\begin{smallarray}{ccc}
   \circ & \ZZ \\
   \circ  & & \\
   \circ & \circ & \circ  
  \end{smallarray}
\end{equation}
...smallmatrix just doesn't work.  The second one is almost right and I'd happily just use that, but I also need a matrix of this form:
\[\begin{smallarray}{ccc}
   \circ & \ZZ \\
   \ZZ  &\\
    &  & \circ  
  \end{smallarray}
\]

and that's really not quite right.


\end{document}

如有任何提示或建议我将不胜感激。

答案1

一个选项是使用TikZ和一个matrix of math nodes

\documentclass{article}
\usepackage{amssymb}
\usepackage{amsmath}
\usepackage{tikz}
\usetikzlibrary{matrix,calc}

\newenvironment{smallarray}[1]
  {\gdef\MatName{#1}\begin{tikzpicture}
    \matrix[
    matrix of math nodes,
    row sep=-\pgflinewidth,
    column sep=-\pgflinewidth,
    nodes={inner sep=1pt,rectangle,text width=2mm,align=center},
    text depth=0mm,
    text height=2mm,
    nodes in empty cells
    ]  (#1)}
  {\end{tikzpicture}}
\def\MyZ(#1,#2){%
  \draw ([xshift=-3.6pt,yshift=3.6pt] $ (\MatName-#1-#2)!0.5!(\MatName-\the\numexpr#1+1\relax-\the\numexpr#2+1\relax) $ ) rectangle ([xshift=3.6pt,yshift=-3.6pt] $ (\MatName-#1-#2)!0.5!(\MatName-\the\numexpr#1+1\relax-\the\numexpr#2+1\relax) $ );
}

\begin{document}

\begin{smallarray}{mat1}
{
\circ & \circ & \circ \\
\circ & \circ & \circ \\
\circ & \circ & \circ \\
};
\end{smallarray}
\begin{smallarray}{mat2}
{
\circ & \circ & \bullet \\
\circ & \circ & \bullet \\
\circ & \circ & \circ \\
};
\end{smallarray}

\begin{smallarray}{mat3}
{
\circ & & \\
\circ & & \\
\circ & \circ & \circ \\
};
\MyZ(1,2)
\end{smallarray}
\begin{smallarray}{mat4}
{
\circ & & \\
 & & \\
 & & \circ \\
};
\MyZ(1,2)
\MyZ(2,1)
\end{smallarray}

\end{document}

在此处输入图片描述

环境smallarray有一个强制参数,将用作矩阵的名称;图像中的第二个矩阵是使用以下命令生成的:

\begin{smallarray}{mat2}
{
\circ & \circ & \bullet \\
\circ & \circ & \bullet \\
\circ & \circ & \circ \\
};
\end{smallarray}

\MyZ允许绘制正方形;语法是

\MyZ(x,y)

其中x,y是正方形左上角的入口。

相关内容