Гармоничное размещение узлов, различающихся по длине

Гармоничное размещение узлов, различающихся по длине

Код

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

создает следующую картину введите описание изображения здесь

Я нахожу размещение надписей на стрелках довольно тревожным. Я пробовал довольно много вариантов, но они всегда оказывались в довольно несимметричных положениях.

Есть ли способ заставить их вести себя хорошо?

Конечно, правильное значениехорошоЗдесь можно по-разному интерпретировать данные, но мне бы хотелось, чтобы, например, альфа-частицы отображались на более постоянных расстояниях от стрелок.

P.S. Я ставлю метки вручную, а не узлами вдоль дуги, потому что так они выглядят лучше, но я полагаю, что это плохой выбор...

решение1

Я бы установил якорь для этой точки.

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

введите описание изображения здесь

Я сделал узлы видимыми, чтобы вы могли лучше видеть размещение. Просто закомментируйте эту строку. Кроме того, я добавил команду, которая превращает индексы в поля нулевой ширины, естественной высоты и нулевой глубины: естественная высота остается там, чтобы индекс размещался правильно (т. е. не слишком высоко). Это приводит к немного нежелательному результату, так как ограничивающий прямоугольник не совсем установлен. Но в остальном это решение устанавливает якорь на $\alpha$, а не на весь $\alpha_{...}$. Если вы нашли установку на все имя метки, то не используйте макрос \aesub.

решение2

Выглядит ли это более эстетично?

офсетные этикетки

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

Здесь альфы симметричны (индексы игнорируются).

rlap индексы

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

Связанный контент