答案1
实现布局目标的一种方法是使用pmatrix*
环境(为了右对齐所有列)、\hphantom
语句(根据需要加宽各个列)和\mkern
指令(对齐、和矩阵/行向量的最左侧Z
列V
)R
。
如果您不习惯在环境中使用\hphantom
指令,您可以加载包来定义宽度分别为 2、3 和 4 位的整数值列。在下面的示例中,我建议使用and而不是通常的and以避免矩阵周围的间距过大。请注意,指令将继续使用。pmatrix*
siunitx
\mleft(
\mright)
\left(
\right)
\mkern7.5mu
\documentclass{article}
\usepackage{mathtools,siunitx,array,mleftright}
\newcolumntype{i}[1]{S[table-format=#1]} % columns of right-aligned integers
\begin{document}
First method:
\begin{align*}
Z &= \begin{pmatrix*}[r]
\hphantom{000}0 & 70 & 0 & 30 & \hphantom{000}0 \\
0 & 0 & 120 & 0 & 0 \\
0 & 0 & 0 & 40 & 0 \\
0 & 0 & 0 & 0 & 70 \\
0 & 50 & 0 & 0 & 0
\end{pmatrix*} \qquad
Y = \begin{pmatrix*}[r] 0 \\ 0\\ 80 \\ 0 \\ 20 \end{pmatrix*} \\
V &= \mkern7.5mu \begin{pmatrix*}[r]
\hphantom{0}100 & \phantom{0}0 & \phantom{00}0 & \phantom{0}0 & \hphantom{000}0
\end{pmatrix*} \\
R &= \mkern7.5mu\begin{pmatrix*}[r]
5000 & \hphantom{0}0 & \hphantom{00}0 & \hphantom{0}0 & 2000
\end{pmatrix*}
\end{align*}
\bigskip
Second method:
\begin{align*}
Z &= \mleft( \begin{array}{@{}i{4}i{2}i{3}i{2}i{4}@{}}
0 & 70 & 0 & 30 & 0 \\
0 & 0 & 120 & 0 & 0 \\
0 & 0 & 0 & 40 & 0 \\
0 & 0 & 0 & 0 & 70 \\
0 & 50 & 0 & 0 & 0
\end{array} \mright) \qquad
Y = \begin{pmatrix*}[r] 0 \\ 0\\ 80 \\ 0 \\ 20 \end{pmatrix*} \\
V &= \mkern7.5mu
\mleft( \begin{array}{@{}i{4}i{2}i{3}i{2}i{4}@{}}
100 & 0 & 0 & 0 & 0
\end{array} \mright) \\
R &= \mkern7.5mu
\mleft( \begin{array}{@{}i{4}i{2}i{3}i{2}i{4}@{}}
5000 & 0 & 0 & 0 & 2000
\end{array} \mright)
\end{align*}
\end{document}
答案2
您可以使用矩阵图书馆蒂克兹以及定位库来实现这样的事情:
代码
\documentclass[tikz, border=2mm]{standalone}
\usetikzlibrary{matrix, positioning}
\begin{document}
%\matrix (m) [matrix of math nodes,left delimiter=(,right delimiter=),
% inner sep=2pt,outer sep=0pt]{
% a & b & [1em] 0 \\
% c & d & 1 \\ };
\begin{tikzpicture}
[ on grid,
inner sep=2pt,
outer sep=0pt,
minimum width=9mm,
every left delimiter/.style={xshift=3.5ex},
every right delimiter/.style={xshift=-3.5ex}
]
\matrix (R) [matrix of math nodes]
{ A & B & C & D & E \\ };
\matrix (MZ) [matrix of math nodes, left delimiter=(, right delimiter=), below=1.5cm of R]
{ 400 & 0 & 0 & 0 & 0 \\
0 & 0 & 0 & 0 & 700 \\
0 & 0 & 200 & 0 & 0 \\
0 & 300 & 0 & 0 & 0 \\
0 & 0 & 0 & 500 & 0 \\
};
\node[left=2.8cm of MZ] (Z) {$Z=$};
\matrix (C) [matrix of math nodes, left=1.2cm of Z]
{ A \\ B \\ C \\ D \\ E \\ };
\node[right=3.3cm of MZ] (Y) {$Y=$};
\matrix (MY) [matrix of math nodes, left delimiter=(, right delimiter=), right=0.9cm of Y]
{ 0 \\ 30 \\ 80 \\ 0 \\ 0 \\ };
\node[right=1.5cm of MY] (X) {$X=$};
\matrix (MX) [matrix of math nodes, left delimiter=(, right delimiter=), right=0.9cm of X]
{ 70 \\ 0 \\ 10 \\ 90 \\ 0 \\ };
\matrix (MV) [matrix of math nodes, left delimiter=(, right delimiter=), below=2cm of MZ]
{ 400 & 0 & 0 & 2000 & 0 \\ };
\node[left=2.8cm of MV] (V) {$V=$};
\matrix (MR) [matrix of math nodes, left delimiter=(, right delimiter=), below=1cm of MV]
{ 4000 & 0 & 0 & 2000 & 7000 \\ };
\node[left=2.8cm of MR] (R) {$R=$};
\end{tikzpicture}
\end{document}
输出
答案3
由于 OP 问题中的输入看起来像电子表格,因此 OP 可能更喜欢tabular
解决方案,而不是一组数学符号。唯一的调整是引入了\mybig{rows}{glyph}
制作大括号的功能。
目前,列对齐是居中的,但可以轻松自定义。已编辑以合并\arraystretch
。
\documentclass{article}
\usepackage{scalerel}
\def\myvshft{\dimexpr+.5\ht\strutbox-.5\dp\strutbox}
\newcommand\mybig[2]{\smash{\raisebox{\myvshft}{\scaleto[2ex]{\raisebox{%
-\myvshft}{#2}}{\arraystretch\dimexpr#1\normalbaselineskip}}}}
\begin{document}
\renewcommand\arraystretch{1.3}
\tabcolsep3pt
\begin{tabular}{cccccccccccccccccccc}
&&&&A&B&C&D&E\\
\\
A&&&&0&70&0&30&0&&&&&0&&&&&0\\
B&&&&0&0&120&0&0&&&&&0&&&&&0\\
C&&Z =&\mybig{5}{(}&0&0&0&40&0&\mybig{5}{)}&&
Y =&\mybig{5}{(}&0&\mybig{5}{)}&&X =&\mybig{5}{(}&0&\mybig{5}{)}\\
D&&&&0&0&0&0&70&&&&&0&&&&&0\\
E&&&&0&50&0&0&0&&&&&20&&&&&20\\
\\
&&V =&(&100&0&0&0&0&)\\
\\
&&R =&(&5000&0&0&0&2000&)\\
\end{tabular}
\end{document}