
Я написал большое игровое дерево (используяавтоматыпакет) и нужно отобразить его в ландшафтном режиме. Я уже пробовал использовать обатекстпосигеометрия(команда newgeometry) пакеты, но без каких-либо положительных результатов. Мне нужно сместить картинку влево, чтобы правая часть дерева игры отображалась правильно. Есть предложения? Также, если есть способ вписать его в портретный режим, это было бы еще лучше. Вот код:
\documentclass[12pt]{exam}
\usepackage{tikz}
\usepackage{pgf}
\usepackage{geometry}
\usepackage{textpos}
\usepackage{pdflscape}
\usetikzlibrary{external,automata,trees,positioning,shadows,arrows,shapes.geometric}
\begin{document}
\begin{landscape}
\begin{tikzpicture}[->,>=stealth',shorten >=1pt,auto,node distance=2.8cm,
semithick]
\tikzstyle{every state}=[fill,draw=none,green,text=white,circular drop shadow]
\tikzstyle{accepting}=[circle split, draw,text=black,inner sep=0.08cm]
\tikzstyle{initial}=[red,text=white]
\node[state,initial] (N0) {Nature};
\node[state] (N1) [below left of=N0,xshift=-5cm] {Nature};
\node[state] (F1) [below left of=N1] {R\&G};
\node[state] (K1) [below right of=N1] {R\&G};
\node[state] (FS1) [below left of=F1] {H};
\node[accepting] (FN1) [above left of=F1] {\phantom{1}};
\node[state] (KS1) [below right of=K1] {H};
\node[accepting] (KN1) [above right of=K1] {\phantom{1}};
\node[accepting] (FSC1) [below left of=FS1] {\phantom{1}};
\node[accepting] (FSN1) [above left of=FS1] {\phantom{1}};
\node[accepting] (KSC1) [below right of=KS1] {\phantom{1}};
\node[accepting] (KSN1) [above right of=KS1] {\phantom{1}};
\path(N1) edge node[ above left, pos=.20]{feed Hamlet} node[ below right, pos=.30]{0} (F1)
edge node[above right, pos=.20]{kill Hamlet} node[below left, pos=.30]{1} (K1);
\path(F1) edge node[above left,pos=.5]{escort} (FS1) edge node[ left]{don't}(FN1);
\path(K1) edge node[above right,pos=.5]{escort} (KS1) edge node[ right]{don't}(KN1);
\path(FS1) edge node[above left]{change} (FSC1) edge node[ left]{don't}(FSN1);
\path(KS1) edge node[above right]{change} (KSC1) edge node[ right]{don't}(KSN1);
\path(K1) edge[thick,dotted,-](F1);
\node[state] (N)[below right of=N0,xshift=5cm] {Nature};
\node[state] (F) [below left of=N] {R\&G};
\node[state] (K) [below right of=N] {R\&G};
\node[state] (FS) [below left of=F] {H};
\node[accepting] (FN) [above left of=F] {\phantom{1}};
\node[state] (KS) [below right of=K] {H};
\node[accepting] (KN) [above right of=K] {\phantom{1}};
\node[accepting] (FSC) [below left of=FS] {\phantom{1}};
\node[accepting] (FSN) [above left of=FS] {\phantom{1}};
\node[accepting] (KSC) [below right of=KS] {\phantom{1}};
\node[accepting] (KSN) [above right of=KS] {\phantom{1}};
\path(N) edge node[ above left, pos=.20]{feed Hamlet} node[ below right, pos=.30]{0} (F)
edge node[above right, pos=.20]{kill Hamlet} node[below left, pos=.30]{1} (K);
\path(F) edge node[above left,pos=.5]{escort} (FS) edge node[ left]{don't}(FN);
\path(K) edge node[above right,pos=.5]{escort} (KS) edge node[ right]{don't}(KN);
\path(FS) edge node[above left]{change} (FSC) edge node[ left]{don't}(FSN);
\path(KS) edge node[above right]{change} (KSC) edge node[ right]{don't}(KSN);
\path(K) edge[thick,dotted,-](F);
\end{tikzpicture}
\end{landscape}
\end{document}
решение1
Решение без, \resizebox
потому что с этим макросом текст изменяется в размере. Я пытаюсь использовать ландшафтную среду, как вы. Проблема в том, чтобы знать, нужно ли вам использовать это дерево в большом документе или отдельно.
1) parindent=0pt
к дополнительному горизонтальному пространству.
2) \eject\null
попробуйте поместить блок на новую страницу в вертикальном режиме; теперь его можно использовать \vfill
вокруг блока.
3) \hspace*{-4cm}
Я не знаю точно, какой макет используется в экзаменационном классе, поэтому я вручную ищу подходящий размер, чтобы отцентрировать поле без левого поля.
4) Я немного уменьшил node distance
здесь 2,5 см вместо 2,8 см, возможно, можно уменьшить еще раз, но в этом случае нужно будет изменить расположение некоторых текстов.
\documentclass[12pt]{exam}
\usepackage{tikz}
\usepackage{geometry}
\usepackage{pdflscape}
\usepackage{graphicx}
\usetikzlibrary{external,automata,trees,positioning,shadows,arrows,shapes.geometric}
\newlength\Textht
\setlength\Textht{\textheight}
\begin{document}
\begin{landscape}
\parindent=0pt
\eject\null
\vfill
\hspace*{-4cm}
\begin{tikzpicture}[->,>=stealth',shorten >=1pt,auto,node distance=2.5cm,
semithick]
\tikzstyle{every state}=[fill,draw=none,green,text=white,circular drop shadow]
\tikzstyle{accepting}=[circle split, draw,text=black,inner sep=0.08cm]
\tikzstyle{initial}=[red,text=white]
\node[state,initial] (N0) {Nature};
\node[state] (N1) [below left of=N0,xshift=-5cm] {Nature};
\node[state] (F1) [below left of=N1] {R\&G};
\node[state] (K1) [below right of=N1] {R\&G};
\node[state] (FS1) [below left of=F1] {H};
\node[accepting] (FN1) [above left of=F1] {\phantom{1}};
\node[state] (KS1) [below right of=K1] {H};
\node[accepting] (KN1) [above right of=K1] {\phantom{1}};
\node[accepting] (FSC1) [below left of=FS1] {\phantom{1}};
\node[accepting] (FSN1) [above left of=FS1] {\phantom{1}};
\node[accepting] (KSC1) [below right of=KS1] {\phantom{1}};
\node[accepting] (KSN1) [above right of=KS1] {\phantom{1}};
\path(N1) edge node[ above left, pos=.20]{feed Hamlet} node[ below right, pos=.30]{0} (F1)
edge node[above right, pos=.20]{kill Hamlet} node[below left, pos=.30]{1} (K1);
\path(F1) edge node[above left,pos=.5]{escort} (FS1) edge node[ left]{don't}(FN1);
\path(K1) edge node[above right,pos=.5]{escort} (KS1) edge node[ right]{don't}(KN1);
\path(FS1) edge node[above left]{change} (FSC1) edge node[ left]{don't}(FSN1);
\path(KS1) edge node[above right]{change} (KSC1) edge node[ right]{don't}(KSN1);
\path(K1) edge[thick,dotted,-](F1);
\node[state] (N) [below right of=N0,xshift=5cm] {Nature};
\node[state] (F) [below left of=N] {R\&G};
\node[state] (K) [below right of=N] {R\&G};
\node[state] (FS) [below left of=F] {H};
\node[accepting] (FN) [above left of=F] {\phantom{1}};
\node[state] (KS) [below right of=K] {H};
\node[accepting] (KN) [above right of=K] {\phantom{1}};
\node[accepting] (FSC) [below left of=FS] {\phantom{1}};
\node[accepting] (FSN) [above left of=FS] {\phantom{1}};
\node[accepting] (KSC) [below right of=KS] {\phantom{1}};
\node[accepting] (KSN) [above right of=KS] {\phantom{1}};
\path(N) edge node[ above left, pos=.20]{feed Hamlet} node[ below right, pos=.30]{0} (F)
edge node[above right, pos=.20]{kill Hamlet} node[below left, pos=.30]{1} (K);
\path(F) edge node[above left,pos=.5]{escort} (FS) edge node[ left]{don't}(FN);
\path(K) edge node[above right,pos=.5]{escort} (KS) edge node[ right]{don't}(KN);
\path(FS) edge node[above left]{change} (FSC) edge node[ left]{don't}(FSN);
\path(KS) edge node[above right]{change} (KSC) edge node[ right]{don't}(KSN);
\path(K) edge[thick,dotted,-](F);
\end{tikzpicture}%
\hfill
\vfill
\end{landscape}
\end{document}
решение2
Вы можете использовать \resizebox
из graphicx
пакета; поскольку в ландшафтном режиме ширина и высота меняются местами, вам необходимо использовать исходную ширину \textheight
в качестве новой ширины для изменения размера:
\documentclass[12pt]{exam}
\usepackage{tikz}
\usepackage{geometry}
\usepackage{graphicx}
\usetikzlibrary{external,automata,trees,positioning,shadows,arrows,shapes.geometric}
\newlength\Textht
\setlength\Textht{\textheight}
\begin{document}
\begin{landscape}
\null\vfill
\noindent\resizebox{\Textht}{!}{%
\begin{tikzpicture}[->,>=stealth',shorten >=1pt,auto,node distance=2.8cm,
semithick]
\tikzstyle{every state}=[fill,draw=none,green,text=white,circular drop shadow]
\tikzstyle{accepting}=[circle split, draw,text=black,inner sep=0.08cm]
\tikzstyle{initial}=[red,text=white]
\node[state,initial] (N0) {Nature};
\node[state] (N1) [below left of=N0,xshift=-5cm] {Nature};
\node[state] (F1) [below left of=N1] {R\&G};
\node[state] (K1) [below right of=N1] {R\&G};
\node[state] (FS1) [below left of=F1] {H};
\node[accepting] (FN1) [above left of=F1] {\phantom{1}};
\node[state] (KS1) [below right of=K1] {H};
\node[accepting] (KN1) [above right of=K1] {\phantom{1}};
\node[accepting] (FSC1) [below left of=FS1] {\phantom{1}};
\node[accepting] (FSN1) [above left of=FS1] {\phantom{1}};
\node[accepting] (KSC1) [below right of=KS1] {\phantom{1}};
\node[accepting] (KSN1) [above right of=KS1] {\phantom{1}};
\path(N1) edge node[ above left, pos=.20]{feed Hamlet} node[ below right, pos=.30]{0} (F1)
edge node[above right, pos=.20]{kill Hamlet} node[below left, pos=.30]{1} (K1);
\path(F1) edge node[above left,pos=.5]{escort} (FS1) edge node[ left]{don't}(FN1);
\path(K1) edge node[above right,pos=.5]{escort} (KS1) edge node[ right]{don't}(KN1);
\path(FS1) edge node[above left]{change} (FSC1) edge node[ left]{don't}(FSN1);
\path(KS1) edge node[above right]{change} (KSC1) edge node[ right]{don't}(KSN1);
\path(K1) edge[thick,dotted,-](F1);
\node[state] (N)[below right of=N0,xshift=5cm] {Nature};
\node[state] (F) [below left of=N] {R\&G};
\node[state] (K) [below right of=N] {R\&G};
\node[state] (FS) [below left of=F] {H};
\node[accepting] (FN) [above left of=F] {\phantom{1}};
\node[state] (KS) [below right of=K] {H};
\node[accepting] (KN) [above right of=K] {\phantom{1}};
\node[accepting] (FSC) [below left of=FS] {\phantom{1}};
\node[accepting] (FSN) [above left of=FS] {\phantom{1}};
\node[accepting] (KSC) [below right of=KS] {\phantom{1}};
\node[accepting] (KSN) [above right of=KS] {\phantom{1}};
\path(N) edge node[ above left, pos=.20]{feed Hamlet} node[ below right, pos=.30]{0} (F)
edge node[above right, pos=.20]{kill Hamlet} node[below left, pos=.30]{1} (K);
\path(F) edge node[above left,pos=.5]{escort} (FS) edge node[ left]{don't}(FN);
\path(K) edge node[above right,pos=.5]{escort} (KS) edge node[ right]{don't}(KN);
\path(FS) edge node[above left]{change} (FSC) edge node[ left]{don't}(FSN);
\path(KS) edge node[above right]{change} (KSC) edge node[ right]{don't}(KSN);
\path(K) edge[thick,dotted,-](F);
\end{tikzpicture}%
}
\vfill
\end{landscape}
\end{document}
Я также использовал некоторые \vfill
команды для вертикального центрирования tikzpicture
, но это необязательно. Обратите внимание, что, поскольку вы загружаете tikz
, нет необходимости явно загружать pgf
.
Эту же команду можно использовать для изменения размера дерева в портретном режиме:
\documentclass[12pt]{exam}
\usepackage{tikz}
\usepackage{geometry}
\usepackage{graphicx}
\usepackage{pdflscape}
\usetikzlibrary{external,automata,trees,positioning,shadows,arrows,shapes.geometric}
\begin{document}
\noindent\resizebox{\textwidth}{!}{%
\begin{tikzpicture}[->,>=stealth',shorten >=1pt,auto,node distance=2.8cm,
semithick]
\tikzstyle{every state}=[fill,draw=none,green,text=white,circular drop shadow]
\tikzstyle{accepting}=[circle split, draw,text=black,inner sep=0.08cm]
\tikzstyle{initial}=[red,text=white]
\node[state,initial] (N0) {Nature};
\node[state] (N1) [below left of=N0,xshift=-5cm] {Nature};
\node[state] (F1) [below left of=N1] {R\&G};
\node[state] (K1) [below right of=N1] {R\&G};
\node[state] (FS1) [below left of=F1] {H};
\node[accepting] (FN1) [above left of=F1] {\phantom{1}};
\node[state] (KS1) [below right of=K1] {H};
\node[accepting] (KN1) [above right of=K1] {\phantom{1}};
\node[accepting] (FSC1) [below left of=FS1] {\phantom{1}};
\node[accepting] (FSN1) [above left of=FS1] {\phantom{1}};
\node[accepting] (KSC1) [below right of=KS1] {\phantom{1}};
\node[accepting] (KSN1) [above right of=KS1] {\phantom{1}};
\path(N1) edge node[ above left, pos=.20]{feed Hamlet} node[ below right, pos=.30]{0} (F1)
edge node[above right, pos=.20]{kill Hamlet} node[below left, pos=.30]{1} (K1);
\path(F1) edge node[above left,pos=.5]{escort} (FS1) edge node[ left]{don't}(FN1);
\path(K1) edge node[above right,pos=.5]{escort} (KS1) edge node[ right]{don't}(KN1);
\path(FS1) edge node[above left]{change} (FSC1) edge node[ left]{don't}(FSN1);
\path(KS1) edge node[above right]{change} (KSC1) edge node[ right]{don't}(KSN1);
\path(K1) edge[thick,dotted,-](F1);
\node[state] (N)[below right of=N0,xshift=5cm] {Nature};
\node[state] (F) [below left of=N] {R\&G};
\node[state] (K) [below right of=N] {R\&G};
\node[state] (FS) [below left of=F] {H};
\node[accepting] (FN) [above left of=F] {\phantom{1}};
\node[state] (KS) [below right of=K] {H};
\node[accepting] (KN) [above right of=K] {\phantom{1}};
\node[accepting] (FSC) [below left of=FS] {\phantom{1}};
\node[accepting] (FSN) [above left of=FS] {\phantom{1}};
\node[accepting] (KSC) [below right of=KS] {\phantom{1}};
\node[accepting] (KSN) [above right of=KS] {\phantom{1}};
\path(N) edge node[ above left, pos=.20]{feed Hamlet} node[ below right, pos=.30]{0} (F)
edge node[above right, pos=.20]{kill Hamlet} node[below left, pos=.30]{1} (K);
\path(F) edge node[above left,pos=.5]{escort} (FS) edge node[ left]{don't}(FN);
\path(K) edge node[above right,pos=.5]{escort} (KS) edge node[ right]{don't}(KN);
\path(FS) edge node[above left]{change} (FSC) edge node[ left]{don't}(FSN);
\path(KS) edge node[above right]{change} (KSC) edge node[ right]{don't}(KSN);
\path(K) edge[thick,dotted,-](F);
\end{tikzpicture}%
}
\end{document}