2つのtikzパス間でテキストを自動的に分割する

2つのtikzパス間でテキストを自動的に分割する

カスタムシェイプを作成し、その中にテキストを配置する必要があります。しかし、問題は、テキストが装飾されたパスの長さに収まらないことです。そのため、テキストを 2 つまたは 3 つのパスに自動的に分割する方法が必要です。

これが私の図形と線で、その中にテキストを配置する場所です。 ここに画像の説明を入力してください

この形状は次のコードで生成します。

\begin{tikzpicture}

% shape
\draw (0,0) ++ (45:3) arc (45:135:3);
\draw (0,0) ++ (45:5) arc (45:135:5);
\draw (45:3) -- (45:5);
\draw (135:3) -- (135:5);

%lines for text
\draw (0,0) ++ (50:3.5) arc (50:130:3.5);
\draw (0,0) ++ (50:4) arc (50:130:4);
\draw (0,0) ++ (50:4.5) arc (50:130:4.5);

\end{tikzpicture}

パス装飾を使用して、この行にテキストを配置する予定です。

\path[
  postaction={
    decorate,
    decoration={
      text along path,
      reverse path=true,
      text={very long long text, which don't fit the shape boundaries}
    }
  }
] (0,0) ++ (50:4.5) arc (50:130:4.5);

しかし、テキストが長い場合は、提供されたスペースに収まりません。

ここに画像の説明を入力してください

したがって、提供されたスペースを計算し、テキストを複数のパスに分割する方法を見つける必要があります。何か提案はありますか?

答え1

単一のパス(複数のセグメントを含む)を使用できます。(「バグ」に注意してください: TikZ は各セグメントを逆の順序で使用します...)

ここに画像の説明を入力してください

\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{decorations.text}
\begin{document}
\begin{tikzpicture}
% shape
\draw (0,0) ++ (45:3) arc (45:135:3);
\draw (0,0) ++ (45:5) arc (45:135:5);
\draw (45:3) -- (45:5);
\draw (135:3) -- (135:5);

%lines for text
\draw[blue] (0,0) ++ (50:3.5) arc (50:130:3.5);
\draw (0,0) ++ (50:4) arc (50:130:4);
\draw (0,0) ++ (50:4.5) arc (50:130:4.5);

% text along path
\path[
postaction={
  decorate,
  decoration={
    text along path,
    reverse path=true,
    text={Very long long text, which don't fit the shape boundaries
      and so on. Very long long text... Very long text...}
  }
}
]
(0,0) ++ (50:3.5) arc (50:130:3.5)
(0,0) ++ (50:4) arc (50:130:4)
(0,0) ++ (50:4.5) arc (50:130:4.5);
\end{tikzpicture}
\end{document}

reverse pathここでは、オプションなし(「バグ」を回避するため)となし(0,0)(境界ボックスに形状を合わせるため)の完全なソリューションを示します。

\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{decorations.text}
\begin{document}
\begin{tikzpicture}
  % shape
  \draw (45:3) arc (45:135:3)
  -- (135:5)  arc (135:45:5)
  -- cycle;

  % lines for text
  \draw
  (50:3.5) arc (50:130:3.5)
  (50:4) arc (50:130:4)
  (50:4.5) arc (50:130:4.5);

  % text along path
  \path[postaction={decorate,decoration={
      text along path,
      text={Very long long text, which don't fit the shape boundaries
        and so on. Very long long text... Very long text...}
    }}]
  (130:4.5) arc (130:50:4.5)
  (130:4) arc (130:50:4)
  (130:3.5) arc (130:50:3.5);
\end{tikzpicture}
\end{document}

ここに画像の説明を入力してください

関連情報