我目前正在尝试将一些文本放置在绘制的正方形的中心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 width
等rounded 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}