PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : \setmargins abhängig von Seite



andi25
07-10-2010, 15:44
Hallo zusammen,

ich würde gerne abhängig von der Seitenzahl verschiedene Einstellungen für \setmargin vornehmen (Seite 1 soll individuelle Maße haben, alle anderen die gleichen).

Ich hätte es so versucht:



\ifnum
\thepage = 1
\setmargins{2.0cm}{2.3cm}{16.7cm}{22.5cm}{12pt}{25 pt}{0pt}{30pt}
\else
\setmargins{2.0cm}{0.0cm}{16.7cm}{22.5cm}{12pt}{25 pt}{0pt}{30pt}
\fi


Leider funktioniert das aber nicht (es wird keine Fehlermeldung ausgegeben, aber die Änderung wird auch nicht angewandt).

Kann mir da jemand weiterhelfen?

Vielen Dank, Andi

Schweinebacke
07-10-2010, 16:19
\setmargins? Ist das nicht das vmargin-Paket, das ungeschickt an \hoffset und \voffset herumpfuscht, um die Ränder einzustellen? Das kann so etwas AFAIK nicht. geometry (seit Version 5) und typearea (seit Jahren) können die Ränder innerhalb des Dokuments ändern. Je nachdem, welcher Rand geändert werden soll, genügt auch ein \vspace oder \hspace (ggf. auch mit negativem Wert) oder ein \enlargethispage oder eine Umgebung wie addmargin (KOMA-Script-Klasse oder Paket scrextend)..

voss
07-10-2010, 16:29
ich würde gerne abhängig von der Seitenzahl verschiedene Einstellungen für \setmargin vornehmen (Seite 1 soll individuelle Maße haben, alle anderen die gleichen).


\thepage muss nicht unbedingt eine Zahl sein, es könnte auch -1- sein.
Unabhängig davon kannst du für eine Seite mit


\vspace*{-...}%Platz nach oben
\hspace*{-...}% Platz nach links
\enlargethispage{..}% Platz nach unten arbeiten

Übder den rechten Rand kann man schreiben, in dem man eine minipage verwendet.

Herbert

andi25
07-10-2010, 16:47
Hallo ihr zwei,

vielen Dank für euere schnellen Antworten!

Dank dem Hinweis von Schweinebacke ist mir aufgefallen, dass setmargins wohl wirklich sehr veraltet ist :-) Ich bin gerade dabei einen Code von vor einigen Jahren zu überarbeiten. Da werd ich mir jetzt gleich mal geometry.sty anschauen!

Aber unabhängig davon, wie man die Maße setzt: Ich habe auch gemerkt, dass meine Schleife so garnicht beachtet wird. Dieser Code



\ifnum
\thepage > 1
HALLO
\fi


sollte ja eigentlich HALLO ab der zweiten Seite drucken. Aber wie voss schon erwähnt hat, ist das wohl nicht sehr zuverlässig so. Gibt es denn eine andere Möglichkeit, wie ich etwas ab Seite zwei tun kann?

voss
07-10-2010, 16:56
Aber unabhängig davon, wie man die Maße setzt: Ich habe auch gemerkt, dass meine Schleife so garnicht beachtet wird. Dieser Code



\ifnum
\thepage > 1
HALLO
\fi


sollte ja eigentlich HALLO ab der zweiten Seite drucken. Aber wie voss schon erwähnt hat, ist das wohl nicht sehr zuverlässig so. Gibt es denn eine andere Möglichkeit, wie ich etwas ab Seite zwei tun kann?

Tut es ja auch, wenn \thepage nicht umdefiniert wurde.
zeig an einem Beispiel, dass es angeblich nicht geht!

Herbert

andi25
08-10-2010, 16:46
Ah, sorry - ich hatte den Befehl an der falschen Stelle im Code, aber funktionieren tut es grundsätzlich so.

Gut, dann muss ich wohl mein ganzes Layout nochmal überdenken und das setmargins in geometry ersetzen.

Vielen Dank für euere Hilfe und ein schönes Wochenende!!

Schweinebacke
12-10-2010, 10:43
Statt \thepage solltest Du bei numerischen Vergleichen \value{page} verwenden. Allerdings kannst Du mehr als eine Seite in einem Dokument haben, bei der der Seitenzähler auf 1 steht. Deshalb wäre ggf. ein nicht numerischer Vergleich eventuell passender.

andi25
12-10-2010, 11:46
@Schweinebacke: Hättest Du denn eine Idee, wie ich einen "nicht nummerischen Vergleich" machen könnte?

