Расположение изображения TikZ в альбомной ориентации

Расположение изображения TikZ в альбомной ориентации

Я написал большое игровое дерево (используяавтоматыпакет) и нужно отобразить его в ландшафтном режиме. Я уже пробовал использовать обатекстпосигеометрия(команда 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}

введите описание изображения здесь

Связанный контент