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!!
\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:
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 trees
biblioteca 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
, drehen
etc.
passen/.style={%
edge above=passen,
},
drehen
sempre ganha uma dotted
vantagem.
drehen/.style={%
edge={dotted},
edge above=drehen,
},
kein Schuss
acima 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 forest
ambiente.
\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 stage
de magia. Os nós terminais sempre possuem um rótulo abaixo e são sempre um dot
estilo. 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 dot
estilo.
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 dot
estilo. Ele também recebe um arquivo pin
.
[, ringed dot, pin=Spieler 1
Agora, para o ramo esquerdo. A raiz deste ramo recebe um pin
formato dot
e queremos um passen
ró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 ring
rótulo com borda drehen
(e o dotted
estilo de borda da própria linha).
[, drehen, ring
Continuamos a especificar os nós nesta ramificação da mesma maneira.
O schuss
estilo 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 schuss
estilo e do dot
formato.
[, 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 forest
ambiente.
\end{forest}
Aqui está o resultado. Aumente l sep+
e s sep+
se desejar para uma árvore mais espaçada.
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}