Schweinebacke
12-10-2010, 13:06
\documentclass{scrartcl}
\usepackage[ngerman]{babel}
\usepackage{blindtext}
\pagestyle{myheadings}
\markright{Seite 1?
\noexpand\ifstr{\noexpand\thepage}{1}{ja}{nein}\hf ill\noexpand\thepage\hfill
Seite a? \noexpand\ifstr{\noexpand\thepage}{a}{ja}{nein}}
\begin{document}
\blinddocument

\clearpage
\pagenumbering{alph}

\blinddocument
\end{document}

andi25
12-10-2010, 13:55
Hallo Schweinebacke!

Vielen Dank! Wenn ich Dein Beispiel ausführe, funktioniert es schonmal wie gewünscht.

Ich hab jetzt versucht, das ganze auf meinen Fall umzumünzen, aber hier klappt es leider noch nicht ganz. Ich möchte ja je nach dem, ob ich auf Seite 1 oder auf Seite<>1 bin ein andere Ränder/Abstände (also einen anderen top-Wert bei geometry) haben.

Mein Minimalbeispiel



\documentclass{scrartcl}
\usepackage[ngerman]{babel}
\usepackage{geometry}

\pagestyle{myheadings}

% geometry setzen je nach Seite=1 oder Seite<>1
\markright{
\noexpand\ifstr{\noexpand\thepage}{1}{\geometry{a4 paper,left=40mm,right=30mm, top=10cm, bottom=2cm}
{\geometry{a4paper,left=40mm,right=30mm, top=10cm, bottom=2cm}}
}


\begin{document}
1.Seite

\clearpage
\pagenumbering{alph}

2. Seite

\end{document}


bringt jedoch nur den Fehler


Runaway argument?
{ \noexpand \ifstr {\noexpand \thepage }{1}{\geometry {a4paper,left=4\ETC.
! Paragraph ended before \markright was complete.


Ich versuch schon die ganze Zeit herauszukriegen warum, aber ich seh es einfach nicht...

Schweinebacke
12-10-2010, 14:18
Die Änderung der Ränder ist ja nur sinnvoll, wenn die erste Seite insgesamt anders aufgebaut ist, also es keinen automatisch Seitenumbruch gibt. Deshalb brauchst Du in dem Fall nicht lange rumzudoktern, sondern rufst nach dem manuellen Seitenumbruch einfach \newgeometry (siehe geometry-Anleitung) oder \typearea bzw. \KOMAoptions mit passenden Satzspiegeloptionen (siehe KOMA-Script-Anleitung) auf.

BTW: Falls ich es noch nicht erwähnt habe. Auf komascript.de gibt es das titlepage-Projekt (http://www.komascript.de/titlepage). Das dort enthaltene Paket bietet u. a. auch eine Titelseiten-Umgebung ohne Ränder an. Alternativ kann man auch mit \vspace* mit negativem Argument \enlargethispage und der addmargin-Umgebung (siehe KOMA-Script-Anleitung) o. ä. auf der ersten Seite arbeiten. Ich hatte letzteres eigentlich schon in meinem letzten Beitrag erwähnt.

andi25
14-10-2010, 15:53
(Beitrag zurückgenommen)

andi25
19-10-2010, 15:09
Hallo zusammen,

leider bin ich mit meinem Problem immernoch nicht weiter. Hier nochmal zusammengefasst die Dinge, die ich versucht habe:

vspace / newgeometry

Wenn ich es mit \newpage und dann mit \newgeometry versuche, werden die neuen Seitenränder akzeptiert. Das Problem ist jedoch, dass mein Dokument dynamisch aufgebaut wird (vereinfacht gesagt wie eine Rechnung, bei der der Titelseiter dann einzelne - verschieden viele - Rechnungsposten aus einer Datenbank folgen). Ich weiß also nicht, wann die zweite Seite beginnt. Deshalb wäre mein Versuch gewesen:



\documentclass{scrartcl}
\usepackage[ngerman]{babel}
\usepackage{blindtext}
\usepackage{geometry}
\pagestyle{myheadings}
\geometry{top=10cm}


\begin{document}
\blinddocument


\ifnum
\thepage = 1
%\newgeometry{top=1cm}
\vspace*{-6cm}
\fi

\clearpage
\pagenumbering{alph}

\blinddocument
\end{document}


...was jedoch leider nicht funktioniert (der top-Rand ist immer gleich). Ich vermute mal mit typearea statt vspace oder newgeometry wäre es das selbe.


markright / noexpan

In Anlehnung an das Posting #9 von Schweinebacke, hätte ich genau diesen Code genommen und das "ja" und "nein" (als Abfrage für Seite?) durch \newgeometry ersetzt. Hier bekomme ich jedoch die Fehlermeldung:



! Undefined control sequence.
<argument> ... {\noexpand \thepage }{1}{\geometry
{}}{nein}\hfill \noexpand ...
l.7 ...pand\ifstr{\noexpand\thepage}{a}{ja}{nein}}



(Minimalbeispiel ist genau der Code von Schweinebacke aus #9 nur mit "\newgeometry{top=1cm}" für "ja" bei "Seite 1?")


KOMA-Skript titelpage projekt

Diesen Weg habe ich ehrlich gesagt noch nicht versucht. Lieber wäre es mir wie in den oberen beiden Möglichkeiten z.B. "newgeometry" aufzurufen, wenn die zweite Seite beginnt. Aber wenn das alles garnicht funktioniert, werde ich mir wohl mal das titelpage-projekt ansehen müssen...

Schweinebacke
19-10-2010, 15:25
Moment mal: Es geht Dir also gar nicht um eine Titelseite? Es geht Dir auch nicht darum, alle möglichen Ränder zu ändern? Kann es sein, dass Du lediglich den Titelkopf weiter oben auf der Seite haben willst? Verwendest Du \maketitle? Dann müsste man das umdefinieren, weil es AFAIK immer eine neue Seite beginnt und deshalb etwaige \vspace*{-3cm} davor nichts bewirken. Alternativ könnte man einfach den Titelkopf selbst frei gestalten, etwa in der Art:
\begingroup
\vspace*{-3cm}
\centering
\LARGE\textbf{Meine Arbeit}\par
\vspace{.5\baselineskip}
\large Mein Name\par
\vspace{.5\baselineskip}
\normalsize \today\par
\endgroupFalls Dein Dokument doppelseitig ist, sollte man das ggf. in das optionale Argument einer \twocolumn-Anweisung packen, damit der Titel einspaltig gesetzt wird.

andi25
19-10-2010, 16:19
Hallo Schweinebacke,

ja, stimmt, im Wesentlichen geht es mir um den oberen Abstand. Und ich glaub ich komm dem Problem langsam auch näher. Ich hab mal versucht es in einem Minimalbeispiel zu verdeutlichen:



\documentclass[a4paper]{letter}
\usepackage{ngerman}
\usepackage[latin1]{inputenc}
\usepackage{fancyhdr}
\usepackage{a4}
\usepackage{marvosym}
\usepackage{geometry}

\geometry{a4paper,left=40mm,right=30mm, top=2cm, bottom=2cm}
\pagestyle{fancy}


\fancyhead{
\fancyhf{}
\ifnum
\thepage=1
\fontfamily{phv}\fontsize{10pt}{10pt}\selectfont
\begin{tabular}{p{6cm}p{4.5cm}l} \
\\[0.5cm]
& & Briefkopf im Header\\
& & Briefkopf im Header\\
& & Briefkopf im Header\\
& & Briefkopf im Header\\
& & Briefkopf im Header\\
\end{tabular}
\fi
}


\renewcommand{\headrulewidth}{0.0pt}

\begin{document}

Text auf Seite 1

\newpage

Text auf Seite 2

\end{document}


Das Problem ist hier, dass "Text auf Seite 2" auf der zweiten Seite relativ weit unten beginnt. Schuld ist der Header. Kommentiert ihn aus (oder auch nur die Zeilen "& & Briefkopf im Header\\" fängt mein "Text auf Seite 2" oben auf Seite 2 an, so wie es sein soll. Genau das ist auch mein Ausgangsproblem für diesen Threat.

Könnte ich dieses Problem denn mit \beginngroup ... \endgroup lösen? "\maketitle" verwende ich übrigens nicht ...

Schweinebacke
19-10-2010, 16:39
fancyhdr korrigiert automatisch die Höhe des Kopfes, wenn es bei der Ausgabe eines Kopfes auf einen zu hohen Kopf stößt. Da der Kopf Deiner ersten Seite so hoch ist, wird also auch für alle weiteren Seiten ein höherer Kopf eingesetzt. Siehe die Warnung:

Package Fancyhdr Warning: \headheight is too small (12.0pt):
Make it at least 86.7511pt.
We now make it that large for the rest of the document.
This may cause the page layout to be inconsistent, however.

Das Problem tritt nicht auf, wenn man statt fancyhdr scrpage2 verwendet. Damit kann man dann für die erste Seite auch einfach einen neuen Seitenstil definieren und den via \thispagestyle nur für die erste Seite verwenden:

\documentclass[a4paper]{letter}
\usepackage{ngerman}
\usepackage[latin1]{inputenc}
\usepackage{scrpage2}
\usepackage{marvosym}
\usepackage{geometry}

\geometry{a4paper,left=40mm,right=30mm, top=2cm, bottom=2cm}
\pagestyle{scrheadings}
\deftripstyle{firstpage}{}{}{%
\fontfamily{phv}\fontsize{10pt}{10pt}\selectfont
\begin{tabular}{p{6cm}p{4.5cm}l} \
\\[0.5cm]
& & Briefkopf im Header\\
& & Briefkopf im Header\\
& & Briefkopf im Header\\
& & Briefkopf im Header\\
& & Briefkopf im Header\\
\end{tabular}
}{}{}{}

\begin{document}

\thispagestyle{firstpage}
Text auf Seite 1

\newpage

Text auf Seite 2

\end{document}
Wenn das ganze aber tatsächlich ein Brief werden soll, würde ich eher zu scrlttr2 als letter raten. Dort ist der Briefbogen komplett unabhängig von Dingen wie Kopf- und Fußzeilendefinitionen. Für den Briefkopf kann man wahlweise aus einer Anzahl an vordefinierten Köpfen wählen, oder sich mit \firsthead selbst einen basteln. Näheres ist der KOMA-Script-Anleitung, scrguide.pdf, zu entnehmen. Beispiele gibt es außerdem auf der KOMA-Script-Homepage und im KOMA-Script-Buch.

voss
19-10-2010, 17:18
Das Problem ist hier, dass "Text auf Seite 2" auf der zweiten Seite relativ weit unten beginnt. Schuld ist der Header. Kommentiert ihn aus (oder auch nur die Zeilen "& & Briefkopf im Header\\" fängt mein "Text auf Seite 2" oben auf Seite 2 an, so wie es sein soll. Genau das ist auch mein Ausgangsproblem für diesen Threat.


In jedem Fall _erst_ geometry laden. Und dann kannst du Deinem
Briefkopf die Höhe Null verpassen, dann belegt er keinen vertikalen Platz.


\geometry{a4paper,left=40mm,right=30mm, top=2cm, bottom=2cm}
\usepackage{fancyhdr}
\pagestyle{fancy}


\fancyhead{%
\fancyhf{}
\ifnum
\thepage=1
\fontfamily{phv}\fontsize{10pt}{10pt}\selectfont
\makebox(350,0){%
\begin{tabular}[b]{p{6cm}p{4.5cm}l}\rule{0pt}{2cm}
foo & bar & Briefkopf im Header\\
& & Briefkopf im Header\\
& & Briefkopf im Header\\
& & Briefkopf im Header\\
& & Briefkopf im Header\\
\end{tabular}}
\fi
}

Herbert

andi25
21-10-2010, 18:15
@Schweinebacke:

Wow, das ist ja super - endlich funktioniert der Header so, wie ich wollte! Vielen Dank, ich konnte diesen ekelhaften Abstand schon garnicht mehr sehen :-) Und jetzt versteh ich dank Deiner Erklärung auch endlich die "headheight is too small" Meldung!

Das einzige Problem ist jetzt noch, dass jetzt meine Fußzeile (die ich bisher mit Fancy mache) nicht mehr funktioniert. Ich setze in Deinen Code aus #16 einfach



\fancyfoot{
test
}


unter die Kopfzeile und bekomme dann die Meldung



! LaTeX Error: Command \chead already defined.
Or name \end... illegal, see p.192 of the manual.


Das komische ist, dass ich \chead aber im Code garnicht verwende? Verträgt sich denn "Deine Kopfzeile" nicht mit einer Fancy-Fußzeile?

andi25
21-10-2010, 18:30
Mhmm, es liegt wohl doch nicht an Fancy. Auch hier bekomme ich meine Fußzeile nicht zu sehen (aber wenigstens bekomme ich auch keinen Fehler):



\geometry{a4paper,left=40mm,right=30mm, top=2cm, bottom=2cm}
\pagestyle{scrheadings}
\deftripstyle{firstpage}{}{}{%
\fontfamily{phv}\fontsize{10pt}{10pt}\selectfont
\begin{tabular}{p{6cm}p{4.5cm}l} \
\\[0.5cm]
& & Briefkopf im Header\\
& & Briefkopf im Header\\
& & Briefkopf im Header\\
& & Briefkopf im Header\\
& & Briefkopf im Header\\
\end{tabular}
\ifoot{Fußzeile}
}{}{}{}

Schweinebacke
22-10-2010, 08:14
Mhmm, es liegt wohl doch nicht an Fancy. Auch hier bekomme ich meine Fußzeile nicht zu sehen (aber wenigstens bekomme ich auch keinen Fehler):



\geometry{a4paper,left=40mm,right=30mm, top=2cm, bottom=2cm}
\pagestyle{scrheadings}
\deftripstyle{firstpage}{}{}{%
\fontfamily{phv}\fontsize{10pt}{10pt}\selectfont
\begin{tabular}{p{6cm}p{4.5cm}l} \
\\[0.5cm]
& & Briefkopf im Header\\
& & Briefkopf im Header\\
& & Briefkopf im Header\\
& & Briefkopf im Header\\
& & Briefkopf im Header\\
\end{tabular}
\ifoot{Fußzeile}
}{}{}{}

Du hast die Anleitung zu \deftripstyle nicht verstanden. Das \ifoot hat da rein gar nichts verloren. Stattdessen solltest Du das "Fußzeile" einfach in einer der drei Fuß-Argumente schreiben, beispielsweise:
\setkomafont{pageheadfoot}{\fontfamily{phv}\fontsi ze{10pt}{10pt}\selectfont}
\deftripstyle{firstpage}{}{}{%
\begin{tabular}{p{6cm}p{4.5cm}l} \
\\[0.5cm]
& & Briefkopf im Header\\
& & Briefkopf im Header\\
& & Briefkopf im Header\\
& & Briefkopf im Header\\
& & Briefkopf im Header\\
\end{tabular}
}{}{Fußzeile}{}Näheres dazu ist dem Kapitel über scrpage2 in der KOMA-Script-Anleitung, scrguide.pdf, zu entnehmen.

Schweinebacke
22-10-2010, 08:16
Das einzige Problem ist jetzt noch, dass jetzt meine Fußzeile (die ich bisher mit Fancy mache) nicht mehr funktioniert. Du kannst nicht gleichzeitig fancyhdr und scrpage2 verwenden. Entweder machst Du den Seitenstil mit fancyhdr oder mit scrpage2. \deftripstyle gibt es nur bei scrpage2.

andi25
22-10-2010, 13:50
Hallo Schweinebacke,

ah, jetzt verstehe ich! Mir war das System mit deftripstyle wirklich nicht klar. Ich hatte bisher immer nur mit Fancy gearbeitet. Jetzt ist alles genau so, wie ich es haben wollte :_)

Vielen Danke nochmals für alles! Ist wirklich sehr nett, dass Du in Deiner Freizeit so lange an dem Thema drangeblieben bist und mir geholfen hast!!

Eine letzte Frage hätte ich noch: Wenn ich Deinen Code aus #16 ausführe, erscheint auf der zweiten Seite rechts oben immer eine "2" und ich kann mir beim besten Willen nicht erklären wo die herkommt?? (Ich meine natürlich nicht die zwei von "Text auf Seite 2" sondern eine weitere "2" ...)

Viele Grüße, Andi

rstuby
22-10-2010, 14:07
Das ist offenbar die Seitenzahl. Wenn man eine dritte Seite anfügt, kommt dort eine 3.
Die Zahlen kriegt man weg, indem im pagestyle das scrheadings durch empty (gar keine Seitenzahl) oder plain (Seitenzahl unten in der Mitte) ersetzt.

Schweinebacke
22-10-2010, 15:49
Genau. Die Verwendung von Seitenstil scrheadings war nur als Beispiel gedacht. Man kann übrigens auch diesen Seitenstil konfigurieren. Das einfachste dabei ist, einen empty-Seitenstil daraus zu machen: \clearscrheadings. Danach kann ihn auch wieder mit Material füllen, beispielsweise \ofoot{\pagemark}, um die Seitenzahl unten außen einzufügen. Genauso kann man aber auch als Grundseitenstil empty oder plain - wie von rstuby treffend bemerkt - oder auch scrplain verwenden.

Übrigens: Wenn man tatsächlich die Klasse letter verwendet und dort auch \opening verwendet, dann braucht man \thispagestyle{firstpage} gar nicht, weil diese Anweisung bereits von \opening ausgeführt wird. letter definiert bereits einen Seitenstil mit diesem Namen und mit \deftripstyle{firstpage} wird dieser umdefiniert. Man kann aber natürlich auch einen anderen Namen vergeben und den anders benannten Seitenstil dann wieder mit \thispagestyle für eine Seite aktivieren. In meinem Beispiel wurde \thispagestyle{firstpage} benötigt, weil es kein \opening gibt.

andi25
22-10-2010, 16:52
Ah, ok, alles klar. Na dann nochmals vielen Dank und ein schönes Wochenende euch beiden!

Thema damit geschlossen :-)