Wie kann man den Befehl so umgestalten, dass die Beschriftung sich an den Pfad anschmiegt, unter Beibehaltung der \ifcase-Struktur? Wenn ich die beiden Strich (||) wegnehme, erhalte ich eine Fehlermeldung, bzw. müsste ich auf \ifcase verzichten. Das gleiche Probleme habe ich auch mit dem auskommentierten \ifthenelse, welches ich gerne irgendwie an dieser Stelle hätte.

Open in Online-Editor
\documentclass{article}
\usepackage[ngerman]{babel}
\usepackage{tikz}

\usetikzlibrary{
  decorations, decorations.text
}

\begin{document}

\newcommand{\beschriftung}[1]{\begin{tikzpicture}
\foreach \n in {1, ..., 9}{
  \path[
    postaction = {
      decorate,
      decoration = {
        raise = 1.5ex,
        text along path, % \ifthenelse{##2 = 3 \OR ##2 = 4 \OR ##2 = 5 \OR ##2 = 6}{}{reverse path,}
        text align = center, 
        text = {
          |\ifcase \n
            \or Eins
                \or Zwei
            \or Drei
            \or Vier
            \or Fünf
            \or Sechs
            \or Sieben
            \or Acht
            \or Neun
            \fi|
        }
      }
    }
  ] (-36: #1) arc (-36: {856-((\n-1)*80)}: #1);
}
\end{tikzpicture}}

\beschriftung{3}

\end{document}

gefragt 28 Nov '15, 05:56

rix's gravatar image

rix
39021723
Akzeptiert-Rate: 0%

bearbeitet 10 Jan '16, 12:30

saputello's gravatar image

saputello
10.8k103963


Für das Setzen entlang des Pfades benötigt man den Text vollständig expandiert. Ich mache das hier mit einem Hilfsmakro:

Open in Online-Editor
\documentclass{article}
\usepackage[ngerman]{babel}
\usepackage{tikz}

\usetikzlibrary{
  decorations, decorations.text
}

\begin{document}

\newcommand{\beschriftung}[1]{\begin{tikzpicture}
\foreach \n in {1, ..., 9}{
  \edef\mytext{\ifcase \n
            \or Eins
                \or Zwei
            \or Drei
            \or Vier
            \or Fünf
            \or Sechs
            \or Sieben
            \or Acht
            \or Neun
            \fi}
  \path[
    postaction = {
      decorate,
      decoration = {
        raise = 1.5ex,
        text along path, % \ifthenelse{##2 = 3 \OR ##2 = 4 \OR ##2 = 5 \OR ##2 = 6}{}{reverse path,}
        text align = center, 
        text = { \mytext }
      }
    }
  ] (-36: #1) arc (-36: {856-((\n-1)*80)}: #1);
}
\end{tikzpicture}}

\beschriftung{3}

\end{document}

Da reverse path den optisch den Radius verändert, glaube ich irgendwie nicht, dass es eine gute Idee ist, das nur für einige der Texte zu setzen. Wenn Du es tatsächlich willst, geht aber auch das:

Open in Online-Editor
\documentclass{article}
\usepackage[ngerman]{babel}
\usepackage{tikz}

\usetikzlibrary{
  decorations, decorations.text
}

\begin{document}

\newcommand{\beschriftung}[1]{\begin{tikzpicture}
\foreach \n in {1, ..., 9}{
  \edef\mytext{\ifcase \n
            \or Eins
                \or Zwei
            \or Drei
            \or Vier
            \or Fünf
            \or Sechs
            \or Sieben
            \or Acht
            \or Neun
            \fi}%
  \def\extraopt{reverse path}%
  \ifnum \n>2 \ifnum \n<7 \def\extraopt{}\fi\fi
  \path[
    postaction = {
      decorate,
      decoration = {
        raise = 1.5ex,
        text along path,
        \extraopt,
        text align = center, 
        text = {\mytext}
      }
    }
  ] (-36: #1) arc (-36: {856-((\n-1)*80)}: #1);
}
\end{tikzpicture}}

\beschriftung{3}

\end{document}

Ich vermute aber, Du möchtest eher etwas in der Richtung:

Open in Online-Editor
\documentclass{article}
\usepackage[ngerman]{babel}
\usepackage{tikz}

\usetikzlibrary{
  decorations, decorations.text
}

\begin{document}

\newcommand{\beschriftung}[1]{\begin{tikzpicture}
\foreach \n in {1, ..., 9}{
  \edef\mytext{\ifcase \n
            \or Eins%
            \or Zwei%
            \or Drei%
            \or Vier%
            \or F{\"u}nf%
            \or Sechs%
            \or Sieben%
            \or Acht%
            \or Neun%
            \fi}%
  \def\raiseval{-3.5ex}%
  \def\extraopt{reverse path}%
  \ifnum \n>2 \ifnum \n<7 \def\extraopt{}\def\raiseval{1.5ex}\fi\fi
  \path[
    postaction = {
      decorate,
      decoration = {
        raise = \raiseval,
        text along path,
        \extraopt,
        text align = center, 
        text = {\mytext}
      }
    }
  ] (-36: #1) arc (-36: {856-((\n-1)*80)}: #1);
}
\end{tikzpicture}}

\beschriftung{3}

\end{document}

Kreis

Bei Verwendung von \usepackage[T1]{fontenc} und \usepackage[utf8]{inputenc} oder LuaLaTeX oder XeLaTeX mit fontspec kann man sich die Umstände mit dem ü in Fünf übrigens sparen. Das kommt nur zustande, weil das Zeichen bei der voreingestellten OT1-Codierung aus zwei Zeichen zusammengesetzt wird.

Permanenter link

beantwortet 28 Nov '15, 08:49

saputello's gravatar image

saputello
10.8k103963
Akzeptiert-Rate: 51%

bearbeitet 28 Nov '15, 08:50

großartig, vielen dank! Könnte man die Beschriftung auch über ein Argument vornehmen, wie beispielsweise: \beschriftung{3}{eins, zwei, drei, vier, fünf, sechs, sieben, acht, neun} ?

(28 Nov '15, 09:29) rix

Hier ist mal noch ein alternativer Vorschlag, bei dem die Liste mit den Beschriftungen als Argument an den Befehl \beschriftung übergeben wird. Dabei ist die Anzahl der Beschriftungen nicht fest vorgeben. Die Winkel für die Beschriftungen werden aus deren Anzahl berechnet. Dabei kann der Winkel für das erste Beschriftungselement über ein optionales Argument vorgegeben werden.

Open in Online-Editor
\documentclass{standalone}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[ngerman]{babel}
\usepackage{tikz}

\usetikzlibrary{
  decorations, decorations.text
}

% Syntax: \beschriftung[<startwinkel>]{<radius>}{<liste mit beschriftungen>}
\newcommand{\beschriftung}[3][50]{%
  \begin{tikzpicture}
  \pgfset{
    /pgf/decoration/circle angle/.code={
      \ifdim ##1pt>180pt% wenn der Winkel größer als 180° ist 
      \pgfset{/pgf/decoration/reverse path=false,/pgf/decoration/raise=2ex}
      \else% sonst, also wenn der Winkel kleiner gleich 180° ist
      \pgfset{/pgf/decoration/reverse path=true,/pgf/decoration/raise=-3.5ex}
      \fi
    }
  }
    \begin{scope}% zum lokal halten des Clippens
      \clip circle [radius=#2];
      \foreach[count=\n,remember=\n as \totalnumber] \i in {#3}{}
      \foreach[count=\n] \mytext in {#3}{
        \pgfmathsetmacro\circleangle{Mod(#1-(\n-1)*360/\totalnumber,360)}
        \path[
          postaction = {
            decorate,
            decoration = {
              text along path,
              circle angle=\circleangle,
              text align = center, 
              text = {\mytext}
            }
          }
        ] ({\circleangle-180}: #2) arc ({\circleangle-180}: {\circleangle+180}: #2);
      }
    \end{scope}
  \end{tikzpicture}%
}

\begin{document}
\beschriftung{3}{Eins,Zwei,Drei,Vier,F{ü}nf,Sechs,Sieben,Acht,Neun}
\beschriftung[340]{3}{340,320,...,0}
\end{document}

alt text

Permanenter link

beantwortet 28 Nov '15, 17:59

esdd's gravatar image

esdd
15.9k164055
Akzeptiert-Rate: 63%

bearbeitet 28 Nov '15, 18:40

dankeschön! Dieser neue Befehl wäre eigentlich schon "Paket-würdig" :)

(29 Nov '15, 14:30) rix
Deine Antwort
Vorschau umschalten

Folgen dieser Frage

Per E-Mail:

Wenn sie sich anmelden, kommen Sie für alle Updates hier in Frage

Per RSS:

Antworten

Antworten und Kommentare

Markdown-Grundlagen

  • *kursiv* oder _kursiv_
  • **Fett** oder __Fett__
  • Link:[Text](http://url.com/ "Titel")
  • Bild?![alt Text](/path/img.jpg "Titel")
  • nummerierte Liste: 1. Foo 2. Bar
  • zum Hinzufügen ein Zeilenumbruchs fügen Sie einfach zwei Leerzeichen an die Stelle an der die neue Linie sein soll.
  • grundlegende HTML-Tags werden ebenfalls unterstützt

Frage-Themen:

×689
×8
×4
×4
×3

gestellte Frage: 28 Nov '15, 05:56

Frage wurde gesehen: 5,785 Mal

zuletzt geändert: 10 Jan '16, 12:30