Gráfico em tikz: Posicionamento de etiqueta ortogonal de borda

Gráfico em tikz: Posicionamento de etiqueta ortogonal de borda

Estou usando o tikz para traçar gráficos, cada aresta deve ter um rótulo de aresta. Esta etiqueta de borda deve estar próxima aoCentroda borda.

Coloquei um edge nodeem cada borda. Deveria haver um pequenoortogonaldistância da etiqueta ao centro da borda. Então, começando do centro da aresta, percorra uma distância especificada ao longo da direção ortogonal da aresta e coloque a etiqueta lá.

Até agora eu consegui aquilo que não funciona bem.

\documentclass[12pt,a4paper,oneside,listof=totoc,bibliography=totoc,BCOR=4mm,DIV=12,]{scrartcl}

  \usepackage{tikz}
  \usepackage{pgfplots}

\begin{document}

  \begin{tikzpicture} [scale=0.75]  
    \begin{scope}[every node/.style={circle,draw,fill=white}]
      \node (5) at (0.5,4.5) {1};
      \node (6) at (3.5,4.5) {3};
      \node (7) at (1.5,6) {3};
      \node (8) at (4.5,6) {1};
    \end{scope}      
    \begin{scope}[>=latex,
                    every node/.style={midway},
                   every edge/.style={draw=black,thick}]
      \path [-] (5) edge[right] node {\footnotesize $1$} (6);
      \path [-] (6) edge[right] node {\footnotesize $1$} (7);
      \path [-] (6) edge[right] node {\footnotesize $1$} (8);
  \end{scope}
 \end{tikzpicture}

\end{document}

Responder1

Que tal usar a quotesbiblioteca em vez de edge nodes? Então você pode especificar o nó da borda dentro da própria borda por edge["1"]. A posição do nó da borda é então controlada pela chave autoque pode receber leftou right.

O significado de lefte rightpara a autochave é que o nó será colocado à esquerda do caminho respeitando sua direção (por exemplo, auto=leftse o caminho estiver indo da esquerda (0,0)para a direita, (1,0)o nó será colocado no meio do caminho e acima).

MWE

\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{quotes}

\begin{document}
  \begin{tikzpicture} [scale=0.75]  
    \begin{scope}[every node/.style={circle,draw,fill=white}]
      \node (5) at (0.5,4.5) {1};
      \node (6) at (3.5,4.5) {3};
      \node (7) at (1.5,6) {3};
      \node (8) at (4.5,6) {1};
    \end{scope}      
    \begin{scope}[
        >=latex,
        every node/.style={font=\footnotesize},
        every edge/.style={auto=right, draw=black,thick}]
      \path [-] (6) edge["1"] (5);
      \path [-] (6) edge["1"] (7);
      \path [-] (6) edge["1"] (8);
  \end{scope}
 \end{tikzpicture}
\end{document}

insira a descrição da imagem aqui

Responder2

Uma alternativa para uma boa resposta deGuilherme Zanotelli(com menos consideração do OP MWE):

\documentclass[tikz, margin=3mm]{standalone}
\usetikzlibrary{quotes}

\begin{document}
    \begin{tikzpicture}[
every edge quotes/.style = {auto, inner sep=1pt, font=\footnotesize},
                    ]
    \begin{scope}[every node/.style = {circle,draw}]
      \node (5) at (0.5,4.5)    {1};
      \node (6) at (3.5,4.5)    {3};
      \node (7) at (1.5,6)      {3};
      \node (8) at (4.5,6)      {1};
    \end{scope}
\draw[thick]    (5) to ["$1$"] (6)
                (7) to ["$1$"] (6)
                (6) to ["$1$"] (8);
    \end{tikzpicture}
\end{document}

insira a descrição da imagem aqui

informação relacionada