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 27 Nov '15, 23:56

rix's gravatar image

rix
3452419
Akzeptiert: 93%

bearbeitet 10 Jan, 06:30

saputello's gravatar image

saputello
18.4k22352


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, 02:49

saputello's gravatar image

saputello
18.4k22352

bearbeitet 28 Nov '15, 02: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, 03: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, 11:59

esdd's gravatar image

esdd
14.2k53251

bearbeitet 28 Nov '15, 12:40

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

(29 Nov '15, 08:30) rix
Deine Antwort auf die Frage (nicht auf andere Antworten)
Knebel-Vorschau

Folge dieser Frage

Per E-Mail:

Wenn Du Dich anmeldest, kannst Du Updates hier abonnieren

Per RSS:

Antworten

Antworten und Kommentare

Aktuelle Buch-Infos

LaTeX Cookbook

LaTeX Beginners Guide

Limitierter Rabatt ebook
50% Coupon code tDRet6Y

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üge einfach zwei Leerzeichen an die Stelle ein, an der die neue Zeile sein soll.
  • grundlegende HTML-Tags werden ebenfalls unterstützt

Zugeordnete Themen:

×492
×7
×4
×3
×3

Frage gestellt: 27 Nov '15, 23:56

Frage wurde angeschaut: 1,464 Mal

Zuletzt aktualisiert: 10 Jan, 06:30