Estratégias Alternativas

Estratégias Alternativas

Eu realmente gostaria de fazer um círculo ao redor do primeiro nó da minha árvore como vocês podem ver na foto. Existe uma possibilidade? Só comecei com látex e tem tanta novidade para mim... Obrigada!!

insira a descrição da imagem aqui

\documentclass[a4paper, fontsize=11pt]{scrbook}
\usepackage{geometry} \geometry{a4paper, top=25mm, left=25mm, right=25mm, bottom=20mm, headsep=10mm, footskip=12mm} % Seitenlayout

\usepackage[ngerman]{babel}  % Deutsche Sprachanpassung
\usepackage[T1]{fontenc}         % Silbentrennung bei Sonderzeichen
\usepackage[latin1]{inputenc}   % Direkte Angabe von Umlauten im Dokument

\usepackage[onehalfspacing]{setspace} % Zeilenabstand 

\usepackage{amsmath} % Mathematik
\usepackage{amssymb} % Mathematik

\usepackage{multirow,array} % Auszahlungsmatrix
\usepackage{arydshln}          % vertikale und horizontale Linien in Tabelle
\dashlinegap=1pt                   % gestrichelte Linie in Tabelle

\usepackage{qtree}          % Spielbaum
\usepackage{tikz}             % Spielbaum
\usetikzlibrary{fit}              % Spielbaum
\usepackage{acronym}     % Spielbaum
\usepackage{anyfontsize} %Spielbaum

\usepackage{float} % Positionierung von Grafiken

%mit Befehl [h] wird versucht, das Objekt dort zu platzieren, wo du angegeben hast
%mit Befehl [t] am oberen Rand der nächsten Seite, auf der es passt
%mit Befehl [b] am unteren Rand analog zu t
%mit Befehl [p] auf einer eigenen Seite

\begin{document}

\begin{center}
\begin{tikzpicture}[
 dot/.style={circle, fill=black, inner sep=0pt, minimum size=7pt},
ring/.style={circle, draw, inner sep=0pt, minimum size=7pt}]

\node[dot,pin=90:{Spieler 1}] (n11) at (0,0) {};

\node[dot,pin=135:{Spieler 2}] (n21) at (-4,-1) {};
\node[ring] (n22) at (4,-1) {};

\node[dot,label=-90:{$(0,0)$}] (n31) at (-6,-4) {};
\node[ring] (n32) at (-2,-4) {};
\node[dot,label=-90:{$(-1,1)$}] (n33) at (2,-4) {};
\node[dot,pin=50:{Spieler 2}] (n34) at (6,-4) {};

\node[dot,label=-90:{$(1,-1)$}] (n41) at (-4,-7) {};
\node[dot,label=-90:{$(-2,2)$}] (n42) at (0,-7) {};
\node[ring] (n43) at (4,-7) {};
\node[dot,label=-90:{$(0.5,-0.5)$}] (n44) at (8,-7) {};

\node[dot,label=-90:{$(1,-1)$}] (n51) at (2,-10) {};
\node[dot,label=-90:{$(0,0)$}] (n52) at (6,-10) {};

\begin{scope}[every node/.style={above,sloped,font=\footnotesize}]

\draw (n11) -- node {passen} (n21);
\draw[dotted] (n11) -- node {drehen} (n22);

\draw (n21) -- node {passen} (n31);
\draw (n21) -- node {drehen} (n32);
\draw (n22) -- node {Schuss} node[below,sloped]{$\tfrac{1}{6}$} (n33);
\draw (n22) -- node {kein Schuss} node[below,sloped]{$\tfrac{5}{6}$} (n34);

\draw (n32) -- node {Schuss} node[below,sloped]{$\tfrac{1}{6}$} (n41);
\draw (n32) -- node {kein Schuss} node[below,sloped]{$\tfrac{5}{6}$} (n42);
\draw[dotted] (n34) -- node {drehen} (n43);
\draw (n34) -- node {passen} (n44);

