沿路径居中对齐文本修饰

沿路径居中对齐文本修饰

我尝试复制以绿色突出显示的节点,但沿着弯曲的路径。它大部分情况下都有效,但当我尝试将效果应用于时text align=centerdecoration我得到了

尺寸太大。

如果我设置 ,我会得到相当好的结果\def\Radius{2.8cm}。但是,如果我设置\def\Radius{2.6cm},我会得到与上面相同的错误。我怀疑这是因为文本不再适合给定的路径。

为了避免将来出现此问题,如果我能让其text align=center工作,我可以提供一个\path,它足以放置文本并\node分别绘制。

在此处输入图片描述

根据 AndreC 的评论,注释掉fill=yellowrounded 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

相关内容