免责声明:我才刚刚开始学习 LaTeX,所以请耐心等待。
问题:我使用了很多这样的矩阵
我绝对不喜欢手动编码。明显的解决方案是使用嵌套的 for 循环,如下所示:
\begin{equation}
A =
\begin{bmatrix}
\pgfplotsforeachungrouped \m in {1,...,3}
{
\pgfplotsforeachungrouped \n in {1,...,3}
{
a_{\m,\n} &
} \\
}
\end{bmatrix}
\end{equation}
(我的想法\pgfplotsforeachungrouped
来自这个答案)不幸的是,存在两个问题:
- 和标记破坏了编译过程,
&
导致\\
pdfLaTeX 出现一堆Undefined control sequence
错误。 - 即使这可行,我仍然需要一种方法来在最后一次迭代中禁用这些标记,否则我最终会得到一个空列和一个空行。(或者甚至更糟,因为最后一个空行不包含适当数量的
&
')。
如果有适当的方法来构建这样的矩阵就足够了,尽管我仍然很好奇在 for 循环内是否可以进行 if 分支。
答案1
像往常一样,问题在于时间:循环不能在一个单元格中开始而在另一个单元格中结束。
这是一个expl3
实现。
\documentclass{article}
\usepackage{amsmath,bm}
\usepackage{xparse}
\ExplSyntaxOn
\NewDocumentCommand{\symbolicmatrix}{O{#2}mm}
{% #1 = optional number of rows (default square)
% #2 = number of columns
% #3 = symbol to repeat
\scumcoder_matrix:nnn { #1 } { #2 } { #3 }
}
\tl_new:N \l__scumcoder_matrix_body_tl
\cs_new_protected:Nn \scumcoder_matrix:nnn
{
\tl_clear:N \l__scumcoder_matrix_body_tl
\int_step_inline:nnnn { 1 } { 1 } { #1 }
{
\int_step_inline:nnnn { 1 } { 1 } { #2 - 1 }
{
\tl_put_right:Nn \l__scumcoder_matrix_body_tl { #3\sb{##1 ####1} & }
}
\tl_put_right:Nn \l__scumcoder_matrix_body_tl { #3\sb{##1 #2} \\ }
}
\begin{bmatrix}
\tl_use:N \l__scumcoder_matrix_body_tl
\end{bmatrix}
}
\ExplSyntaxOff
\begin{document}
\[
\frac{d}{dt}
\begin{bmatrix}
\bm{\varepsilon} \\
\dot{\bm{\varepsilon}} \\
\bm{\rho}
\end{bmatrix}
=
\symbolicmatrix{3}{\mathbf{F}}
\begin{bmatrix}
\bm{\varepsilon} \\
\dot{\bm{\varepsilon}} \\
\bm{\rho}
\end{bmatrix}
\]
\[
\symbolicmatrix[2]{4}{a}
\]
\end{document}