函数中嵌套数组出错

函数中嵌套数组出错
\usetikzlibrary{calc}
\newcommand{\matmul}[3]{%
\foreach \i [count=\ci] in {#3}{%
\foreach \j [count=\cj] in {#2}{%
\pgfmathparse{{\i}[0]*{\j}[0]+{\i}[1]*{\j}[1]+{\i}[2]*{\j}[2]}%
\ifnum\cj=1%
\xdef\temp{\pgfmathresult}%
\else
\xdef\temp{\temp,\pgfmathresult}%
\fi
}%
\ifnum\ci=1%
\xdef#1{{\temp}}%
\else
\xdef#1{#1,{\temp}}%
\fi
}%
}
\def\rotationX{{1,2,3},{4,5,6}}
\matmul{\yeet}{{\rotationX}}{{1,2,3},{1,2,3}}
$\yeet$

这是将矩阵相乘的代码。当我尝试使用 \rotationX 作为矩阵列表之一来运行它时,它给出了此错误:

! Missing number, treated as zero.
<to be read again> 
                   {
l.86 \matmul{\yeet}{{\rotationX}}{{1,2,3},{1,2,3}}

A number should have been here; I inserted `0'.
(If you can't figure out why I needed to see a number,
look up `weird error' in the index to The TeXbook.)

如果它使用嵌套数组来运行,例如:

\matmul{\yeet}{{1,2,3},{1,2,3}}{{4,5,6},{4,5,6}}$\yeet$

它完全没问题并返回:

32.0,32.0,32.0,32.0

仅供参考,我正在使用 discord 机器人来做我的 tikz,所以我不使用 \begin{document},因为我不知道如何编译 tikz

答案1

我想我们正在讨论这个问题。应对不同的用例总是有挑战的。在这方面,扩大论点是有效的。

\documentclass{article}
\usepackage{pgffor}
\newcommand{\matmul}[3]{%
\begingroup\edef\matA{#2}%
\edef\matB{#3}%
\foreach \i [count=\ci] in \matB{%
\foreach \j [count=\cj] in \matA{%
\pgfmathparse{{\i}[0]*{\j}[0]+{\i}[1]*{\j}[1]+{\i}[2]*{\j}[2]}%
\ifnum\cj=1%
\xdef\temp{\pgfmathresult}%
\else
\xdef\temp{\temp,\pgfmathresult}%
\fi
}%
\ifnum\ci=1%
\xdef#1{{\temp}}%
\else
\xdef#1{#1,{\temp}}%
\fi
}\endgroup%
}
\begin{document}
\edef\rotationX{{1,2,3},{4,5,6}}
\matmul{\yeet}{\rotationX}{{1,2,3},{1,2,3}}
$\yeet$
\end{document}

在此处输入图片描述

相关内容