\draw (n43) -- node {Schuss} node[below,sloped]{$\tfrac{1}{6}$} (n51);
\draw (n43) -- node {kein Schuss} node[below,sloped]{$\tfrac{5}{6}$} (n52);

\end{scope}
\end{tikzpicture}
\end{center}
\end{document}

Responder1

Podemos definir um estilo adicional para o primeiro nó (ou, se for apenas um nó, você pode simplesmente aplicar as configurações diretamente ao nó). Por exemplo:

    ringed dot/.style={circle, fill=black, draw, ultra thick, inner sep=1.95pt, double distance=1.5pt, minimum size=7pt}

produzirá este resultado:

ponto anelado

Observe que esta é uma forma extremamente ineficiente de desenhar a árvore e minimamente flexível. Seria muito mais simples usar um pacote dedicado para desenho de árvores. TikZ tem parte disso integrado e uma treesbiblioteca adicional que o estende.tikz-qtreeeflorestasão outros pacotes baseados em TikZ dedicados a árvores, que suportam uma especificação mais sucinta de árvores.qtreesuporta uma sintaxe semelhante, mas não é baseado em TikZ. (E hápstricks-type pacotes para árvores também.)

\documentclass[tikz, border=10pt, multi]{standalone}
\usepackage[ngerman]{babel}  % Deutsche Sprachanpassung
\usepackage[T1]{fontenc}         % Silbentrennung bei Sonderzeichen
\usepackage[utf8]{inputenc}   % Direkte Angabe von Umlauten im Dokument
\usepackage{amsmath}
\usetikzlibrary{fit}              % Spielbaum

\begin{document}

\begin{tikzpicture}
  [
    dot/.style={circle, fill=black, inner sep=0pt, minimum size=7pt},
    ring/.style={circle, draw, inner sep=0pt, minimum size=7pt},
    ringed dot/.style={circle, fill=black, draw, ultra thick, inner sep=1.95pt, double distance=1.5pt, minimum size=7pt}
  ]

  \node[ringed dot,pin=90:{Spieler 1}] (n11) at (0,0) {};

  \node[dot,pin=135:{Spieler 2}] (n21) at (-4,-1) {};
  \node[ring] (n22) at (4,-1) {};

  \node[dot,label=-90:{$(0,0)$}] (n31) at (-6,-4) {};
  \node[ring] (n32) at (-2,-4) {};
  \node[dot,label=-90:{$(-1,1)$}] (n33) at (2,-4) {};
  \node[dot,pin=50:{Spieler 2}] (n34) at (6,-4) {};

  \node[dot,label=-90:{$(1,-1)$}] (n41) at (-4,-7) {};
  \node[dot,label=-90:{$(-2,2)$}] (n42) at (0,-7) {};
  \node[ring] (n43) at (4,-7) {};
  \node[dot,label=-90:{$(0.5,-0.5)$}] (n44) at (8,-7) {};

  \node[dot,label=-90:{$(1,-1)$}] (n51) at (2,-10) {};
  \node[dot,label=-90:{$(0,0)$}] (n52) at (6,-10) {};

  \begin{scope}[every node/.style={above,sloped,font=\footnotesize}]

    \draw (n11) -- node {passen} (n21);
    \draw[dotted] (n11) -- node {drehen} (n22);

    \draw (n21) -- node {passen} (n31);
    \draw (n21) -- node {drehen} (n32);
    \draw (n22) -- node {Schuss} node[below,sloped]{$\tfrac{1}{6}$} (n33);
    \draw (n22) -- node {kein Schuss} node[below,sloped]{$\tfrac{5}{6}$} (n34);

    \draw (n32) -- node {Schuss} node[below,sloped]{$\tfrac{1}{6}$} (n41);
    \draw (n32) -- node {kein Schuss} node[below,sloped]{$\tfrac{5}{6}$} (n42);
    \draw[dotted] (n34) -- node {drehen} (n43);
    \draw (n34) -- node {passen} (n44);

    \draw (n43) -- node {Schuss} node[below,sloped]{$\tfrac{1}{6}$} (n51);
    \draw (n43) -- node {kein Schuss} node[below,sloped]{$\tfrac{5}{6}$} (n52);

  \end{scope}
