Harmonische Platzierung von Knoten unterschiedlicher Länge

Harmonische Platzierung von Knoten unterschiedlicher Länge

Der Code

\documentclass{article}
\usepackage{tikz}
\begin{document}
  \begin{tikzpicture}[font=\footnotesize, very thick]
  \def\r{3}
  \foreach \a/\n in {-2/{p-2}, -1/{p-1}, 0/0, 1/1, 2/2, 3/3, 4/4}
     \node[anchor=base] (\a) at (90+36*\a:\r) {$\circ$};
  \node (-3) at (90+36*-3:\r) {};
  \node (5) at (90+36*5:\r) {};
  \foreach \a/\name [remember=\a as \lasta (initially -3)] 
                in {-2/{p-3}, -1/{p-2}, 0/{p-1}, 1/0, 2/1, 3/2, 4/3, 5/4}
    {
    \draw[->, shorten >=5pt, shorten <=5pt] 
        (\lasta) 
        arc[radius=\r, start angle=90+36*(\lasta), end angle=90+36*(\a)]
        (\a);
    \node at (90+36*\lasta+18:\r+0.5) {$\alpha_{\name}$};
    }
  \foreach \a in { 1, ..., 14 } 
    {
    \node at (90+36*5+5*\a:\r) {$\cdot$};
    }
  \end{tikzpicture}
\end{document}

ergibt folgendes Bild Bildbeschreibung hier eingeben

Ich finde die Platzierung der Beschriftungen auf den Pfeilen ziemlich störend. Ich habe einiges ausprobiert, aber sie landen immer an ziemlich unsymmetrischen Positionen.

Gibt es eine Möglichkeit, sie dazu zu bringen, sich gut zu benehmen?

Natürlich ist die richtige Bedeutung vonAlsohier ist Interpretationssache, aber ich hätte zum Beispiel gerne, dass zumindest die Alphas in gleichmäßigeren Abständen von den Pfeilen angezeigt werden.

PS. Ich setze die Beschriftungen per Hand und nicht als Knoten entlang des Bogens, weil sie so besser zu sein scheinen, aber ich vermute, das ist eine schlechte Wahl ...

Antwort1

Ich würde den Anker für den Punkt setzen.

