latex nicematrix——从 tikz 访问生成的节点

latex nicematrix——从 tikz 访问生成的节点

nicematrix我无法在同一环境内访问生成的 Tikz 节点,这正常吗align

例子:

\begin{align*}
    \begin{pNiceMatrix}[name=myMatrix]
        1 & 1 & 1 \\
        2 & 2 & 2 \\
    \end{pNiceMatrix}
    \begin{tikzpicture}[remember picture, overlay]
        \draw (myMatrix-1-1) -- (myMatrix-1-2);
    \end{tikzpicture}
\end{align*}

行不通,但是

\begin{align*}
    \begin{pNiceMatrix}[name=myMatrix]
        1 & 1 & 1 \\
        2 & 2 & 2 \\
    \end{pNiceMatrix}
\end{align*}
\begin{tikzpicture}[remember picture, overlay]
    \draw (myMatrix-1-1) -- (myMatrix-1-2);
\end{tikzpicture}

作品。

当人们想要align在之后停留在相同的环境中时,这有点不方便pNiceMatrix(否则在相同的环境中矩阵和下一行之间会有自由空间,并且无法在与矩阵相同的行中写入(至少在编写宏时很困难)。

有没有办法来解决这个问题?

答案1

环境{align}amsmath对其内容进行两次编译。第一次编译的目的是测量环境内容的宽度。

该包nicematrix在第一次编译期间不会创建 PGF/Tikz 节点。

但是,您可以编写一个命令,仅在第二次编译期间执行其参数:

\documentclass{article}

\usepackage{nicematrix}


\makeatletter
\ExplSyntaxOn
\NewDocumentCommand \WhenNotMeasuring { } { \legacy_if:nF {measuring@} }
\makeatother
\ExplSyntaxOff


\begin{document}

\begin{align*}
    \begin{pNiceMatrix}[name=myMatrix]
        1 & 1 & 1 \\
        2 & 2 & 2 \\
    \end{pNiceMatrix}
    \WhenNotMeasuring
      {
        \begin{tikzpicture}[remember picture, overlay]
            \draw (myMatrix-1-1) -- (myMatrix-1-2);
        \end{tikzpicture}
      }
\end{align*}

\end{document}

答案2

align*环境对其内容进行了两次排版,我相信这会导致您的问题。

最新版本的nicematrix软件包提供了一个命令\CodeAfter,这对你的情况很有帮助。请注意,你甚至可以省略该[name=myMatrix]部分。

\documentclass{article}
\usepackage{amsmath}
\usepackage{nicematrix}
\usepackage{tikz}

\begin{document}
\begin{align*}
    \begin{pNiceMatrix}
        1 & 1 & 1 \\
        2 & 2 & 2 
        \CodeAfter
        \tikz \draw (1-1) -- (1-2);
    \end{pNiceMatrix}
\end{align*}
\end{document}

相关内容