PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Seitenränder auslesen - komisches Verhalten von geometry



AureusPhoenix
16-02-2014, 09:53
Hi Leute,
bin grad dabei mir mithilfe von marginpar einen kleinen Notizbefehl zu schreiben. Nun möchte ich, das dieser Befehl immer die richtige marginparwidth verwendet und ich das nicht jedes mal vorher einstellen muss.

Also hab ich mir gedacht ... ok, einfach den Wert "outer" bzw. "right" von geometry auslesen. Aber irgendwie scheint das nicht zu gehen.

Die einzigen Werte die es zu geben scheint (soweit ich das bei google gefunden habe) sind oddsidemargin und evensidemargin. Aber die Werte ergeben für mich einfach keinen Sinn.

Hier ein Minimalbeispiel bei dem ich das Paket printlen benutze um mir diverse längen anzeigen zu lassen:


\documentclass[a4paper,twoside]{scrartcl}
\usepackage[paper=a4paper,inner=20mm, outer=25mm,top=20mm,bottom=40mm]{geometry}

\usepackage{printlen}
\usepackage{xifthen}

%------------------------------------------------------------------------------%


\begin{document}

\setlength{\marginparwidth}{0.5\paperwidth-0.5\textwidth}

\noindent
Textwidth: \uselengthunit{mm}\printlength{\textwidth}\\
Paperwidth: \uselengthunit{mm}\printlength{\paperwidth}\\
Oddsidemargin: \uselengthunit{mm}\printlength{\oddsidemargin}\\
Evensidemargin: \uselengthunit{mm}\printlength{\evensidemargin}\\
Marginparwidth:\uselengthunit{mm}\printlength{\mar ginparwidth}\\

\end{document}


Wenn man ein wenig mit inner und outer rum spielt, sieht man, das die Werte praktisch nie mit evensidemargin und oddsidemargin übereinstimmen. Auch der Versuch (paperwidth-textwidth)/2 kann nicht zum Erfolg führen, da innen und außen ja sehr unterschiedliche Ränder sein könnten.

Kann mir jemand sagen, ob es irgend eine andere Möglichkeit gibt, die Breite des rechten/äußeren Randbereiches auszulesen?

Vielen Dank im Voraus!
Beste Grüße,
AureusPhoenix

esdd
16-02-2014, 12:30
Das Seitenlayout kannst du dir mit dem Paket layout anschauen:


\documentclass[a4paper,twoside]{scrartcl}
\usepackage[paper=a4paper,inner=20mm,outer=25mm,top=20mm,botto m=40mm
]{geometry}
\usepackage{layout}
\usepackage{printlen}

\begin{document}
\layout
Marginparwidth:\uselengthunit{mm}\printlength{\mar ginparwidth}
\end{document}

Gruß
Elke

Auf Seite 3 steht dann Marginparwidth:31.49963mm, was, wie man auf der Abbildung auch sieht, breiter als der Rand ist. In der Abbildung siehst du auch, was oddsidemargin ist.

http://www.mrunix.de/forums/attachment.php?attachmentid=5979&stc=1&d=1392553192


Über das Paket geometry kannst du doch aber marginparsep und marginparwidth direkt vorgeben?


\usepackage[paper=a4paper,inner=20mm,outer=25mm,top=20mm,botto m=40mm,
marginparsep=2.5mm, marginparwidth=20mm
]{geometry}


http://www.mrunix.de/forums/attachment.php?attachmentid=5980&stc=1&d=1392553349

Auf Seite 3 steht dann Marginparwidth:19.99976mm

AureusPhoenix
16-02-2014, 17:30
Hi Elke,
vielen Dank! Das Paket hat mir echt weiter geholfen. Nach ein klein wenig "Mathematik" ist folgendes raus gekommen:



\setlength{\marginparwidth}{\evensidemargin+\hoffs et+1in-2\marginparsep}
\setlength{\marginparwidth}{\paperwidth-\hoffset-1in-\oddsidemargin-\textwidth-2\marginparsep}


Beide Zeilen sind vollkommen äquivalent und geben bei jeder getesten Einstellung die korrekte Breite für marginparwidth zurück.


Zu deiner Frage, warum ich es nicht einfach von Hand einstelle ...
Das ist schon richtig. Wenn ich selber was schreibe, dann ist das auch kein Problem. Ich geb meine kleinen Pakete aber gerne auch an Kollegen weiter. Wenn ich denen erst 5 Minuten erklären muss, was sie alles einzustellen haben, sind die sofort abgeschreckt. Der Code der meisten ist ein Sammelsurium zurecht kopierter Headerbestandteile verschiedener Webseiten und Anleitungen. Meist wissen sie nicht mal was die einzelnen Pakete tun oder haben gar Pakete drin, die sich gegenseitig nicht wirklich vertragen.


Nochmals vielen Dank!
Grüße,
AureusPhoenix