我尝试复制以绿色突出显示的节点,但沿着弯曲的路径。它大部分情况下都有效,但当我尝试将效果应用于时text align=center
,decoration
我得到了
尺寸太大。
如果我设置 ,我会得到相当好的结果\def\Radius{2.8cm}
。但是,如果我设置\def\Radius{2.6cm}
,我会得到与上面相同的错误。我怀疑这是因为文本不再适合给定的路径。
为了避免将来出现此问题,如果我能让其text align=center
工作,我可以提供一个\path
,它足以放置文本并\node
分别绘制。
根据 AndreC 的评论,注释掉fill=yellow
和rounded corners=2pt
:
\draw [draw=red,
postaction={
decoration={
text along path,
text={|+\tiny\scshape|\MyText},
raise=0.5ex,
text align=center,% <---- Uncommented
},
decorate,
},
%% No error with these commented, but results are wack!!
%fill=yellow,
%rounded corners=2pt,
]
不再导致错误。但是,我得到了以下结果:
笔记:
- 由于注释掉了,所以 MWE 会生成上面显示的图像
text align=center
。要获取栏杆盒,需要取消注释。
代码:
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{decorations}
\usetikzlibrary{decorations.text}
\newcommand{\MyText}{ABCDEF}
\tikzset{My Node Style/.style={
fill=green,
draw=red,
inner sep=2pt,
rounded corners=2pt,
font=\tiny,
}}
\begin{document}
\begin{tikzpicture}
\node [My Node Style] at (0,2.5) {\textsc{\MyText}};
\def\Radius{3.0cm}
\def\StartAngle{100}
\def\EndAngle{80}
\def\NodeThickness{1.6ex}
\draw [draw=red,
postaction={
decoration={
text along path,
text={|+\tiny\scshape|\MyText},
raise=0.5ex,
%text align=center,% <---- ????? Dimension too big ?????
},
decorate,
},
fill=yellow,
rounded corners=2pt,
]
([shift={(\StartAngle:\Radius)}]0,0)
arc [start angle=\StartAngle, end angle=\EndAngle, radius=\Radius]
-- ++(\EndAngle:\NodeThickness)
arc [start angle=\EndAngle, end angle=\StartAngle, radius=\Radius+\NodeThickness]
-- cycle
;
\end{tikzpicture}
\end{document}
答案1
问题是您的路径从左下角开始,所以当您说text align=center
您尝试将文本居中到右上角附近时。但这不是您想要的。您只想沿着底部(或顶部)弧线装饰和居中文本。
\path ...decorate{...} ...;
所以如果我们可以在后续操作中进行部分装饰那就太好了,但我们不能。
我可以想象两种解决方案。
第一个解决方案:从中间顶部圆弧开始绘制“节点”,这样路径的中心可能位于底部圆弧的中间。
\documentclass[tikz, border=7pt, convert={density=2100}]{standalone}
\usetikzlibrary{decorations.text}
\newcommand{\MyText}{ABCDEF}
\tikzstyle{My Node Style}=[
fill=green,
draw=red,
inner sep=2pt,
rounded corners=2pt,
font=\tiny,
]
\def\Radius{3.0cm}
\def\NodeThickness{1.6ex}
\def\DeltaAngle{10}
\begin{document}
\begin{tikzpicture}
\node[My Node Style] at (0,2.5) {\textsc{\MyText}};
\draw [draw=red,
postaction={
decoration={
text along path,
text={|+\tiny\scshape|\MyText},
raise=\NodeThickness/2-0.4ex,
text align=center,
},
decorate,
},
fill=yellow,
rounded corners=2pt,
]
(90:\Radius+\NodeThickness)
arc [start angle=90, end angle=90+\DeltaAngle, radius=\Radius+\NodeThickness]
-- ++(90+\DeltaAngle:-\NodeThickness)
arc [start angle=90+\DeltaAngle, end angle=90-\DeltaAngle, radius=\Radius]
-- ++(90-\DeltaAngle:\NodeThickness)
arc [start angle=90-\DeltaAngle, end angle=90, radius=\Radius+\NodeThickness]
;
\end{tikzpicture}
\end{document}
第二种解决方案:您可以先画出“节点”,然后装饰一条穿过“节点”中间的圆弧。
\documentclass[tikz, border=7pt, convert={density=2100}]{standalone}
\usetikzlibrary{decorations.text}
\newcommand{\MyText}{ABCDEF}
\tikzstyle{My Node Style}=[
fill=green,
draw=red,
inner sep=2pt,
rounded corners=2pt,
font=\tiny,
]
\def\Radius{3.0cm}
\def\NodeThickness{1.6ex}
\def\DeltaAngle{10}
\begin{document}
\begin{tikzpicture}
\node[My Node Style] at (0,2.5) {\textsc{\MyText}};
\draw [draw=red, fill=yellow,rounded corners=2pt,
]
(90+\DeltaAngle:\Radius)
arc [start angle=90+\DeltaAngle, end angle=90-\DeltaAngle, radius=\Radius]
-- ++(90-\DeltaAngle:\NodeThickness)
arc [start angle=90-\DeltaAngle, end angle=90+\DeltaAngle, radius=\Radius+\NodeThickness]
-- cycle
;
\path[decorate, decoration={
text along path,
text={|+\tiny\scshape|\MyText},
raise=-0.4ex,
text align=center
}
]
(90+\DeltaAngle:\Radius+\NodeThickness/2)
arc [start angle=90+\DeltaAngle, end angle=90-\DeltaAngle, radius=\Radius+\NodeThickness/2]
;
\end{tikzpicture}
\end{document}
注意:在第一个解决方案中我将其删除,cycle
因为在这种情况下它不能很好地工作rounded corners
。