qtree ausrichten bei Querformat

Layout von Seiten, Rändern, Fusszeilen, usw, modifizieren


Achim
Forum-Anfänger
Forum-Anfänger
Beiträge: 20
Registriert: So 22. Jun 2014, 07:45

qtree ausrichten bei Querformat

Beitrag von Achim »

Hallihallo,

noch eine Frage zum Seitenlayout: Ich habe mit dem Package qtree einen Syntaxbaum gezeichnet. Der ist ziemlich breit, deshalb muss ich die Seite auf landscape stellen. Leider ist der Baum dann zu hoch, weswegen ich gerne den Rand links verschmälern würde.

Ich hab das dann mit \newgeometry{left=1cm} ausprobiert. Das sieht halbwegs gut aus, aber leider ist a) der Baum nicht mehr linksbündig ausgerichtet (falls er das jemals war?), und der rechte/obere Teil des Baumes ragt in den Header mit rein. Ich hab schon mit \raggedright versucht, den Baum irgendwie nach links zu bekommen, aber das hat gar nichts gemacht.

Wie immer vielen Dank! Ihr rettet mich gerade echt!

(PS: Mache ich das eigentlich richtig, den LaTeX Code unten immer noch in code-tags anzuhängen, oder soll ich das lieber weglassen und nur das Minimalbeispiel anhängen?)
\documentclass[a4paper, 12pt]{article}

\usepackage{array}
\usepackage{fixltx2e}
\usepackage[top=1in, bottom=1in, left=1in, right=1in]{geometry}
\usepackage[utf8]{inputenc}
\usepackage{hyperref} 
\usepackage{fancyhdr}		% for nice headers
\usepackage{etoolbox}
\usepackage{setspace}		% line spacing
\usepackage{qtree}			% for tree design
\usepackage{lscape} 		% for landscape mode


\makeatletter 	% needed because there is an @ symbol in a command
\renewcommand*\l@section{\@dottedtocline{1}{1.5em}{2.3em}}
\makeatother 		% reset to normal interpretation