\documentclass[border=25pt]{standalone}
\usepackage{tikz}
\newcommand\aesub[1]{\makebox[0pt][l]{\raisebox{0pt}[\height][0pt]{\scriptsize$#1$}}}
\begin{document}
  \begin{tikzpicture}[font=\footnotesize, very thick]
  \def\r{3}
  \foreach \a/\n in {-2/{p-2}, -1/{p-1}, 0/0, 1/1, 2/2, 3/3, 4/4}
     \node[anchor=base] (\a) at (90+36*\a:\r) {$\circ$};
  \node (-3) at (90+36*-3:\r) {};
  \node (5) at (90+36*5:\r) {};
  \foreach \a/\name [remember=\a as \lasta (initially -3)] 
                in {-2/{p-3}, -1/{p-2}, 0/{p-1}, 1/0, 2/1, 3/2, 4/3, 5/4}
    {
    \draw[->, shorten >=5pt, shorten <=5pt] 
        (\lasta) 
        arc[radius=\r, start angle=90+36*(\lasta), end angle=90+36*(\a)]
        (\a);
    %% to avoid writing the same thing multiple times
    \pgfmathsetmacro\aeangle{90+36*\lasta+18}
    %% to see the node
    \node[circle,inner sep=0.5pt,fill] at (\aeangle:\r+0.5) {};
    \node[anchor=(\aeangle+180),outer sep=0pt,inner sep=0pt] at (\aeangle:\r+0.5) {$\alpha_{\aesub{\name}}$};
    %% old style for comparison purposes
    %% \node[anchor=(\aeangle+180),outer sep=0pt,inner sep=0pt] at (\aeangle:\r+0.5) {$\alpha_{\name}$};
    }
  \foreach \a in { 1, ..., 14 } 
    {
    \node at (90+36*5+5*\a:\r) {$\cdot$};
    }
  \end{tikzpicture}
\end{document}

Bildbeschreibung hier eingeben

Ich habe die Knoten sichtbar gemacht, damit Sie die Platzierung besser sehen können. Kommentieren Sie diese Zeile einfach aus. Außerdem habe ich einen Befehl hinzugefügt, der die Indizes in Kästen mit einer Breite von null, einer natürlichen Höhe und einer Tiefe von null umwandelt: Die natürliche Höhe bleibt dort, damit der Indizes richtig platziert wird (d. h. nicht zu hoch). Dies hat das etwas unerwünschte Ergebnis, dass der Begrenzungsrahmen nicht ganz festgelegt ist. Ansonsten setzt diese Lösung den Anker jedoch auf $\alpha$ und nicht auf das gesamte $\alpha_{...}$. Wenn Sie mit der Festlegung auf den gesamten Beschriftungsnamen zufrieden sind, verwenden Sie das \aesubMakro nicht.

Antwort2

Sieht das ästhetisch ansprechender aus?

Offset-Etiketten

\documentclass{article}
\usepackage{tikz}

\newlength{\tempwidth}

\begin{document}
  \begin{tikzpicture}[font=\footnotesize, very thick]
  \def\r{3}
  \foreach \a/\n in {-2/{p-2}, -1/{p-1}, 0/0, 1/1, 2/2, 3/3, 4/4}
     \node[anchor=base] (\a) at (90+36*\a:\r) {$\circ$};
  \node (-3) at (90+36*-3:\r) {};
  \node (5) at (90+36*5:\r) {};
  \foreach \a/\name [remember=\a as \lasta (initially -3)] 
                in {-2/{p-3}, -1/{p-2}, 0/{p-1}, 1/0, 2/1, 3/2, 4/3, 5/4}
    {
    \draw[->, shorten >=5pt, shorten <=5pt] 
        (\lasta) 
        arc[radius=\r, start angle=90+36*(\lasta), end angle=90+36*(\a)]
        (\a);
    \pgfextra{\settowidth{\tempwidth}{$\alpha_{\name}$}
       \pgfmathparse{0.5+0.005\tempwidth*cos(90+36*\lasta+18)}% fudge factor 0.005
       \global\let\temp=\pgfmathresult}
     \node at (90+36*\lasta+18:\r+\temp) {$\alpha_{\name}$};
    }
  \foreach \a in { 1, ..., 14 } 
    {
    \node at (90+36*5+5*\a:\r) {$\cdot$};
    }
  \end{tikzpicture}
\end{document}

Hier sind die Alphas symmetrisch (Indizes werden ignoriert).

rlap-Indizes

\documentclass{standalone}
\usepackage{tikz}

\newlength{\tempwidth}

\begin{document}
  \begin{tikzpicture}[font=\footnotesize, very thick]
  \def\r{3}
  \foreach \a/\n in {-2/{p-2}, -1/{p-1}, 0/0, 1/1, 2/2, 3/3, 4/4}
     \node[anchor=base] (\a) at (90+36*\a:\r) {$\circ$};
  \node (-3) at (90+36*-3:\r) {};
  \node (5) at (90+36*5:\r) {};
  \foreach \a/\name [remember=\a as \lasta (initially -3)] 
                in {-2/{p-3}, -1/{p-2}, 0/{p-1}, 1/0, 2/1, 3/2, 4/3, 5/4}
    {
    \draw[->, shorten >=5pt, shorten <=5pt] 
        (\lasta) 
        arc[radius=\r, start angle=90+36*(\lasta), end angle=90+36*(\a)]
        (\a);
     \node at (90+36*\lasta+18:\r+0.5) {$\alpha_{\rlap{$\scriptstyle\name$}}$};
    }
  \foreach \a in { 1, ..., 14 } 
    {
    \node at (90+36*5+5*\a:\r) {$\cdot$};
    }
  \node at (3.5,0) {\phantom{$alpha_{p-3}$}};% push right border
  \end{tikzpicture}
\end{document}

verwandte Informationen