Aí vai minha terceira pergunta. Na verdade, estou desenhando árvores da Teoria dos Jogos usando o pacote Forest e tenho um pequeno problema com o título de algumas árvores que não consigo gerenciar. Essencialmente, ordeno ao LaTex que coloque os títulos centralizados, mas seu comportamento é centralizá-los no nó superior da árvore. Isto é bom quando a árvore é simétrica ou quase simétrica, mas parece um tanto estranho quando a árvore não é. Então, fiquei pensando se existe alguma maneira de centralizar o título de forma que fique no centro de toda a árvore e não centralizado no nó superior. Em suma, esta é a árvore que tenho atualmente e gostaria de mover ligeiramente o título para a direita (se possível).
O código que estou usando é este:
\begin{center}
\begin{forest} for tree={l sep=4em, s sep=8em, anchor=center}
[$P_1$, circle, draw,
[{2, 2}, edge label={node[midway,left]{$D$}}]
[$P_2$, edge label={node[midway,right]{$A$}}, circle, draw,
[{1, 1}, edge label={node[midway,left]{$d$}}]
[$P_1$, edge label={node[midway,right]{$a$}}, circle, draw,
[{0, 0}, edge label={node[midway,left]{$D$}}]
[{3, 3}, edge label={node[midway,right]{$A$}}]]]]
\node[above=30pt,align=center,anchor=center] {\textbf{Figure IV.} Extensive Form of a Centipede Game Variant};
\end{forest}
\end{center}
PS: Se alguém souber separar um pouco as letras que designam as ações (D,A,d,a,D,A) para evitar que elas se sobreponham aos galhos da árvore, vai ser simplesmente demais.
Responder1
Isso ocorre porque você está definindo a legenda como um nó, o que também não é a maneira padrão de fazer isso. Legendas são adicionadas às figuras em um documento Latexexternamenteà imagem, ou seja, eles não fazem parte dela.
Além disso, você está atribuindo manualmente um número à sua figura e isso torna o uso do Latex um pouco inútil, pois uma das grandes vantagens de usar o Latex é que as legendas são numeradas automaticamente.
Você pode personalizá-los, mas eles são automáticos, então se você adicionar outra figura, eles serão todos corrigidos automaticamente, enquanto no seu caso você teria que corrigir cada um manualmente. E isso não é bom num documento longo.
Você pode adicionar \renewcommand{\thefigure}{\Roman{figure}}
ao seu preâmbulo a numeração das figuras com algarismos romanos maiúsculos e \usepackage[labelfont=bf]{caption}
torná-las em negrito.
Saída
Código
\documentclass{article}
\usepackage{forest}
\usepackage[labelfont=bf]{caption}
\renewcommand{\thefigure}{\Roman{figure}}
\begin{document}
\begin{figure}
\centering
\caption{Extensive Form of a Centipede Game Variant}
\medskip
\begin{forest} for tree={l sep=4em, s sep=8em, anchor=center}
[$P_1$, circle, draw,
[{2, 2}, edge label={node[midway,left]{$D$}}]
[$P_2$, edge label={node[midway,right]{$A$}}, circle, draw,
[{1, 1}, edge label={node[midway,left]{$d$}}]
[$P_1$, edge label={node[midway,right]{$a$}}, circle, draw,
[{0, 0}, edge label={node[midway,left]{$D$}}]
[{3, 3}, edge label={node[midway,right]{$A$}}]]]]
\end{forest}
\end{figure}
\end{document}
Responder2
Alenannoestá totalmente correto sobre como lidar com figure
legendas. No entanto, ainda assim pode ser útil saber como centralizar um nó em relação à árvore.
Isto pode ser feito centralizando o nó em relação à caixa delimitadora atual da imagem, depois que toda a árvore for desenhada, em vez de centralizá-lo em relação a algum nó específico.
\node at ([yshift=10pt]current bounding box.north) {Centred within Tree: Extensive Form of a Centipede Game Variant};
Zarkotambém está correto, mas sou mais preguiçoso e prefiro lidar com as coisas automaticamente. Então, eu usaria algo que tornasse a especificação da árvore, incluindo os rótulos, um pouco mais simples, modificando um pouco o preâmbulo da árvore.
\begin{forest}
Primeiro, vamos criar um estilo com as opções comuns a todos edge label
os s. Isto será algo positivo inner sep
e midway
.
/tikz/my edge label/.style={inner sep=5pt, midway},
Agora, para a configuração da árvore.
for tree={
l sep=4em,
s sep=8em,
anchor=center,
Atrasaremos um pouco nossas alterações para garantir que as opções estejam definidas.
before typesetting nodes={
Se o nó for o primeiro filho indo da direita para a esquerda, então quaisquer rótulos de aresta deverão ser definidos à direita, bem como usar o estilo para todos os rótulos de aresta. Além disso, a edge label
especificação é essencialmente a mesma em todos os casos, então podemos fazer tudo node ...
aqui também.
if n'=1{
edge label/.wrap value={\noexpand node [my edge label,right] {$#1$} }
Caso contrário, o nó deverá estar à esquerda, porque todos os nós pais têm exatamente zero ou dois filhos. (Ou n=1
ou n'=1
exceto o nó raiz que não poderia ser edge label
filho de ninguém.)
}{
edge label/.wrap value={\noexpand node [my edge label,left] {$#1$} }
},
},
Todos os nós não terminais obtêm as opções circle
e draw
, portanto, não precisamos especificar as opções manualmente todas as vezes.
if n children=0{}{
circle,
draw,
}
}
Com esta configuração implementada, podemos especificar a árvore da seguinte maneira.
[$P_1$
[{2, 2}, edge label=D]
[$P_2$, edge label=A
[{1, 1}, edge label=d]
[$P_1$, edge label=a
[{0, 0}, edge label=D]
[{3, 3}, edge label=A]
]
]
]
para produzir
Código completo:
\documentclass{article}
\usepackage{forest}
\usepackage[labelfont=bf]{caption}
\renewcommand{\thefigure}{\Roman{figure}}
\begin{document}
\begin{figure}
\centering
\caption{Extensive Form of a Centipede Game Variant}
\medskip
\begin{forest}
/tikz/my edge label/.style={inner sep=5pt, midway},
for tree={
l sep=4em,
s sep=8em,
anchor=center,
before typesetting nodes={
if n'=1{
edge label/.wrap value={\noexpand node [my edge label,right] {$#1$} }
}{
edge label/.wrap value={\noexpand node [my edge label,left] {$#1$} }
},
},
if n children=0{}{
circle,
draw,
}
}
[$P_1$
[{2, 2}, edge label=D]
[$P_2$, edge label=A
[{1, 1}, edge label=d]
[$P_1$, edge label=a
[{0, 0}, edge label=D]
[{3, 3}, edge label=A]
]
]
]
\node at ([yshift=10pt]current bounding box.north) {Centred within Tree: Extensive Form of a Centipede Game Variant};
\end{forest}
\end{figure}
\end{document}
Responder3
Em relação à distância entre rótulos de arestas e arestas, veja se a seguinte adição ao código de Alenanno dá o que você procura:
\tikzset{el/.style = {% edge label
midway, outer sep=1.5mm, #1} % <--- #1: for position (left, right)
}
Coloque isso antes \begin{forest}
e depois em vez de edge label={node[midway,left]{...}
usar
edge label={node[el=left]{...}
ou
edge label={node[el=right]{...}
dependendo de qual lado da borda a etiqueta deve ficar. Com ele o gráfico fica:
Responder4
Outro exemplo de uso doistgame
pacote. Você pode simplesmente usar as abreviações [al]
ou [ar]
obter alguma distância entre os rótulos de ação e as ramificações.
\documentclass{article}
\usepackage{istgame}
\begin{document}
\begin{figure}
\centering
\caption{Extensive Form of a Centipede Game Variant}
\bigskip
\begin{istgame}
\setistEllipseNodeStyle{7mm}
\setistmathTF111
\xtdistance{6em}{10em}
\istrooto(0){P_1}
\istb{D}[al]{2,2} \istb{A}[ar] \endist
\istrooto(1)(0-2){P_2}
\istb{d}[al]{1,1} \istb{a}[ar] \endist
\istrooto(2)(1-2){P_1}
\istb{D}[al]{0,0} \istb{A}[ar]{3,3} \endist
\end{istgame}
\end{figure}
\end{document}