将文本宽度添加到节点坐标?

将文本宽度添加到节点坐标?

我目前正在尝试将一些文本放置在绘制的正方形的中心tikzpicture,如下所示:

示例图片

然而,我遇到了一点麻烦。

请看以下示例:

\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage{graphicx}
\usepackage{tikzpagenodes}
\usepackage{tikz}
\usepackage{calc}
\usepackage{layouts}

\begin{document}

\begin{tikzpicture}[overlay, remember picture, x=1cm, y=1cm]
    \newcommand{\boxWidth}{5cm};
    \newcommand{\boxHeight}{3cm};
    \newcommand{\boxPosX}{5cm};
    \newcommand{\boxPosY}{-5cm};

    \newcommand{\someText}{Hello World};
    \newcommand{\textPosX}{\boxPosX + (\printinunitsof{cm}\widthof{\someText}/2)};
    \newcommand{\textPosY}{\boxPosY + \boxHeight / 2};

    \draw [line width=0.05cm, rounded corners=.3cm, color=red] (\boxPosX,\boxPosY) rectangle ++(\boxWidth, \boxHeight);

    \node at (\textPosX, \textPosY) {\someText};
\end{tikzpicture}

\end{document}

当我尝试使用文本的宽度时,问题出现了:(\widthof{\someText}/2来自calc包)。(参考帖子

根据同一参考帖子\widthof返回长度,这与厘米。因此,我尝试使用描述的方法将其转换为厘米这里\printinunitsof{cm}\widthof{\someText}

然而,这仍然会产生“非法计量单位(插入pt)。”

我做错了什么以及如何正确地转换我的单位厘米

答案1

从你的代码中我大概知道你可能想要什么:

\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage{tikzpagenodes}
\usepackage{calc}
\usepackage{layouts}

\begin{document}

\begin{tikzpicture}[overlay, remember picture, x=1cm, y=1cm]
    \newcommand{\boxWidth}{5cm};
    \newcommand{\boxHeight}{3cm};
    \newcommand{\boxPosX}{5cm};
    \newcommand{\boxPosY}{-5cm};

    \newcommand{\someText}{Hello World};
    \node[draw,line width=0.05cm, rounded corners=.3cm, color=red,
    minimum width=\boxWidth,minimum height=\boxHeight,text=black] at 
    ({\boxPosX},{\boxPosY}) {\someText};
\end{tikzpicture}

\end{document}

在此处输入图片描述

而不是\newcommand使用\pgfmathsetmacro进行计算,例如\pgfmathsetmacro{\textPosX}{\boxPosX + width("\someText")*1pt/2cm};。但是,我认为这里所有复杂的计算都是不必要的。要将文本放在框的中心,只需说\node[draw]{text}。然后您可以进行各种 spirifankerln,例如添加minimum widthrounded corners

答案2

如果要将文本放置在矩形的中心,只需将其放置在midway路径下方的节点上。

\draw [line width=0.05cm, rounded corners=.3cm, color=red] 
(\boxPosX,\boxPosY) rectangle ++(\boxWidth, \boxHeight)node[midway,text=black]{\someText};

长方形

\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage{graphicx}
\usepackage{tikzpagenodes}
\usepackage{tikz}
\usepackage{calc}
\usepackage{layouts}

\begin{document}

\begin{tikzpicture}[overlay, remember picture, x=1cm, y=1cm]
    \newcommand{\boxWidth}{5cm};
    \newcommand{\boxHeight}{3cm};
    \newcommand{\boxPosX}{5cm};
    \newcommand{\boxPosY}{-5cm};

    \newcommand{\someText}{Hello World};
   %\newcommand{\textPosX}{\boxPosX + (\printinunitsof{cm}\widthof{\someText}/2)};
   %\newcommand{\textPosY}{\boxPosY + \boxHeight / 2};

\draw [line width=0.05cm, rounded corners=.3cm, color=red] 
(\boxPosX,\boxPosY) rectangle ++(\boxWidth, \boxHeight)node[midway,text=black]{\someText};

\end{tikzpicture}

\end{document}

答案3

这只是另一种方法。如果您已经绘制了一些矩形(不是节点),则可以使用fit包含矩形角的节点并在其中心添加标签:

\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage{graphicx}
\usepackage{tikzpagenodes}
\usepackage{tikz}
\usepackage{calc}
\usepackage{layouts}
\usetikzlibrary{fit}
\begin{document}

\begin{tikzpicture}[overlay, remember picture, x=1cm, y=1cm]
    \newcommand{\boxWidth}{5cm};
    \newcommand{\boxHeight}{3cm};
    \newcommand{\boxPosX}{5cm};
    \newcommand{\boxPosY}{-5cm};

    \newcommand{\someText}{Hello World};
%    \newcommand{\textPosX}{\boxPosX + (\printinunitsof{cm}\widthof{\someText}/2)};
%    \newcommand{\textPosY}{\boxPosY + \boxHeight / 2};

    \draw [line width=0.05cm, rounded corners=.3cm, color=red] (\boxPosX,\boxPosY) rectangle ++(\boxWidth, \boxHeight);

    \node[fit={(\boxPosX,\boxPosY) (\boxPosX+\boxWidth,\boxPosY+\boxHeight)},  label=center:\someText] {};

    \draw [line width=0.05cm, rounded corners=.3cm, color=green] (-2,-5) coordinate (1) rectangle ++(5,2) coordinate (2);

    \node[fit={(1) (2)},  label=center:\someText] {};

\end{tikzpicture}

\end{document}

在此处输入图片描述

相关内容