绘制由对角坐标定义的矩形节点,文本垂直居中

绘制由对角坐标定义的矩形节点,文本垂直居中

我有一些坐标-picture,我想绘制一些由两个相对角坐标定义的矩形。我发现最简单的方法是使用这个答案:通过指定两个相对的角在 tikz 中放置一个矩形节点.然而我无法获取文本垂直和水平居中在绘制的矩形内。

tikzset{...}我摆弄了我的和属性内的各种锚点text centered,但它们似乎都只影响框,而不影响文本。


梅威瑟:

\documentclass{standalone}

\usepackage{tikz}
\usetikzlibrary{fit}
\tikzset{
    block/.style 2 args = {
        draw, line width = 1pt, inner sep=0pt, outer sep=0pt,
        fit=(#1) (#2),}
}


\begin{document}

    \begin{tikzpicture}[x=1mm,y=1mm]

    \draw[step=1cm,gray,very thin] (-10,-10) grid (70,70);

    \coordinate[](0_r1) at (0,22.5);
    \coordinate[](0_r2) at (0,42);
    \coordinate[](0_r3) at (0,49);

    \coordinate[](b1_r2) at (14.4,42);
    \coordinate[](b1_r3) at (14.4,49);
    \coordinate[](b1_r4) at (14.4,59,0);

    \node[block={0_r1}{b1_r2}] {$R_{mki1}$};
    \node[block={0_r2}{b1_r3}] {$R_{mr1}$};
    \node[block={0_r3}{b1_r4}] {$R_{mko1}$};

    \end{tikzpicture}

\end{document}

在此处输入图片描述

我愿意尝试其他绘制矩形的方法,但它们需要通过预定义坐标进行定义。此外,我需要改变每个矩形的线条样式和填充,因此我希望tikzset尽可能保持简单并在外部定义这些属性。

答案1

这是一个已知问题,之前已经处理过1但这可能是库代码中的问题fit2

但是,您可以使用其中一个问题中找到的解决方案并使用标签。

我还认为,如果创建一个用于放置节点的新命令,使用以下语法将一个节点的 3 行代码减少到 1 行代码,会更容易:

\fnode[optional]{bottom left coord}{top right coord}{text}

输出

图1

代码

\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{fit}

\tikzset{
    block/.style 2 args = {
        draw, line width=1pt, inner sep=0, outer sep=0,
        fit=(#1) (#2)}
}

\newcommand{\fnode}[4][]{
    \coordinate (bottom left) at (#2);
    \coordinate (top right) at (#3);
     \node[block={bottom left}{top right}, #1, label=center:#4] {};
}

\begin{document}
\begin{tikzpicture}[x=1mm,y=1mm]

\draw[step=1cm,gray,very thin] (-10,-10) grid (70,70);

\fnode{0,22.5}{14.4,42}{$R_{mki1}$}
\fnode{0,42}{14.4,49}{$R_{mr1}$}
\fnode{0,49}{14.4,59}{$R_{mko1}$}

\end{tikzpicture}
\end{document}

1:通过 fit 定位节点:如何使节点文本居中?
2:Tikz 的垂直文本位置错误

答案2

只要您的文本不太长,这种方法就可以完美运行。

\documentclass[tikz, border=6mm]{standalone}

\begin{document}
  \begin{tikzpicture}[x=1mm, y=1mm]
    \coordinate[](0_r1) at (0,22.5);
    \coordinate[](0_r2) at (0,42);
    \coordinate[](0_r3) at (0,49);

    \coordinate[](b1_r2) at (14.4,42);
    \coordinate[](b1_r3) at (14.4,49);
    \coordinate[](b1_r4) at (14.4,59,0);

    \draw (0_r1) rectangle (b1_r2) node [pos=.5] {$R_{mki1}$};
    \draw (0_r2) rectangle (b1_r3) node [pos=.5] {$R_{mr1}$};
    \draw (0_r3) rectangle (b1_r4) node [pos=.5] {$R_{mko1}$};
  \end{tikzpicture}
\end{document}

渲染图像

相关内容