根据以下答案这问题,我编写了一个宏,它返回一个点积,其中列数组的顶部与行数组的顶部正确对齐。
\documentclass{amsart}
\newcommand{\myDotProduct}[3]{
\begin{array}{@{}c@{}}
\begin{bmatrix}
#1
\end{bmatrix} #3
\end{array}
\begin{bmatrix}
#2
\end{bmatrix}
\mathstrut
}
\begin{document}
\begin{align*}
\myDotProduct{a & b}{z_1 \\ z_2}{\\ \\}
\end{align*}
\end{document}
这将是很多\\
如果我能消除第三个参数,那就更令人满意了,方法是计算第二个参数中出现的 '的数量,然后使用\expr
将这个计数加一,然后\\
在适当的位置插入所需数量的 '。但是
\\
我不知道如何计算第二个参数中出现的次数我不知道如何实现这个概念:
n
输出\\
如果 (1) 没有答案,但是 (2) 有答案,那么第二最佳解决方案就是用 替换{\\ \\}
上述宏中的第三个参数{2}
,然后使用 (2) 的答案完成其余操作。
答案1
那其他的呢?与其插入适当数量的\\
作为第一的矩阵,对齐第二op处的矩阵t
使用adjustbox
:
\documentclass{amsart}
\usepackage{adjustbox}
\newcommand{\myDotProduct}[3]{%
\begin{array}{@{}c@{}}
\begin{bmatrix}
#1
\end{bmatrix} #3
\end{array}
\begin{bmatrix}
#2
\end{bmatrix}
\mathstrut
}
\newcommand{\newDotProduct}[2]{%
\begin{bmatrix}
#1
\end{bmatrix}
\adjustbox{valign=t}{$\begin{bmatrix}
#2
\end{bmatrix}$}
}
\begin{document}
\[
\myDotProduct{a & b & c}{z_1 \\ z_2 \\ z_3 \\ z_4}{\\ \\ \\ \\}
\]
\[
\newDotProduct{a & b & c}{z_1 \\ z_2 \\ z_3 \\ z_4}
\]
\end{document}
答案2
这方面很糟糕,但你是判断者。你可以使用以下方法,而不必执行复杂操作delarray
:
\documentclass{amsart}
\usepackage{delarray}
\makeatletter
\newcommand{\myDotProduct}[2]{%
\begin{array}{@{}c@{}}
\begin{bmatrix}#1\end{bmatrix}%
\begin{array}[t]\lbrack{@{}c@{}}\rbrack#2\end{array}
\end{array}
}
\makeatother
\begin{document}
\begin{equation*}
x=\myDotProduct{a & b}{z_1 \\ z_2}+
\myDotProduct{a & b & c}{u \\ v \\ w}
\end{equation*}
\end{document}
外部array
确保全局垂直居中。
如果你想进行计数:
\documentclass{amsart}
\usepackage{xparse}
\ExplSyntaxOn
\NewDocumentCommand{\myDotProduct}{mm}
{
\seq_set_split:Nnn \l_tmpa_seq { \\ } { #2 }
\begin{array}{@{}c@{}}
\begin{bmatrix} #1 \end{bmatrix}
\prg_replicate:nn { \seq_count:N \l_tmpa_seq } { \\ }
\end{array}
\begin{bmatrix} #2 \end{bmatrix}
\mathstrut
}
\ExplSyntaxOff
\begin{document}
\begin{equation*}
x=\myDotProduct{a & b}{z_1 \\ z_2}+
\myDotProduct{a & b & c}{u \\ v \\ w}
\end{equation*}
\end{document}
该函数\seq_count:N \l_tmpa_seq
返回第二个参数中的项目(以\\
作为分隔符)。