\newcommand{\var}[2]{#1\textsubscript{#2}}
\newcommand{\type}[1]{$<$#1$>$}

% Change the name of the TOC from 'Content' to 'Table of Contents'
\renewcommand{\contentsname}{Table of Contents}

%================================================%

\begin{document}
\pagenumbering{roman}
\thispagestyle{empty}
\doublespacing
\tableofcontents

\onehalfspacing
\newpage
\pagenumbering{arabic} 
\pagestyle{fancy}
\fancyhf{}
\lhead{\nouppercase{\leftmark}}
\rhead{\thepage}

\section{Tree Size}

Wie bekomme ich den Tree besser links ausgerichtet, sodass das "would" auf der linken Seite besser nach unten abschließt und "the cake" oben nicht im Header drinsteckt? :-/
\\
\\
\noindent Außerdem verschiebt es mir den Header leider mit, wenn man die geometry ändert.
\\
\\
\noindent \textit{In essence}, wie kann ich den Tree horizontal und vertical mittig ausrichten, bzw. so weit unten wie möglich? (z.B. 1cm vom unteren Rand entfernt)

\begin{landscape}
\newgeometry{left=1cm}			
\Tree [.\textsubscript{$<$st$>$}
				$\lambda$w\textsubscript{0}
				[.\textsubscript{$<$t$>$}
					[.\textsubscript{$<$st,t$>$}
						would\textsubscript{$<$st,$<$st,t$>$$>$}
						[.\textsubscript{$<$st$>$}
							[.\textsubscript{$<$st,st$>$}
								Sim\textsubscript{$<$s,$<$st,st$>$$>$}
								w_0\textsubscript{$<$s$>$}
							]
							[.\textsubscript{$<$st$>$}
								[.\textsubscript{$<$st$>$}
									$R$\textsubscript{$<$s,st$>$}
									w_0\textsubscript{$<$s$>$}
								]
								[.\textsubscript{$<$st$>$}
									$\lambda$w_2
									[.S\textsubscript{$<$t$>$}
										[.\textsubscript{$<$e$>$}
											w_2\textsubscript{$<$s$>$}
											[.\textsubscript{\type{s,e}}
												\var{f}{\type{e,\type{s,e}}}
												\var{I}{\type{e}} 
											]
										]
										[.\textsubscript{$<$et$>$}
											be\textsubscript{$<$e,$<$et$>$$>$}
											[.\textsubscript{$<$e$>$}
												w_2\textsubscript{$<$s$>$}
												[.\textsubscript{\type{s,e}}
													\var{f}{\type{e,\type{s,e}}}
													\var{you}{\type{e}}
												]
											]  !\qsetw{3cm}
										]
									] !\qsetw{5cm}
								]
							]
						] !\qsetw{7cm}
					] !\qsetw{15cm}
					[.\textsubscript{$<$st$>$}
						$\lambda$w_7
						[.S\textsubscript{$<$t$>$}
							[.\textsubscript{$<$e$>$}
								w_7\textsubscript{$<$s$>$}
								[.\textsubscript{\type{s,e}}
									\var{f}{\type{e,\type{s,e}}}
									\var{I}{\type{e}}
								]
							]
							[.\textsubscript{$<$et$>$}
								[.\textsubscript{$<$e,et$>$}
									buy\textsubscript{$<$s,$<$e,et$>$$>$}
									w_7\textsubscript{$<$s$>$}
								]
								\qroof{the cake}.DP\textsubscript{$<$e$>$}
							]
						] 
					] !\qsetw{10cm}
				] !\qsetw{5cm}
			]
\end{landscape}

\end{document}
Dateianhänge
Problem als PDF
(63.62 KiB) 246-mal heruntergeladen
Problem als TeX
(3.36 KiB) 293-mal heruntergeladen

esdd
Forum-Meister
Forum-Meister
Beiträge: 2561
Registriert: So 7. Feb 2010, 16:36

Beitrag von esdd »

Setze den Code immer in die Code Tags, dann kann man auf "Öffne in Online-Editor" klicken. Dann ist das Anhängen des Codes in aller Regel überflüssig und auch das Ergebnis braucht es eigentlich nicht.

Du kannst vor dem \Tree zum einen \noindent einfügen und zum anderen kannst Du ihn noch manuell mit \hspace*{-2cm} etwas verschieben. Den Wert musst Du natürlich anpassen. Eventuell empfiehlt sich außerdem ein \thispagestyle{empty}, da sich Baum und Kopfzeile auch dann optisch stören, wenn sie nicht ineinander hinein ragen.

Gruß
Elke

Achim
Forum-Anfänger
Forum-Anfänger
Beiträge: 20
Registriert: So 22. Jun 2014, 07:45

Beitrag von Achim »

Danke für den Tipp! Das funktioniert prima mit der Ausrichtung nach oben/unten.

Ich hab jetzt noch ein bisschen versucht, mit dem Rand nach links zu spielen, aber weder \vspace{} oder \setlength{parindent}{-10cm} oder so haben was geholfen bzw. überhaupt etwas gemacht :-/

Hast du da nicht noch eine Idee? Das wäre so super :-)

[edit]Komischerweise wird jetzt eine leere Seite vor dem Baum eingeblendet :-/
\documentclass[a4paper, 12pt]{article}

\usepackage{array}
\usepackage{fixltx2e}
\usepackage[top=1in, bottom=1in, left=1in, right=1in]{geometry}
\usepackage[utf8]{inputenc}
\usepackage{hyperref} 
\usepackage{fancyhdr}		% for nice headers
\usepackage{etoolbox}
\usepackage{setspace}		% line spacing
\usepackage{qtree}			% for tree design
\usepackage{lscape} 		% for landscape mode


\makeatletter 	% needed because there is an @ symbol in a command
\renewcommand*\l@section{\@dottedtocline{1}{1.5em}{2.3em}}
\makeatother 		% reset to normal interpretation

\newcommand{\var}[2]{#1\textsubscript{#2}}
\newcommand{\type}[1]{$<$#1$>$}

% Change the name of the TOC from 'Content' to 'Table of Contents'
\renewcommand{\contentsname}{Table of Contents}

%================================================%

\begin{document}
\pagenumbering{roman}
\thispagestyle{empty}
\doublespacing
\tableofcontents

\onehalfspacing
\newpage
\pagenumbering{arabic} 
\pagestyle{fancy}
\fancyhf{}
\lhead{\nouppercase{\leftmark}}
\rhead{\thepage}

\section{Tree Size}

Wie bekomme ich den Tree besser links ausgerichtet, sodass das "would" auf der linken Seite besser nach unten abschließt und "the cake" oben nicht im Header drinsteckt? :-/
\\
\\
\noindent Außerdem verschiebt es mir den Header leider mit, wenn man die geometry ändert.
\\
\\
\noindent \textit{In essence}, wie kann ich den Tree horizontal und vertical mittig ausrichten, bzw. so weit unten wie möglich? (z.B. 1cm vom unteren Rand entfernt)

\begin{landscape}		
\hspace*{6cm}
\Tree [.\textsubscript{$<$st$>$}
				$\lambda$w\textsubscript{0}
				[.\textsubscript{$<$t$>$}
					[.\textsubscript{$<$st,t$>$}
						would\textsubscript{$<$st,$<$st,t$>$$>$}
						[.\textsubscript{$<$st$>$}
							[.\textsubscript{$<$st,st$>$}
								Sim\textsubscript{$<$s,$<$st,st$>$$>$}
								w_0\textsubscript{$<$s$>$}
							]
							[.\textsubscript{$<$st$>$}
								[.\textsubscript{$<$st$>$}
									$R$\textsubscript{$<$s,st$>$}
									w_0\textsubscript{$<$s$>$}
								]
								[.\textsubscript{$<$st$>$}
									$\lambda$w_2
									[.S\textsubscript{$<$t$>$}
										[.\textsubscript{$<$e$>$}
											w_2\textsubscript{$<$s$>$}
											[.\textsubscript{\type{s,e}}
												\var{f}{\type{e,\type{s,e}}}
												\var{I}{\type{e}} 
											]
										]
										[.\textsubscript{$<$et$>$}
											be\textsubscript{$<$e,$<$et$>$$>$}
											[.\textsubscript{$<$e$>$}
												w_2\textsubscript{$<$s$>$}
												[.\textsubscript{\type{s,e}}
													\var{f}{\type{e,\type{s,e}}}
													\var{you}{\type{e}}
												]
											]  !\qsetw{3cm}
										]
									] !\qsetw{5cm}
								]
							]
						] !\qsetw{7cm}
					] !\qsetw{15cm}
					[.\textsubscript{$<$st$>$}
						$\lambda$w_7
						[.S\textsubscript{$<$t$>$}
							[.\textsubscript{$<$e$>$}
								w_7\textsubscript{$<$s$>$}
								[.\textsubscript{\type{s,e}}
									\var{f}{\type{e,\type{s,e}}}
									\var{I}{\type{e}}
								]
							]
							[.\textsubscript{$<$et$>$}
								[.\textsubscript{$<$e,et$>$}
									buy\textsubscript{$<$s,$<$e,et$>$$>$}
									w_7\textsubscript{$<$s$>$}
								]
								\qroof{the cake}.DP\textsubscript{$<$e$>$}
							]
						] 
					] !\qsetw{10cm}
				] !\qsetw{5cm}
			]
\end{landscape}

\end{document}

esdd
Forum-Meister
Forum-Meister
Beiträge: 2561
Registriert: So 7. Feb 2010, 16:36

Beitrag von esdd »

Speichere den Baum in einer Box und nutze diese dann und verstecke dabei deren Höhe. Außerdem brauchst Du für die Linksverschiebung noch \vspace*{...}.
\documentclass[a4paper, 12pt]{article}

\usepackage{array}
%\usepackage{fixltx2e}
\usepackage[top=1in, bottom=1in, left=1in, right=1in,headheight=15pt]{geometry}
\usepackage[utf8]{inputenc}
\usepackage{hyperref} 
\usepackage{fancyhdr}      % for nice headers
\usepackage{etoolbox}
\usepackage{setspace}      % line spacing
\usepackage{qtree}         % for tree design
\usepackage{lscape}       % for landscape mode


\makeatletter    % needed because there is an @ symbol in a command
\renewcommand*\l@section{\@dottedtocline{1}{1.5em}{2.3em}}
\makeatother       % reset to normal interpretation

\newcommand{\var}[2]{#1\textsubscript{#2}}
\newcommand{\type}[1]{$<$#1$>$}

% Change the name of the TOC from 'Content' to 'Table of Contents'
\renewcommand{\contentsname}{Table of Contents}

%================================================%

\begin{document}
\pagenumbering{roman}
\thispagestyle{empty}
\doublespacing
\tableofcontents

\onehalfspacing
\newpage
\pagenumbering{arabic} 
\pagestyle{fancy}
\fancyhf{}
\lhead{\nouppercase{\leftmark}}
\rhead{\thepage}

\section{Tree Size}

Wie bekomme ich den Tree besser links ausgerichtet, sodass das "would" auf der linken Seite besser nach unten abschließt und "the cake" oben nicht im Header drinsteckt? :-/
\\
\\
\noindent Außerdem verschiebt es mir den Header leider mit, wenn man die geometry ändert.
\\
\\
\noindent \textit{In essence}, wie kann ich den Tree horizontal und vertical mittig ausrichten, bzw. so weit unten wie möglich? (z.B. 1cm vom unteren Rand entfernt)

\newsavebox\qtreetabelle
\begin{lrbox}{\qtreetabelle}
\Tree [.\textsubscript{$<$st$>$} 
             $\lambda$w\textsubscript{0} 
             [.\textsubscript{$<$t$>$} 
                [.\textsubscript{$<$st,t$>$} 
                   would\textsubscript{$<$st,$<$st,t$>$$>$} 
                   [.\textsubscript{$<$st$>$} 
                      [.\textsubscript{$<$st,st$>$} 
                         Sim\textsubscript{$<$s,$<$st,st$>$$>$} 
                         w_0\textsubscript{$<$s$>$} 
                      ] 
                      [.\textsubscript{$<$st$>$} 
                         [.\textsubscript{$<$st$>$} 
                            $R$\textsubscript{$<$s,st$>$} 
                            w_0\textsubscript{$<$s$>$} 
                         ] 
                         [.\textsubscript{$<$st$>$} 
                            $\lambda$w_2 
                            [.S\textsubscript{$<$t$>$} 
                               [.\textsubscript{$<$e$>$} 
                                  w_2\textsubscript{$<$s$>$} 
                                  [.\textsubscript{\type{s,e}} 
                                     \var{f}{\type{e,\type{s,e}}} 
                                     \var{I}{\type{e}} 
                                  ] 
                               ] 
                               [.\textsubscript{$<$et$>$} 
                                  be\textsubscript{$<$e,$<$et$>$$>$} 
                                  [.\textsubscript{$<$e$>$} 
                                     w_2\textsubscript{$<$s$>$} 
                                     [.\textsubscript{\type{s,e}} 
                                        \var{f}{\type{e,\type{s,e}}} 
                                        \var{you}{\type{e}} 
                                     ] 
                                  ]  !\qsetw{3cm} 
                               ] 
                            ] !\qsetw{5cm} 
                         ] 
                      ] 
                   ] !\qsetw{7cm} 
                ] !\qsetw{15cm} 
                [.\textsubscript{$<$st$>$} 
                   $\lambda$w_7 
                   [.S\textsubscript{$<$t$>$} 
                      [.\textsubscript{$<$e$>$} 
                         w_7\textsubscript{$<$s$>$} 
                         [.\textsubscript{\type{s,e}} 
                            \var{f}{\type{e,\type{s,e}}} 
                            \var{I}{\type{e}} 
                         ] 
                      ] 
                      [.\textsubscript{$<$et$>$} 
                         [.\textsubscript{$<$e,et$>$} 
                            buy\textsubscript{$<$s,$<$e,et$>$$>$} 
                            w_7\textsubscript{$<$s$>$} 
                         ] 
                         \qroof{the cake}.DP\textsubscript{$<$e$>$} 
                      ] 
                   ] 
                ] !\qsetw{10cm} 
             ] !\qsetw{5cm} 
          ]
\end{lrbox}
\begin{landscape}
\vspace*{-2cm}
\raggedleft\makebox[\linewidth][r]{\smash{{\usebox\qtreetabelle}}}
\clearpage
\end{landscape} 
\end{document}
Gruß
Elke

Achim
Forum-Anfänger
Forum-Anfänger
Beiträge: 20
Registriert: So 22. Jun 2014, 07:45

Beitrag von Achim »

Wow, super, genau so hatte ich mir das vorgestellt :oops: 8)

Vielen lieben Dank!

Achim
Forum-Anfänger
Forum-Anfänger
Beiträge: 20
Registriert: So 22. Jun 2014, 07:45

Beitrag von Achim »

Ach, eins noch: Wenn ich das jetzt in ein Command packen würde, damit es in Zukunft einfacher ist ...

Zwei Commands, \savetree und \outputtree:
\newcommand{\savetree}[2]
	% #1: name
	%	#2: tree definition
	{
		
		%\newsavebox{\expandafter\newcommand\csname #1}
		\begin{lrbox}{#1}
		#2
		\end{lrbox}
	}
\newcommand{\outputtree}[1]
	{
		\begin{landscape} 
			\vspace*{-2cm} 
			\raggedleft\makebox[\linewidth][r]{\smash{{\usebox{#1}}}} 
			\clearpage 
		\end{landscape} 
	}
Aufruf mit:
\savetree{\mytree}{[\Tree [.h 1 2]]}
\outputtree{\mytree}
Wirft leider lauter Fehler. Ich nehme an, so einfach kann man keine Befehle als Argumente übergeben. Bei TeX-StackExchange hab ich was mit csname gefunden, aber ich verstehe das nicht so ganz. Hab's oben auch mal eingebaut und ausprobiert, aber leider wirkungslos.

Hier mal das Minimalbeispiel:
\documentclass[a4paper, 12pt]{article}

\usepackage{array}
\usepackage{fixltx2e}
\usepackage[top=1in, bottom=1in, left=1in, right=1in]{geometry}
\usepackage[utf8]{inputenc}
\usepackage{hyperref} 
\usepackage{fancyhdr}		% for nice headers
\usepackage{etoolbox}
\usepackage{setspace}		% line spacing
\usepackage{qtree}			% for tree design
\usepackage{lscape} 		% for landscape mode


\makeatletter 	% needed because there is an @ symbol in a command
\renewcommand*\l@section{\@dottedtocline{1}{1.5em}{2.3em}}
\makeatother 		% reset to normal interpretation

\newcommand{\var}[2]{#1\textsubscript{#2}}
\newcommand{\type}[1]{$<$#1$>$}

% Change the name of the TOC from 'Content' to 'Table of Contents'
\renewcommand{\contentsname}{Table of Contents}

\newcommand{\savetree}[2]
	% #1: name
	%	#2: tree definition
	{
		
		\newsavebox{\expandafter\newcommand\csname #1}
		\begin{lrbox}{#1}
		#2
		\end{lrbox}
	}

\newcommand{\outputtree}[1]
	{
		\begin{landscape} 
			\vspace*{-2cm} 
			\raggedleft\makebox[\linewidth][r]{\smash{{\usebox{#1}}}} 
			\clearpage 
		\end{landscape} 
	}

%================================================%

\begin{document}
\pagenumbering{roman}
\thispagestyle{empty}
\doublespacing
\tableofcontents

\onehalfspacing
\newpage
\pagenumbering{arabic} 
\pagestyle{fancy}
\fancyhf{}
\lhead{\nouppercase{\leftmark}}
\rhead{\thepage}

\section{test tree}
\savetree{\thetree, [\Tree [.h 1 2]]}
\outputtree{\thetree}
\end{document}
Zuletzt geändert von Achim am Fr 17. Jul 2015, 07:41, insgesamt 1-mal geändert.

Besserwisser

Beitrag von Besserwisser »

Argumente werden nicht mit Komma getrennt, sondern jedes für sich ein geschweifte Klammern gesetzt. Vgl. Anweisungen wie \rule.

Achim
Forum-Anfänger
Forum-Anfänger
Beiträge: 20
Registriert: So 22. Jun 2014, 07:45

Beitrag von Achim »

Ooops! Where was I thinking! -> Code korrigiert

Leider auch mit richtiger Argumentübergabe noch 101 Fehler :-/

Noch so einer

Beitrag von Noch so einer »

\documentclass[a4paper, 12pt]{article}

\usepackage{array}
\usepackage{fixltx2e}
\usepackage[top=1in, bottom=1in, left=1in, right=1in]{geometry}
\usepackage[utf8]{inputenc}
\usepackage{hyperref} 
\usepackage{fancyhdr}      % for nice headers
\usepackage{etoolbox}
\usepackage{setspace}      % line spacing
\usepackage{qtree}         % for tree design
\usepackage{lscape}       % for landscape mode


\makeatletter    % needed because there is an @ symbol in a command
\renewcommand*\l@section{\@dottedtocline{1}{1.5em}{2.3em}}
\makeatother       % reset to normal interpretation

\newcommand{\var}[2]{#1\textsubscript{#2}}
\newcommand{\type}[1]{$<$#1$>$}

% Change the name of the TOC from 'Content' to 'Table of Contents'
\renewcommand{\contentsname}{Table of Contents}

\newcommand{\savetree}[2]
   % #1: name
   %   #2: tree definition
   {
      
      \newsavebox{#1}
      \begin{lrbox}{#1}
      #2
      \end{lrbox}
   }

\newcommand{\outputtree}[1]
   {
      \begin{landscape} 
         \vspace*{-2cm} 
         \raggedleft\makebox[\linewidth][r]{\smash{{\usebox{#1}}}} 
         \clearpage 
      \end{landscape} 
   }

%================================================%

\begin{document}
\pagenumbering{roman}
\thispagestyle{empty}
\doublespacing
\tableofcontents

\onehalfspacing
\newpage
\pagenumbering{arabic} 
\pagestyle{fancy}
\fancyhf{}
\lhead{\nouppercase{\leftmark}}
\rhead{\thepage}

\section{test tree}
\savetree{\thetree}{\Tree [.S This That ] }
\outputtree{\thetree}
\end{document}
Es sei darauf hingewiesen, dass die Anzahl der Box-Register bei TeX beschränkt ist. Man benötigt daher bei altem LaTeX ggf. das Paket etex, falls man viele Boxen speichert und erst später verwendet. Bei LaTeX ab Version 2015/01/01 braucht man das nicht mehr. Außerdem braucht das natürlich auch Speicher. Es kann daher sinnvoll sein, Boxen wieder zu verwenden, wenn sie ausgegeben sind und nicht mehr benötigt werden. Das gibt obige Lösung jedoch nicht her, da hier von \savetree immer eine neue Box angefordert wird (auch wenn eine Box mit demselben Namen bereits existiert). Außerdem gibt es in der Lösung keinen Schutz davor, nicht versehentlich bereits verwendete Namen zu verwenden.

Achim
Forum-Anfänger
Forum-Anfänger
Beiträge: 20
Registriert: So 22. Jun 2014, 07:45

Beitrag von Achim »

Prima, vielen Dank!

Meine Lösung mit vielen Parametern sieht jetzt so aus (falls es nochmal jemanden in Zukunft interessieren sollte):
\newcommand{\savetree}[2]
	% #1: name
	%	#2: tree definition
	{		
		\newsavebox{#1}
		\begin{lrbox}{#1}
		#2
		\end{lrbox}
	}

\newcommand{\outputtree}[7]
	% #1: name
	% #2: landscape or portrait
	% #3: vertical align before
	% #4: vertical align after
	% #5: clear page before: yes/no
	% #6: clear page after: yes/no
	% #7: orient the tree left/right/center
	{
		% clear page before:
		\ifthenelse{\equal{#5}{yes}}{\clearpage}{}
		
		% begin landscape?
		\ifthenelse{\equal{#2}{landscape}}{\begin{landscape}}{}
			% insert some vertical align before the tree
			\vspace*{#3} 			
			% insert tree			
			{
				% this will stop indentation
				\raggedleft
				% insert tree now
				\ifthenelse{\equal{#7}{left}}{\makebox[\linewidth][l]{\smash{{\usebox{#1}}}} }{}
				\ifthenelse{\equal{#7}{right}}{\makebox[\linewidth][r]{\smash{{\usebox{#1}}}} }{}
				\ifthenelse{\equal{#7}{center}}{\makebox[\linewidth][c]{\smash{{\usebox{#1}}}} }{}
			}
			%\makebox[\linewidth][c]{\smash{{\usebox{#1}}}} 
			% insert some vertical align after the tree
			\vspace*{#4}
			% clear page?
			\ifthenelse{\equal{#6}{yes}}{\clearpage}{}
		% end possible landscape
		\ifthenelse{\equal{#2}{landscape}}{\end{landscape}}{}
	}

\savetree{\mytree}{\Tree [.h this that ]}
\outputtree{\mytree}{portrait}{1cm}{1cm}{no}{no}{center}

Antworten