Seite 1 von 1
qtree ausrichten bei Querformat
Verfasst: Do 16. Jul 2015, 13:48
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}
Verfasst: Do 16. Jul 2015, 15:19
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
Verfasst: Do 16. Jul 2015, 15:45
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}
Verfasst: Do 16. Jul 2015, 16:18
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
Verfasst: Do 16. Jul 2015, 16:24
von Achim
Wow, super, genau so hatte ich mir das vorgestellt
Vielen lieben Dank!
Verfasst: Fr 17. Jul 2015, 07:30
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}
Verfasst: Fr 17. Jul 2015, 07:34
von Besserwisser
Argumente werden nicht mit Komma getrennt, sondern jedes für sich ein geschweifte Klammern gesetzt. Vgl. Anweisungen wie \rule.
Verfasst: Fr 17. Jul 2015, 07:40
von Achim
Ooops! Where was I thinking! -> Code korrigiert
Leider auch mit richtiger Argumentübergabe noch 101 Fehler :-/
Verfasst: Fr 17. Jul 2015, 07:45
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.
Verfasst: Fr 17. Jul 2015, 08:27
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}