计算宏参数中字符串出现的次数并复制字符串

计算宏参数中字符串出现的次数并复制字符串

根据以下答案问题,我编写了一个宏,它返回一个点积,其中列数组的顶部与行数组的顶部正确对齐。

\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将这个计数加一,然后\\在适当的位置插入所需数量的 '。但是

  1. \\我不知道如何计算第二个参数中出现的次数

  2. 我不知道如何实现这个概念: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返回第二个参数中的项目(以\\作为分隔符)。

相关内容