使用 TikZ 的 fit 选项拟合矩阵的内容

使用 TikZ 的 fit 选项拟合矩阵的内容

以下 LaTeX 文档保存在路径为 的文件中~/test.tex

\documentclass[tikz,border=1cm]{standalone}
\usetikzlibrary{fit}
\begin{document}

\begin{tikzpicture}
%   \matrix{
      \draw (0,0) rectangle (1,1);
%      \\
%   };
   \node[draw=red, fit={(0,0) (1,1)}] {};
\end{tikzpicture}

\end{document}

当在终端执行以下命令时:

cd ~
pdflatex 测试

在路径 处生成一个 PDF 文件~/test.pdf。在 PDF 查看器中打开时,文件显示如下:

红色的正方形

如果现在取消注释这三行,并pdflatex test重新运行该命令,则会在路径处生成一个 PDF 文件~/test.pdf。在 PDF 查看器中打开时,文件显示如下:

矩阵内的拟合正方形

为什么矩阵的引入会改变红色方块相对于黑色方块的位置?如何预测和确定红色方块相对于矩阵内容的绘制位置?

答案1

这是因为矩阵节点中的东西本质上是放置在新tikzpicture环境中的(不完全是,但我认为这样更容易理解),因此矩阵节点内的坐标系与外部系统不匹配。

您可能会注意到,黑色方块的中心位于“全局坐标” (0,0)(即相对于矩阵外部的坐标系)。这是因为您没有为矩阵指定任何坐标,这使得它默认为其(0,0)锚点,并且由于矩阵仅包含一个矩阵节点,因此该矩阵节点的中心也与此坐标对齐。这解释了为什么黑色方块位于图中的这个位置,并告诉我们它在矩阵外部系统中的坐标是,(-0.5,-0.5)(0.5,0.5)本例中是。

如果您想要fit围绕矩阵节点内部的某些事物,您需要将宏fit也放在这个矩阵节点内,或者您需要命名相关坐标以便以后能够引用它们。

当然,您也可以命名整个矩阵,这可能会有所帮助,具体取决于您想要什么fit。但请注意,矩阵默认会在其子节点周围创建一些填充。

下面的代码片段可能有助于您了解正在发生的事情以及事物的放置方式:

\documentclass[tikz,border=1cm]{standalone}
\usetikzlibrary{fit}

\begin{document}
\begin{tikzpicture}
   
    % naming the matrix as `m` for later reference
    \matrix (m) {
        \draw (0,0) rectangle (1,1);
        % using `fit` inside the matrix node
        \node[draw=yellow, fit={(0,0) (1,1)}] {};
        
        % defining coordinates inside the matrix node for later reference
        \coordinate (zero-zero inside matrix) at (0,0);
        \coordinate (one-one inside matrix) at (1,1);
        \\
    };
    
    % marking coordinate (0,0) outside of matrix
    \fill[blue] (0,0) circle[radius=2pt];
    % drawing the rectangle that the following `fit` command refers to
    \draw[lightgray] (0,0) rectangle (1,1);
    \node[draw=red, fit={(0,0) (1,1)}] {};
    
    % drawing a `fit` around the whole matrix: note the padding
    \node[draw=green, fit={(m)}] {};
    
    % drawing a `fit` around the coordinates inside the matrix node
    \node[draw=blue, dashed, fit={(zero-zero inside matrix) (one-one inside matrix)}] {};
    
    % drawing a square that matches the coordinates of the square inside the matrix node
    \draw[orange, dashed] (-0.5,-0.5) rectangle (0.5,0.5);

\end{tikzpicture}
\end{document}

在此处输入图片描述

答案2

如果问题是“如何在矩阵周围绘制边框”,则可能的解决方案是drawmatrix borderAmatrixnode包含 的a cells。 并且 的所有选项nodes都可以应用于matrix

\documentclass[tikz,border=1cm]{standalone}
\usetikzlibrary{fit}
\begin{document}

\begin{tikzpicture}
   \matrix [draw=red]{
      \draw[black] (0,0) rectangle (1,1);
      \\
   };
%   \node[draw=red, fit={(0,0) (1,1)}] {};
\end{tikzpicture}

\end{document}

在此处输入图片描述

相关内容