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}