我正在尝试使用符号排版跨越多维空间的向量列表
span{v_1,v_2,...,v_n}
(我还没有找到如何将其内联为渲染的乳胶)
IE:
跨度 \{ \begin{pmatrix} 1 \\ \vdots \\ \vdots \\ 1 \\ 1 \end{pmatrix}, \开始{pmatrix} 0 \\ 1 \\ \vdots \\ \vdots \\ 1 \结束{pmatrix}, \开始{pmatrix} 0 \\ 0 \\ 1 \\ \vdots \\ 1 \结束{pmatrix} \开始{矩阵} \cdots \\ \\ \ddots \\ \ddots \\ \cdots \结束{矩阵} \开始{pmatrix} 0 \\ \vdots \\ \vdots \\ 0 \\ 1 \结束{pmatrix} \}
但是第四个“矢量”仅由各种点组成,其大小与其他矢量不同,因为点比 1 或 0 占用更多的垂直空间。
我知道 LaTeX 不知道如何对齐它们,因为它们都是独立的矩阵,但我对结果不满意。有没有办法让它们都具有相同的高度?
答案1
你可能想看看easybmat
:
\documentclass{article}
\usepackage{easybmat}
%\usepackage{etex} % if you also want tikz, then you also need etex,
%\usepackage{tikz} % and they have to be loaded AFTER easybmat
\newenvironment{bvec}[1]{\begin{BMAT}(r)[0pt]{c}{#1}}{\end{BMAT}}
\newenvironment{pbvec}[1]{\left(\begin{bvec}{#1}}{\end{bvec}\right)}
\begin{document}
$span \{
\begin{pbvec}{ccccc} 1 \\ \vdots \\ \vdots \\ 1 \\ 1 \end{pbvec},
\begin{pbvec}{ccccc} 0 \\ 1 \\ \vdots \\ \vdots \\ 1 \end{pbvec},
\begin{pbvec}{ccccc} 0 \\ 0 \\ 1 \\ \vdots \\ 1 \end{pbvec}
\begin{bvec}{ccccc} \cdots \\ {} \\ \ddots \\ \ddots \\ \cdots \end{bvec}
\begin{pbvec}{ccccc} 0 \\ \vdots \\ \vdots \\ 0 \\ 1 \end{pbvec}
\}$
\end{document}
结果是
有一些烦人的事情BMAT
:
- 您必须在顶部声明列数(我不知道为什么,但我猜这与它们可以以不同的方式对齐或其他原因有关)
- 不能有空行(参见
{}
第四行)。
答案2
我想稍微扩展一下 Yossi 的回答。如果你看一下他提供的图像,你就会发现和\vdots
相当\ddots
低;它们看起来不是垂直居中的。原因似乎是\vdots
plain.tex 中的定义和BMAT
不能很好地协同工作:{ccccc}
Yossi 的回答中的部分意味着向量中的所有 5 个条目都是垂直居中,并且普通的 TeX 定义\vdots
是
\def\vdots{\vbox{\baselineskip4\p@ \lineskiplimit\z@
\kern6\p@\hbox{.}\hbox{.}\hbox{.}}}
因此,这\vdots
是一个包含 6pt 白色空间和 3 个均匀分布的点的垂直框,并且这些点在矢量中的位置太低也不足为奇BMAT
。我仍然不太明白为什么 \vdots
定义如下,但是做与普通的 TeX 配合得很好\pmatrix
。在下图中,你可以比较\pmatrix{1\cr \vdots\cr \vdots\cr 1\cr 1}
普通的 TeX、\begin{pmatrix} 1 \\ \vdots \\ \vdots \\ 1 \\ 1 \end{pmatrix}
amsmath 和 Yossi 生成的矢量pbvec
:
不幸的是,我无法解释所有差异。对我来说,普通的 TeX 向量看起来最好,即使我希望括号更靠近数字,就像在其他向量中一样。要获得类似的结果BMAT
,它确实不是帮助使用“t”或“b”代替“c”,这将提供“顶部”或“底部”垂直对齐。我唯一的想法是定义垂直居中\vdots
,所以这是我建议的解决方案:
\documentclass{article}
\usepackage{amsmath,easybmat}
\newcommand*{\bvector}[1]{\begin{BMAT}(r)[0pt]{c}{ccccc}#1\end{BMAT}}
\newcommand*{\pbvector}[1]{\left(\bvector{#1}\right)}
\makeatletter
\def\vcdots{\vbox{\baselineskip4\p@ \lineskiplimit\z@
\kern3\p@\hbox{.}\hbox{.}\hbox{.}\kern3\p@}}
\makeatother
\begin{document}
$\operatorname{span} \{
\pbvector{ 1 \\ \vcdots \\ \vcdots \\ 1 \\ 1 },
\pbvector{ 0 \\ 1 \\ \vcdots \\ \vcdots \\ 1 },
\pbvector{ 0 \\ 0 \\ 1 \\ \vcdots \\ 1 }
\bvector{ \cdots \\ {} \\ \ddots \\ \ddots \\ \cdots }
\pbvector{ 0 \\ \vcdots \\ \vcdots \\ 0 \\ 1 }
\}$
\end{document}
请注意,我没有改变\ddots
,所以它们比低一点\vdots
,但当然这也可以修复。
最后再解释一下为什么会产生所需的对齐:我认为它将向量中所有条目的高度设置为它在向量中找到的最大高度。所以在这里它是有效的,因为对于所有向量来说,这个最大高度都是相同的。如果在第三个向量中用 0BMAT
替换,那就大错特错了。\vcdots
答案3
我一直在纯文本中玩弄这个问题,想知道你对此有何感想:
span $
\def\svdots{\lower1pt\hbox{$\smash\vdots$}}
\def\sddots{\lower1pt\hbox{$\smash\ddots$}}
\{
\pmatrix{1\cr \svdots\cr \svdots\cr 1\cr 1},
\pmatrix{0\cr 1\cr \svdots\cr \svdots\cr 1},
\pmatrix{0\cr 0\cr 1\cr \svdots\cr 1}
\matrix {\cdots\cr \cr \sddots\cr \sddots\cr \cdots\cr}
\pmatrix{0\cr \svdots\cr \svdots\cr 0\cr 1}
\}$
\bye
答案4
您可以使用{NiceMatrix}
of来实现这nicematrix
一点(虚线效果完美)。您至少需要 v. 5.15 (2021-04-25)。
\documentclass{article}
\usepackage{nicematrix}
\begin{document}
$
\text{span}
\{
\begin{NiceArray}{(c)c(c)c(c)c(c)}[xdots/shorten=5pt,baseline=3,nullify-dots]
1 & & 0 & & 0 & \cdots & 0 \\
\Vdots & & 1 & & 0 & & \Vdots \\
& , & \Vdots & , & 1 & & \\
1 & & & & \Vdots & & 0 \\
1 & & 1 & & 1 & \cdots & 1 \\
\CodeAfter [xdots/shorten=15pt]
\line{2-5}{4-7}
\line{3-5}{5-7}
\end{NiceArray}
\}
$
\end{document}