Take the 2-minute tour ×
TeX - LaTeX Stack Exchange is a question and answer site for users of TeX, LaTeX, ConTeXt, and related typesetting systems. It's 100% free, no registration required.

I make a custom shape and I need to put a text inside it. But problem is that my text didn't fit the length of decorated path. So, I need a way to automatically divide text between two or three paths.

So, this is my shape and lines inside it is a place where I want to put my text: enter image description here

I generate this shape with the following code:

\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}

I plan to put text to this lines using the path decoration:

\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);

But if the text is long, it's don't fit the provided space.

enter image description here

So I have to find a way to calculate a provided space and then divide the text between the several paths. Any suggestions?

share|improve this question

1 Answer 1

up vote 8 down vote accepted

You can use a single path (with several segments). (Note the "bug": TikZ uses each segment in reverse order...)

enter image description here

\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}

Here a complete solution without the reverse path option (to avoid the "bug") and without (0,0) (to fit the shape in the bounding box).

\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}

enter image description here

share|improve this answer
3  
Instead of reverse path you could always draw the arcs in a "left-to-right" way, for example (130:3.5) arc (130:50:3.5). Also the arcs would need to be drawn "top-to-bottom" by drawing the arc with the largest radius first. –  Mark Wibrow Dec 22 '13 at 20:12
    
@MarkWibrow Excellent point! Thanks ;-) –  Paul Gaborit Dec 22 '13 at 22:24
    
@PaulGaborit thx for great suggestion. –  bronislav Dec 23 '13 at 8:12

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.