Hier kommt meine dritte Frage. Ich zeichne gerade Spieltheoriebäume mit dem Paket Forest und habe ein kleines Problem mit den Titeln einiger Bäume, das ich nicht in den Griff bekomme. Im Wesentlichen weise ich LaTex an, die Titel zentriert zu setzen, aber es verhält sich so, dass sie am obersten Knoten des Baums zentriert werden. Das ist in Ordnung, wenn der Baum symmetrisch oder fast symmetrisch ist, sieht aber ziemlich seltsam aus, wenn der Baum es nicht ist. Dann habe ich mich gefragt, ob es eine Möglichkeit gibt, den Titel so zu zentrieren, dass er in der Mitte des gesamten Baums und nicht am obersten Knoten steht. Kurz gesagt, das ist der Baum, den ich derzeit habe, und ich würde den Titel gerne etwas nach rechts verschieben (falls möglich).
Der Code, den ich verwende, ist dieser:
\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: Wenn jemand wüsste, wie man die Buchstaben, die Aktionen bezeichnen (D, A, d, a, D, A), leicht voneinander trennen kann, um zu vermeiden, dass sie sich mit den Zweigen des Baums überschneiden, wäre das einfach großartig.
Antwort1
Das liegt daran, dass Sie die Beschriftung als Knoten festlegen, was auch nicht die Standardmethode ist. Beschriftungen werden zu Abbildungen in einem Latex-Dokument hinzugefügtäußerlichzum Bild, d.h. sie sind nicht Bestandteil des Bildes.
Außerdem weisen Sie Ihrer Abbildung manuell eine Nummer zu, was die Verwendung von Latex etwas sinnlos macht, da einer der großen Vorteile von Latex darin besteht, dass Beschriftungen automatisch nummeriert werden.
Sie können sie anpassen, aber sie sind automatisch. Wenn Sie also eine weitere Zahl hinzufügen, werden sie alle automatisch korrigiert, während Sie in Ihrem Fall jede einzelne Zahl manuell korrigieren müssten. Und das ist in einem langen Dokument nicht gut.
Sie können \renewcommand{\thefigure}{\Roman{figure}}
Ihrer Präambel hinzufügen, dass die Abbildungen mit römischen Großbuchstaben nummeriert und \usepackage[labelfont=bf]{caption}
fett gedruckt sind.
Ausgabe
Code
\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}
Antwort2
Alenannohat hinsichtlich der Handhabung figure
von Überschriften völlig Recht. Dennoch kann es nützlich sein zu wissen, wie ein Knoten relativ zum Baum zentriert wird.
Dies kann erreicht werden, indem der Knoten nach dem Zeichnen des gesamten Baums relativ zum aktuellen Begrenzungsrahmen des Bildes zentriert wird, anstatt ihn relativ zu einem bestimmten Knoten zu zentrieren.
\node at ([yshift=10pt]current bounding box.north) {Centred within Tree: Extensive Form of a Centipede Game Variant};
Zarkoist auch ganz richtig, aber ich bin fauler und ziehe es vor, die Dinge automatisch zu erledigen. Ich würde also etwas verwenden, das die Angabe des Baums, einschließlich der Beschriftungen, durch eine leichte Änderung der Präambel des Baums etwas einfacher macht.
\begin{forest}
Lassen Sie uns zunächst einen Stil mit den für alle edge label
s gemeinsamen Optionen erstellen. Dies werden einige positive inner sep
und sein midway
.
/tikz/my edge label/.style={inner sep=5pt, midway},
Nun zur Baumkonfiguration.
for tree={
l sep=4em,
s sep=8em,
anchor=center,
Wir verzögern unsere Änderungen etwas, um sicherzustellen, dass die Optionen festgelegt sind.
before typesetting nodes={
Wenn der Knoten das erste Kind von rechts nach links ist, sollten alle Kantenbeschriftungen rechts gesetzt werden und der Stil für alle Kantenbeschriftungen verwendet werden. Außerdem edge label
ist die Spezifikation in allen Fällen im Wesentlichen gleich, sodass wir das Ganze node ...
auch hier genauso gut machen können.
if n'=1{
edge label/.wrap value={\noexpand node [my edge label,right] {$#1$} }
Wenn nicht, muss der Knoten auf der linken Seite sein, da alle übergeordneten Knoten genau null oder zwei untergeordnete Knoten haben. (Entweder n=1
oder n'=1
mit Ausnahme des Stammknotens, der kein edge label
untergeordnetes Element von irgendjemandem sein kann.)
}{
edge label/.wrap value={\noexpand node [my edge label,left] {$#1$} }
},
},
Alle Nicht-Terminalknoten erhalten die Optionen circle
und draw
, sodass wir die Optionen nicht jedes Mal manuell angeben müssen.
if n children=0{}{
circle,
draw,
}
}
Mit dieser Konfiguration können wir den Baum wie folgt angeben.
[$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]
]
]
]
produzieren
Vollständiger Code:
\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}
Antwort3
Überprüfen Sie hinsichtlich des Abstands zwischen Kantenbeschriftungen und Kanten, ob die folgende Ergänzung zu Alenannos Code das gewünschte Ergebnis liefert:
\tikzset{el/.style = {% edge label
midway, outer sep=1.5mm, #1} % <--- #1: for position (left, right)
}
Setzen Sie dies vor \begin{forest}
und als statt edge label={node[midway,left]{...}
verwenden
edge label={node[el=left]{...}
oder
edge label={node[el=right]{...}
abhängig davon, auf welche Seite der Kante die Beschriftung kommen soll. Damit wird der Graph zu:
Antwort4
Ein weiteres Beispiel für die Verwendung deristgame
Paket. Sie können einfach die Abkürzungen verwenden [al]
oder [ar]
etwas Abstand zwischen Aktionsbezeichnungen und Zweigen schaffen.
\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}