下面是一些运行良好的代码(此代码基于这个答案):
\documentclass[tikz]{standalone}
\usetikzlibrary{matrix}
\begin{document}
\begin{tikzpicture}
\matrix [matrix of math nodes, nodes in empty cells,
nodes={align=center},
text width=.5cm,text depth=0.2cm,text height=0.3cm]
(mymatrix)
{
a & b & c & d \\
a & b & c & d \\
a & b & c & d \\
a & b & c & d \\
};
% Now some tikz styling is applied
\end{tikzpicture}
\end{document}
但是,我想将 TikZ 命令移出文档,并能够通过调用环境来调用此结构。像这样:
\documentclass[tikz]{standalone}
\usetikzlibrary{matrix}
\newenvironment{mymatrix}{%
% Some code here
}{%
% More code here
}
\begin{document}
\begin{mymatrix}
a & b & c & d \\
a & b & c & d \\
a & b & c & d \\
a & b & c & d \\
\end{mymatrix}
\end{document}
文档中使用的语法很重要,并且无法触及. (如果你想知道原因:TeX 源被传递到各种其他系统,并且对于这些系统而言,所写的内容mymatrix
必须被视为array
或tabular
环境。)
我们知道(例如这个帖子),我们不能在定义中留下不匹配的括号,所以我们显然不能将命令\matrix
放入环境定义的开头部分。
我尝试了lrbox
其他帖子中所建议的类似的东西,但它不喜欢&
分隔符(出于我认为我现在明白的原因)。
之前,我也尝试使用该tabularray
包来格式化这个类似表格的对象。它易于使用且看起来很棒,但它会导致 LaTeX 编译运行几分钟,即使在相当小的文档上也是如此,而且编译经常会完全失败(在某些机器上,它根本不起作用)。因此,我现在正在寻找使用 TikZ 的解决方案。
那么,有什么方法可以将的内容传递mymatrix
到 tikz 的参数中\matrix
吗?
答案1
你知道吗好矩阵包,你尝试过实现你的目标吗?这里有一个简短的例子:
\documentclass[multi=mymatrix]{standalone}
\usepackage{tikz}
\usepackage{nicematrix}
\newenvironment{mymatrix}{%
\begin{NiceTabular}{cccc}
\CodeBefore
\cellcolor[HTML]{FFFF88}{1-1,1-2,1-3}
\rectanglecolor{blue!15}{3-3}{4-4}
}{%
\CodeAfter
\begin{tikzpicture}
\draw (2-2) circle (2mm);
\end{tikzpicture}
\end{NiceTabular}
}
\begin{document}
\begin{mymatrix}
a & b & c & d \\
a & b & c & d \\
a & b & c & d \\
a & b & c & d \\
\end{mymatrix}
\begin{mymatrix}
a & b & c & d \\
a & b & c & d \\
a & b & c & d \\
a & b & c & d \\
\end{mymatrix}
\end{document}
如果这不是您想要的,请展示您的目标或/和代码的示例图片。您还可以描述您的表格的理想设计。也许您的设计TikZ
不需要它。TikZ