我正在尝试可视化一个非常大的矩阵。为此,我尝试在环境中使用\vdots
和。它可以工作,但它们无法像以前那样正确缩放。现在,在下面的最小可重现示例中,我找到了解决方法\ddots
bsmallmatrix
\cdots
这里可以,但是仅有的垂直点而不是对角点。我不明白为什么它不适用于\ddots
。
\documentclass{article}
\usepackage{mathtools}
\newcommand{\svdots}{\raisebox{3pt}{\scalebox{.75}{\vdots}}} % <- Works
\newcommand{\sddots}{\raisebox{3pt}{\scalebox{.75}{\ddots}}} % <- Do not work
\begin{document}
\begin{equation*}
\begin{bsmallmatrix}
a_{11} & a_{12} & \cdots & a_{1m} \\
a_{21} & a_{22} & \cdots & a_{2m} \\
\svdots & \svdots & \sddots & \svdots \\
a_{n1} & a_{n2} & \cdots & a_{nm}
\end{bsmallmatrix}
\end{equation*}
\end{document}
编译错误与缺少$
和括号有关。替换时文档符合要求\sddots
,\ddots
但显然 ddot 的大小不正确。
我怎样才能最好地实现我想要的结果?
答案1
以下示例重新定义\vdots
和,\ddots
以根据当前数学样式获得可调整大小的版本。点之间的垂直间距取自水平点。此外,中的点与的\ddots
垂直间距\vdots
和中水平点的水平间距相匹配\cdots
。\cdots
在右侧添加了一个细小的空间。为了在矩阵中更好地对齐,重新定义\ddots
的也添加了这个空间。
\vdots
和上方的空间不是固定的,点之间的空间用于符号上方的额外垂直空间。和比原始符号\ddots
小一点,但和的调整大小效果要好得多,如示例所示。\textstyle
\displaystyle
\scriptstyle
\scriptscriptstyle
bsmallmatrix
以下示例显示了bsmallmatrix
带有可调整大小的点的 。然后是正常的 ,bmatrix
以正常的较大样式显示符号。然后是 ,bmatrix
其中包含原始的\vdots
和\ddots
,保存在\orgvdots
和 中\orgddots
。
在示例的最后,显示了不同数学样式中符号的边界框,首先是原始符号,然后是重新定义的符号。
\documentclass{article}
\usepackage{mathtools}
\usepackage{letltxmacro}
\LetLtxMacro\orgvdots\vdots
\LetLtxMacro\orgddots\ddots
\makeatletter
\DeclareRobustCommand\vdots{%
\mathpalette\@vdots{}%
}
\newcommand*{\@vdots}[2]{%
% #1: math style
% #2: unused
\sbox0{$#1\cdotp\cdotp\cdotp\m@th$}%
\sbox2{$#1.\m@th$}%
\vbox{%
\dimen@=\wd0 %
\advance\dimen@ -3\ht2 %
\kern.5\dimen@
% remove side bearings
\dimen@=\wd2 %
\advance\dimen@ -\ht2 %
\dimen2=\wd0 %
\advance\dimen2 -\dimen@
\vbox to \dimen2{%
\offinterlineskip
\copy2 \vfill\copy2 \vfill\copy2 %
}%
}%
}
\DeclareRobustCommand\ddots{%
\mathinner{%
\mathpalette\@ddots{}%
\mkern\thinmuskip
}%
}
\newcommand*{\@ddots}[2]{%
% #1: math style
% #2: unused
\sbox0{$#1\cdotp\cdotp\cdotp\m@th$}%
\sbox2{$#1.\m@th$}%
\vbox{%
\dimen@=\wd0 %
\advance\dimen@ -3\ht2 %
\kern.5\dimen@
% remove side bearings
\dimen@=\wd2 %
\advance\dimen@ -\ht2 %
\dimen2=\wd0 %
\advance\dimen2 -\dimen@
\vbox to \dimen2{%
\offinterlineskip
\hbox{$#1\mathpunct{.}\m@th$}%
\vfill
\hbox{$#1\mathpunct{\kern\wd2}\mathpunct{.}\m@th$}%
\vfill
\hbox{$#1\mathpunct{\kern\wd2}\mathpunct{\kern\wd2}\mathpunct{.}\m@th$}%
}%
}%
}
\makeatother
\begin{document}
\begin{gather*}
\begin{bsmallmatrix}
a_{11} & a_{12} & \cdots & a_{1m} \\
a_{21} & a_{22} & \cdots & a_{2m} \\
\vdots & \vdots & \ddots & \vdots \\
a_{n1} & a_{n2} & \cdots & a_{nm}
\end{bsmallmatrix}
\\
\begin{bmatrix}
a_{11} & a_{12} & \cdots & a_{1m} \\
a_{21} & a_{22} & \cdots & a_{2m} \\
\vdots & \vdots & \ddots & \vdots \\
a_{n1} & a_{n2} & \cdots & a_{nm}
\end{bmatrix}
\\
\begin{bmatrix}
a_{11} & a_{12} & \cdots & a_{1m} \\
a_{21} & a_{22} & \cdots & a_{2m} \\
\orgvdots & \orgvdots & \orgddots & \orgvdots \\
a_{n1} & a_{n2} & \cdots & a_{nm}
\end{bmatrix}
\end{gather*}
\setlength{\fboxsep}{0pt}
\setlength{\fboxrule}{.1pt}
\newcommand*{\test}[1]{%
\fbox{$#1\orgvdots$}%
\fbox{$#1\orgddots$}%
\fbox{$#1\vdots$}%
\fbox{$#1\ddots$}%
\fbox{$#1\dots$}%
\fbox{$#1\cdots$}%
\fbox{$#1\cdotp\cdotp\cdotp$}%
}
\begin{gather*}
\test{}\\
\test{\scriptstyle}\\
\test{\scriptscriptstyle}
\end{gather*}
\end{document}
答案2
您还缺少一双$...$
:
\documentclass{article}
\usepackage{mathtools}
\newcommand{\svdots}{\raisebox{3pt}{$\scalebox{.75}{\vdots}$}} % <- Works
\newcommand{\sddots}{\raisebox{3pt}{$\scalebox{.75}{$\ddots$}$}} % <- Do not work
\begin{document}
\begin{equation*}
\begin{bsmallmatrix}
a_{11} & a_{12} & \cdots & a_{1m} \\
a_{21} & a_{22} & \cdots & a_{2m} \\
\svdots & \svdots & \sddots & \svdots \\
a_{n1} & a_{n2} & \cdots & a_{nm}
\end{bsmallmatrix}
\end{equation*}
\end{document}
输出:
答案3
供参考,该软件包nicematrix
提供了同类的工具来构建带有虚线的数学矩阵,其中包括带有键的“小矩阵” small
。
\documentclass{article}
\usepackage{nicematrix}
\begin{document}
\begin{equation*}
\begin{bNiceMatrix}[small,xdots/shorten=5pt]
a_{11} & a_{12} & \Ldots & a_{1m} \\
a_{21} & a_{22} & \Ldots & a_{2m} \\
\Vdots & \Vdots & \Ddots & \Vdots \\
a_{n1} & a_{n2} & \Ldots & a_{nm}
\end{bNiceMatrix}
\end{equation*}
\end{document}