\end{tikzpicture}
\end{document}

Estratégias Alternativas

Aqui está uma ilustração de uma das maneiras que mencionei acima para desenhar a árvore de forma mais eficiente e flexível. Não se trata de menos digitação (embora isso seja relevante), mas de garantir formatação uniforme, espaçamento consistente e facilidade de ajustes. Ou seja, deve ser possível alterar facilmente a aparência da árvore, adicionar ou remover nós, etc., sem a necessidade de realizar grandes cirurgias no código.

Esta solução utilizaflorestaporque acontece que eu gosto.

Começamos com os três estilos padrão para nós definidos acima. Desdeflorestaé baseado em TikZ, podemos usá-los diretamente na árvore para estilizar os nós individuais como desejarmos.

\tikzset{%
  dot/.style={fill=black, ring},
  ring/.style={circle, draw, inner sep=0pt, minimum size=7pt},
  ringed dot/.style={dot, ultra thick, inner sep=1.95pt, double distance=1.5pt},
}

Agora, para algunsfloresta- estilos específicos.

\forestset{%

A árvore envolve a repetição frequente de rótulos de borda, então vamos criar alguns estilos para esses rótulos para reduzir a duplicação de código.

Primeiro, vamos especificar um estilo especial para formatar todos os rótulos de borda chamados my edge label. Isso leva 2 argumentos: a localização do rótulo (por exemplo above) e o conteúdo (por exemplo passen).

  my edge label/.style n args=2{
    +edge label/.wrap value={node [sloped, midway, font=\footnotesize, #1] {#2}},
  },

Agora usaremos isso para criar dois estilos específicos para rótulos de arestas acima e abaixo da aresta.

  edge above/.style={
    my edge label={above}{#1},
  },
  edge below/.style={
    my edge label={below}{#1},
  },

Como um determinado rótulo sempre ocorre acima ou sempre abaixo, podemos configurar estilos simplesmente chamados de passen, drehenetc.

  passen/.style={%
    edge above=passen,
  },

drehensempre ganha uma dottedvantagem.

  drehen/.style={%
    edge={dotted},
    edge above=drehen,
  },

kein Schussacima sempre corresponde a cinco sextos abaixo.

  kein schuss/.style={
    edge above=kein Schuss,
    edge below=$\tfrac{5}{6}$,
  },

Da mesma forma para Schuss e um sexto.

  schuss/.style={%
    edge above=Schuss,
    edge below=$\tfrac{1}{6}$,
  },
}

Agora, para a própria árvore. Isso é especificado no forestambiente.

\begin{forest}

Começamos personalizando o espaçamento: l sep+aumenta a distância entre os níveis. s sep+aumenta a distância entre irmãos.

  for tree={
    s sep+=25mm,
    l sep+=20mm,
  },

Agora, um pouco stagede magia. Os nós terminais sempre possuem um rótulo abaixo e são sempre um dotestilo. Então o que podemos fazer é especificar o conteúdo do rótulo no próprio nó ao escrever a árvore. Então, antes que os nós sejam compostos, pegaremos esse conteúdo para criar um rótulo sob o nó, excluindo o conteúdo do próprio nó e dando-lhe o dotestilo.

  before typesetting nodes={
    where n children=0{
      label/.wrap pgfmath arg={below:$(#1)$}{content()},
      content=,
      dot,

Não fazemos nada com nós não terminais: vamos estilizá-los diretamente porque não há um padrão (óbvio para mim).

    }{}
  }

Agora a própria árvore usandoflorestaSintaxe de colchetes. O nó raiz vem primeiro e usa o ringed dotestilo. Ele também recebe um arquivo pin.

  [, ringed dot, pin=Spieler 1

Agora, para o ramo esquerdo. A raiz deste ramo recebe um pinformato dote queremos um passenrótulo de borda.

    [, passen, dot, pin=135:Spieler 2

Aqui está um nó terminal. Então colocamos o rótulo no próprio nó e o código acima cuidará disso. Somente o rótulo da borda precisa ser especificado adicionalmente.

      [{0,0}, passen]

Continuamos com o lado direito do ramo esquerdo da mesma forma.

      [, drehen, ring
        [{1,-1}, schuss]
        [{-2,2}, kein schuss]
      ]
    ]

Agora, para o ramo direito principal da árvore, começando com um ringrótulo com borda drehen(e o dottedestilo de borda da própria linha).

    [, drehen, ring

Continuamos a especificar os nós nesta ramificação da mesma maneira.

O schussestilo colocará um rótulo acima e abaixo da borda, enquanto o conteúdo deste nó será usado para o rótulo, pois o nó é terminal.

      [{1,-1}, schuss]

Este recebe um pin, os dois rótulos do kein schussestilo e do dotformato.

      [, kein schuss, dot, pin=50:Spieler 2
        [, drehen, ring
          [{1,-1}, schuss]
          [{0,0}, kein schuss]
        ]
        [{0.5,-0.5}, passen]
      ]
    ]
  ]

Tendo fechado os colchetes que começaram com o nó raiz, estamos prontos para encerrar o forestambiente.

\end{forest}

Aqui está o resultado. Aumente l sep+e s sep+se desejar para uma árvore mais espaçada.

árvore com **floresta**

Código completo:

\documentclass[tikz, border=10pt, multi]{standalone}
\usepackage[ngerman]{babel}  % Deutsche Sprachanpassung
\usepackage[T1]{fontenc}         % Silbentrennung bei Sonderzeichen
\usepackage[utf8]{inputenc}   % Direkte Angabe von Umlauten im Dokument
\usepackage{amsmath,forest}

\begin{document}
\tikzset{%
  dot/.style={fill=black, ring},
  ring/.style={circle, draw, inner sep=0pt, minimum size=7pt},
  ringed dot/.style={dot, ultra thick, inner sep=1.95pt, double distance=1.5pt},
}
\forestset{%
  passen/.style={%
    edge above=passen,
  },
  drehen/.style={%
    edge={dotted},
    edge above=drehen,
  },
  kein schuss/.style={
    edge above=kein Schuss,
    edge below=$\tfrac{5}{6}$,
  },
  schuss/.style={%
    edge above=Schuss,
    edge below=$\tfrac{1}{6}$,
  },
  my edge label/.style n args=2{
    +edge label/.wrap value={node [sloped, midway, font=\footnotesize, #1] {#2}},
  },
  edge above/.style={
    my edge label={above}{#1},
  },
  edge below/.style={
    my edge label={below}{#1},
  },
}
\begin{forest}
  for tree={
    s sep+=25mm,
    l sep+=20mm,
  },
  before typesetting nodes={
    where n children=0{
      label/.wrap pgfmath arg={below:$(#1)$}{content()},
      content=,
      dot,
    }{}
  }
  [, ringed dot, pin=Spieler 1
    [, passen, dot, pin=135:Spieler 2
      [{0,0}, passen]
      [, drehen, ring
        [{1,-1}, schuss]
        [{-2,2}, kein schuss]
      ]
    ]
    [, drehen, ring
      [{1,-1}, schuss]
      [, kein schuss, dot, pin=50:Spieler 2
        [, drehen, ring
          [{1,-1}, schuss]
          [{0,0}, kein schuss]
        ]
        [{0.5,-0.5}, passen]
      ]
    ]
  ]
\end{forest}
\end{document}

informação relacionada