是否有已知的方法可以构建创建动态大小数组的宏?

是否有已知的方法可以构建创建动态大小数组的宏?

我希望能够编写一个命令,该命令基本上接受两个参数,即行数和列数,创建一个指定维度的数组,然后允许可变数量的参数作为数组中的条目。

我曾尝试自己使用嵌套条件编写这样的命令,但很快意识到我对 LaTeX 的理解还不够深入,甚至不知道可变参数命令是否可行。因此,我当然还不明白如何构建一个。

这可能是一个愚蠢的任务,但至少我想尝试构建这样的东西或知道为什么它不能完成。

答案1

您确实想说下面这样的话吗?

\makematrix{2}{5}{1}{3}{7}{-1}{2}{0}{-3}{3}{4}{5}

根据你的问题,这应该是你想要的输入样式。也许可以通过使用换行符来改进

\makematrix{2}{5}
  {1}{3}{7}{-1}{2}
  {0}{-3}{3}{4}{5}

但我不认为这是很大的改进

\begin{bmatrix}
  1 &  3 & 7 & -1 & 2 \\
  0 & -3 & 3 &  4 & 5
\end{bmatrix}

你?

好的,这不是 CAS 软件使用的风格。我们可以这样做吗?

\makematrix{1,3,7,-1,2;0,-3,3,4,5}

当然如此。可选参数\makematrix设置分隔符(默认为b;如果愿意,可以p默认更改);强制参数包含矩阵条目,行用分号分隔,同一行中的条目用逗号分隔。

\documentclass{article}
\usepackage{amsmath}

\ExplSyntaxOn

\NewDocumentCommand{\makematrix}{O{b}m}
 {
  \hpecoraro_matrix_make:nn { #1 } { #2 }
 }

\seq_new:N \l__hpecoraro_matrix_rows_seq

\cs_new_protected:Nn \hpecoraro_matrix_make:nn
 {
  \seq_set_split:Nnn \l__hpecoraro_matrix_rows_seq { ; } { #2 }
  \begin{#1matrix}
  \seq_map_function:NN \l__hpecoraro_matrix_rows_seq \__hpecoraro_matrix_dorow:n
  \end{#1matrix}
 }

\cs_new_protected:Nn \__hpecoraro_matrix_dorow:n
 {
  \clist_use:nn { #1 } { & } \\
 }

\ExplSyntaxOff

\begin{document}

Brackets
\[
\makematrix{1,3,7,-1,2;0,-3,3,4,5}
\]

Parentheses
\[
\makematrix[p]{1,3,7,-1,2;0,-3,3,4,5}
\]

\end{document}

在此处输入图片描述

答案2

这不使用任何宏并且需要用 进行编译knitr,但是输入起来相对简单,并且具有使 R 矩阵形成任何序列(向量)或数据框非常容易的优点。

姆韦


Example.Rnw文件:


\documentclass{article}
\begin{document}

<<echo=F>>=
library(xtable)
@


<<printmatrix,include=FALSE>>=
M <- function(x=c(1,2,3),y=1){
  z <- xtableMatharray(matrix(x,nrow=y), digits = 2, auto = F)
  print(z)
  }
W <- M()
@ 

Default matrix: 


\[A_{1\times 3}=\left[\Sexpr{W}\right]\]

Custom matrices: 

<<foo,include=FALSE>>=
W <- M(x=c(1.348,2,3.555,4.7800,5,6,7,8),y=2)
@ 

\[A_{2\times 4}=\left[\Sexpr{W}\right]\]

<<bah,include=FALSE>>=
W <- M(x=rnorm(25,2,1),y=5)
@ 

\[A_{5\times 5}=\left[\Sexpr{W}\right]\]

<<baz,include=FALSE>>=
W <- M(x=c("foo","bar","baz","end"),y=2)
@ 

\[A_{2\times 2}=\left[\Sexpr{W}\right]\]


\end{document}

相关内容