tikz / nicematrix 边界(+ tikz 坐标解释在评论中)

tikz / nicematrix 边界(+ tikz 坐标解释在评论中)

当将 a 添加tikzpicture到在矩阵外绘制线条的 a 时NiceMatrix,矩阵的“边界框”不会增加。 有办法解决这个问题吗?

梅威瑟:

\documentclass[10pt, a4paper]{article}

\usepackage{nicematrix}

\begin{document}
\begin{align*}
        \begin{pNiceMatrix}[name=mymatrix]
                1 & 1 & 1 & 1 & 1 \\
                2 & 2 & 2 & 2 & 2 \\
                3 & 3 & 3 & 3 & 3 \\
                4 & 4 & 4 & 4 & 4 \\
                5 & 5 & 5 & 5 & 5 \\
        \end{pNiceMatrix}\rightarrow
        \begin{pNiceMatrix}
                1 & 1 & 1 & 1 & 1 \\
                2 & 2 & 2 & 2 & 2 \\
                3 & 3 & 3 & 3 & 3 \\
                4 & 4 & 4 & 4 & 4 \\
                5 & 5 & 5 & 5 & 5 \\
        \end{pNiceMatrix}
\end{align*}

\begin{tikzpicture}[remember picture, overlay]
        \draw (mymatrix-1-5) -- ++(5em,0) |- (mymatrix-2-5);
\end{tikzpicture}

\end{document}

生产

重叠

我猜问题出overlay在选项上tikzpicture,但删除它时,绘图没有被放置矩阵,但仅限于下方。

答案1

您的分析是正确的,overlay这意味着边界框不会增加,但对于向之前创建的节点添加注释至关重要。但是,可以测量注释超出原始矩阵的程度,并添加相应的水平空间。

您似乎正在使用旧版本的nicematrix。这里有一些东西可以在第一个矩阵之后添加所需的水平空间。类似的方法也可用于较新的版本。由于这只是原理证明,因此我没有努力避免使用全局宏,尤其是因为在下一个版本的 pgf 中这将变得更加容易。

\documentclass[10pt, a4paper]{article}
\usepackage{mathtools}
\usepackage{nicematrix}
\usepackage{tikz}
\usetikzlibrary{calc,tikzmark}
\makeatletter% from https://tex.stackexchange.com/a/548004
\ExplSyntaxOn
\NewDocumentCommand \WhenNotMeasuring { } { \legacy_if:nF {measuring@} }
\makeatother
\ExplSyntaxOff
\makeatother
\begin{document}
\begin{align*}
        \begin{pNiceMatrix}[name=mymatrix]
                1 & 1 & 1 & 1 & 1 \\
                2 & 2 & 2 & 2 & 2 \\
                3 & 3 & 3 & 3 & 3 \\
                4 & 4 & 4 & 4 & 4 \\
                5 & 5 & 5 & 5 & 5 \\
        \end{pNiceMatrix}\tikzmark{R1}
        \WhenNotMeasuring
        {\begin{tikzpicture}[remember picture, overlay]
          \begin{scope}[local bounding box=annot]   
           \draw (mymatrix-1-5) -- ++(5em,0) |- (mymatrix-2-5);
          \end{scope}
          \path let \p1=($(pic cs:R1)-(annot.west)$),
          \p2=($(annot.east)-(annot.west)$)
           in \pgfextra{\xdef\myshift{\the\dimexpr\x2-\x1}};
        \end{tikzpicture}
        \hspace{\myshift}}
        \rightarrow
        \begin{pNiceMatrix}
                1 & 1 & 1 & 1 & 1 \\
                2 & 2 & 2 & 2 & 2 \\
                3 & 3 & 3 & 3 & 3 \\
                4 & 4 & 4 & 4 & 4 \\
                5 & 5 & 5 & 5 & 5 \\
        \end{pNiceMatrix}
\end{align*}


\begin{align*}
        \begin{pNiceMatrix}[name=myothermatrix]
                1 & 1 & 1 & 1 & 1 \\
                2 & 2 & 2 & 2 & 2 \\
                3 & 3 & 3 & 3 & 3 \\
                4 & 4 & 4 & 4 & 4 \\
                5 & 5 & 5 & 5 & 5 \\
        \end{pNiceMatrix}\tikzmark{R2}
        \WhenNotMeasuring
        {\begin{tikzpicture}[remember picture, overlay]
          \begin{scope}[local bounding box=annot]   
           \draw (myothermatrix-1-5) -- ++(5em,0) |- (myothermatrix-2-5)
           node[pos=0.25,right]{$a$};
          \end{scope}
          \path let \p1=($(pic cs:R2)-(annot.west)$),
          \p2=($(annot.east)-(annot.west)$)
           in \pgfextra{\xdef\myshift{\the\dimexpr\x2-\x1}};
        \end{tikzpicture}
        \hspace{\myshift}}
        \rightarrow
        \begin{pNiceMatrix}
                1 & 1 & 1 & 1 & 1 \\
                2 & 2 & 2 & 2 & 2 \\
                3 & 3 & 3 & 3 & 3 \\
                4 & 4 & 4 & 4 & 4 \\
                5 & 5 & 5 & 5 & 5 \\
        \end{pNiceMatrix}
\end{align*}

\end{document}

在此处输入图片描述

相关内容