![绘制由对角坐标定义的矩形节点,文本垂直居中](https://linux22.com/image/315197/%E7%BB%98%E5%88%B6%E7%94%B1%E5%AF%B9%E8%A7%92%E5%9D%90%E6%A0%87%E5%AE%9A%E4%B9%89%E7%9A%84%E7%9F%A9%E5%BD%A2%E8%8A%82%E7%82%B9%EF%BC%8C%E6%96%87%E6%9C%AC%E5%9E%82%E7%9B%B4%E5%B1%85%E4%B8%AD.png)
我有一些坐标蒂克兹-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但这可能是库代码中的问题fit
。2
但是,您可以使用其中一个问题中找到的解决方案并使用标签。
我还认为,如果创建一个用于放置节点的新命令,使用以下语法将一个节点的 3 行代码减少到 1 行代码,会更容易:
\fnode[optional]{bottom left coord}{top right coord}{text}
输出
代码
\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}
答案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}