我想排版一堆小的 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
是正方形左上角的入口。