Colocar nós que variam em comprimento harmoniosamente

Colocar nós que variam em comprimento harmoniosamente

O código

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

produz a seguinte imagem insira a descrição da imagem aqui

Acho a colocação dos rótulos nas setas bastante perturbadora. Eu tentei algumas coisas, mas elas sempre terminavam em posições bastante assimétricas.

Existe uma maneira de fazer com que eles se comportem bem?

Claro, o significado correto debemaqui está aberto à interpretação, mas gostaria que pelo menos os alfas aparecessem a distâncias mais consistentes das setas, por exemplo.

PS. Estou colocando os rótulos manualmente e não como nós ao longo do arco porque assim eles parecem melhores, mas espero que seja uma má escolha...

Responder1

Eu estabeleceria a âncora para o ponto.

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

insira a descrição da imagem aqui

Tornei os nós visíveis para que você possa ver melhor o posicionamento. Apenas comente essa linha. Além disso, adicionei um comando que transforma os subscritos em caixas de largura zero, altura natural e profundidade zero: a altura natural é deixada lá para que o subscrito seja colocado corretamente (ou seja, não muito alto). Isso tem o resultado um pouco indesejável de que a caixa delimitadora não está bem definida. Mas caso contrário, esta solução define a âncora em $\alpha$ e não em $\alpha_{...}$ inteiro. Se você encontrar a configuração do nome completo do rótulo, não use a \aesubmacro.

Responder2

Isso parece mais esteticamente agradável?

etiquetas de deslocamento

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

Aqui os alfas são simétricos (os subscritos são ignorados).

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

informação relacionada