我正在编写一份 latex 文档,并使用了大量矩阵示例,其中每个条目都是\ast
。我想编写一个宏来自动为我创建这样的矩阵。因此,这看起来像
\newcommand{\myAsteriskMatrix}[2]{magic}
其中两个输入是行数和列数。
我碰巧正在使用这个nicematrix
包,所以一个典型的矩阵看起来像这样:
\documentclass{standalone}
\usepackage{nicematrix}
\begin{document}
$
\begin{bNiceMatrix}[r]
\ast & \ast & \ast \\
\ast & \ast & \ast
\end{bNiceMatrix}
$
\end{document}
这个矩阵可以通过 生成\myAsteriskMatrix{2}{3}
,但我不知道如何编写这个宏!有什么想法吗?
答案1
答案2
没有。如果您在 2020-10-01 版本之前运行 LaTeX,则nicematrix
可能需要添加。\usepackage{xparse}
\documentclass{article}
\usepackage{amsmath}
\ExplSyntaxOn
\NewDocumentCommand{\automatrix}{O{*}mmm}
{% #1 = symbol (default *), #2 = delimiter, #3 = rows, #4 = columns
\int_compare:nT { #4 > \value{MaxMatrixCols} } { \setcounter{MaxMatrixCols}{#4} }
\begin{#2matrix}
\prg_replicate:nn { #3 }
{
{#1} \prg_replicate:nn { #4 - 1 } { & #1 } \\
}
\end{#2matrix}
}
\ExplSyntaxOff
\begin{document}
\[
\automatrix{p}{2}{3}
\ne
\automatrix[+]{b}{3}{2}
\]
\end{document}
答案3
在 OpTeX 中,我们可以定义:
\def\repmatrix#1x#2 #3{
\left(\vcenter{
\table{#2c}{\fornum 1..#1 \do {\fornum 1..#2-1 \do{#3&}#3\cr}}}
\right)
}
$$
\repmatrix 2x3 {*} \not= \repmatrix 3x5 {*} \not= \repmatrix 2x2 {$Z$}
$$
\bye
答案4
如果您是 Emacs 用户,您可以创建一个 elisp 函数来为您选择的矩阵生成乳胶代码;(您可以使用任何算法语言执行相同的操作,但在 emacs 中嵌入了 Elisp)
(defun matrice(type symb nrows ncolumns)
"compose a LaTeX matrice type TYPE filling symbol SYMB
number of rows NROWS number of columns NCOLUMS "
(concat
(format "\\begin{%s}\n" type)
(mapconcat (lambda (j)(concat
(mapconcat
(lambda(i) (format " %s " symb))
(number-sequence 1 ncolumns)"&")
"\\\\") )
(number-sequence 1 nrows)"\n")
(format "\n\\end{%s}\n" type)))
要插入矩阵,只需在下一行输入(Cx Ce)
%(插入(矩阵'pmatrix'* 3 5))
\documentclass{article}
\usepackage{amsmath}
\begin{document}
% (insert(matrice 'pmatrix '* 3 5))
\[
\begin{pmatrix}
* & * & * & * & * \\
* & * & * & * & * \\
* & * & * & * & * \\
\end{pmatrix}
\]
\end{document}