创建环境,其内容传递给 tikz-matrix

创建环境,其内容传递给 tikz-matrix

下面是一些运行良好的代码(此代码基于这个答案):

\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必须被视为arraytabular环境。)

我们知道(例如这个帖子),我们不能在定义中留下不匹配的括号,所以我们显然不能将命令\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

相关内容