%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % CONTAINS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % to-geom.sty % Extended geometry utilities % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % DESCRIPTION %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % Allows mid-text, consistent changing of % page geometry. % % This file is part of the TeXoffice-suite % by LDericher % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % PREREQUISITES %%%%%%%%%%%%%%%%%%%%%%%%%%%% % % package geometry % package scrpage2 % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % PACKAGE OPTIONS %%%%%%%%%%%%%%%%%%%%%%%%%% % % twoside: % Activate two-sided typesetting. % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % INTERFACE %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % Border Margins % % \TeXofficeMargin - Default % % \TeXofficeLeftmargin - Left % \TeXofficeRightmargin - Right % \TeXofficeTopmargin - Top % \TeXofficeBottommargin - Bottom % \TeXofficeOddsideMargin - Additional inner % % Set all margins % % \TeXofficeMargin20mm % \TeXofficeResetmargins{} % % ------------------------------------------ % % Marginal notes % % \TeXofficeMarginparsep - Spacing % \TeXofficeMarginparwidth - Width % % Disable marginal notes % % \TeXofficeNomarginpar{} % % ------------------------------------------ % % Header and Footer % % \TeXofficeHeadsep - Header Spacing % \TeXofficeHeadheight - Header Height % \TeXofficeHeadrulegauge - Headrule width % \TeXofficeHeadrulewidth - Headrule span % \TeXofficeHeadrulesep - Headrule Spacing % % \TeXofficeFootsep - Footer Spacing % \TeXofficeFootheight - Footer Height % \TeXofficeFootrulegauge - Footrule width % \TeXofficeFootrulewidth - Footrule span % \TeXofficeFootrulesep - Footrule Spacing % % Disable rules % % \TeXofficeNoheadrule{} % \TeXofficeNofootrule{} % % Disable everything % % \TeXofficeNoheader{} % \TeXofficeNofooter{} % % Setting Header and Footer % % \TeXofficeHeader % {content} % \TeXofficeFooter % {content} % \TeXofficeAdjustheader % {content} % \TeXofficeAdjustfooter % {content} % Arguments: % content - Content to be placed % % ------------------------------------------ % % Inverse printer scaling % % Find this by e.g. printing out a box of % fixed size: % % \begin{tabular}{@{}|@{}p{100mm}@{}|@{}}% % \hline% % \begin{minipage}[c][100mm][c]{100mm}% % \end{minipage} \tabularnewline% % \hline% % \end{tabular}% % % Then measure the resulting distance. If % that example results in 98mm on a printed % page, TeXofficePrintScale should be set to % % 98/100 = .98 % % Default value works fine most of the time. % % \TeXofficePrintscale % % ------------------------------------------ % % Measurements % % \@TOGeomGetheight % {variable} % {content} % \@TOGeomGetwidth % {variable} % {content} % Arguments: % variable - length type variable to set % content - any content to be measured % Measure height or width of any content % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % AUTHOR %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % Joern-Michael 'LDericher' Miehe % jmm@jmmworks.de % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % EXAMPLES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % Typesetting default-margined page(s) with % default LaTeX-size header and footer: % % \documentclass[a4paper]{scrreprt} % \usepackage{to-geom} % \usepackage{lipsum} % % \begin{document} % \section{Section} % \lipsum % \end{document} % %------------------------------------------- % % Changing layout in mid-text % % \usepackage{to-geom} % \usepackage{lipsum} % % \section{Section} % % Default header, no marginal notes, % % default footer % \lipsum % % \TeXofficeHeadheight12pt % \TeXofficeGeometry % % Smaller header, no marginal notes, % % default footer % \lipsum % % \TeXofficeMarginparwidth1in % \TeXofficeNofooter % \pagestyle{empty} % \TeXofficeGeometry % % Smaller header, 1in of marginal notes, % % no footer % \lipsum % %------------------------------------------- % % Saving and loading layouts works % as defined by package 'geometry' % % \usepackage{to-geom} % \usepackage{lipsum} % % \section{Section} % % Default header, no marginal notes, % % default footer % \savegeometry{default} % \lipsum % % \TeXofficeMarginparwidth1in % \TeXofficeNofooter % \TeXofficeGeometry % % Default header, 1in of marginal notes, % % no footer % \savegeometry{fancy} % \pagestyle{empty} % \lipsum % % \loadgeometry{default} % % Default header, no marginal notes, % % default footer % \pagestyle{plain} % \lipsum % % \loadgeometry{fancy} % % Default header, 1in of marginal notes, % % no footer % \pagestyle{empty} % \lipsum % %------------------------------------------- % % For head- and/or footrules, try adding % % \TeXofficeHeadrulegauge.4pt % \TeXofficeFootrulegauge.4pt % \TeXofficeGeometry % Apply! % % somewhere. % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \NeedsTeXFormat{LaTeX2e} \ProvidesPackage{to-geom}[2014/03/01 TeXoffice geometry utilities] %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Package options % Book layout \DeclareOption{twoside}{% \typeout{TOGeom enters twosided typesetting mode.}% \def\@TOGeomTwosideSwitch{}% } % Eat unknown options \DeclareOption*{% \typeout{TOGeom eats \CurrentOption.}% \PackageWarningNoLine{to-geom}{Script devoured the unknown: \CurrentOption}% } % Finalize TeXoffice options \ProcessOptions\relax %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Packages \RequirePackage{geometry} \RequirePackage{scrlayer-scrpage} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Customizing header and footer % Use normal font in header and footer \setkomafont{pageheadfoot}{\normalfont} % Reset fields \clearscrheadings % Use header and footer everywhere \pagestyle{scrheadings} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Use header and footer on title page \let\@TOGeomOldmaketitle\maketitle % Rename \maketitle to \@TOGeomOldmaketitle \let\@TOGeomOldtoc\tableofcontents % Rename \maketitle to \@TOGeomOldmaketitle \renewcommand{\maketitle}{% % Redefine \maketitle by ... \@TOGeomOldmaketitle% % ... using old \maketitle \thispagestyle{scrheadings}% % ... and setting the usual pagestyle } \renewcommand{\tableofcontents}{% Redefine \tableofcontents by ... \@TOGeomOldtoc% % ... using old \maketitle \thispagestyle{scrheadings}% % ... and setting the usual pagestyle } %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Variables \newlength\TeXofficeMargin % Default border margin \newlength\TeXofficeOddsideMargin % Inner/Left binding offset \newlength\TeXofficeLeftmargin % Left margin \newlength\TeXofficeRightmargin % Right margin \newlength\TeXofficeTopmargin % Top margin \newlength\TeXofficeBottommargin % Bottom margin \newlength\TeXofficeMarginparsep % Maximum marginal notes spacing \newlength\TeXofficeMarginparwidth % Marginal notes width \newlength\TeXofficeHeadsep % Maximum header spacing \newlength\TeXofficeHeadheight % Header height \newlength\TeXofficeHeadrulegauge % Header separation rule thickness \newcommand{\TeXofficeHeadrulewidth} % Header separation rule span {\textwidth} % % Defaults to full text width \newcommand{\TeXofficeHeadrulesep} % Header separation rule spacing {.5\TeXofficeHeadsep} % % Defaults to half the headsep \newlength\TeXofficeFootsep % Maximum footer spacing \newlength\TeXofficeFootheight % Footer height \newlength\TeXofficeFootrulegauge % Footer separation rule thickness \newcommand{\TeXofficeFootrulewidth} % Footer separation rule span {\textwidth} % % Defaults to full text width \newcommand{\TeXofficeFootrulesep} % Footer separation rule spacing {.5\TeXofficeFootsep} % % Defaults to half the footsep \newcommand{\TeXofficePrintscale} % Printer specific scaling (default conditions) {0.964912281} \renewcommand{\TeXofficePrintscale}{1} % Printer specific scaling (perfect conditions) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Commands for geometry % Internal, hidden variables \newlength\@TOGeomHeadHeight % Header height \newlength\@TOGeomFootHeight % Footer height \newlength\@TOGeomHeadSep % Header spacing \newlength\@TOGeomFootSep % Footer spacing \newlength\@TOGeomFootSkip % Footer skipping \newlength\@TOGeomOddsideMargin % Inner/Left binding offset \newlength\@TOGeomLeftMargin % Left border margin \newlength\@TOGeomTopMargin % Top border margin \newlength\@TOGeomRightMargin % Right border margin \newlength\@TOGeomBottomMargin % Bottom border margin \newlength\@TOGeomMarginparSep % Marginal notes spacing \newlength\@TOGeomMarginparWidth % Marginal notes width % Flush settings \newcommand{\TeXofficeGeometry}{% % Normally, just use the set headheight value \@TOGeomHeadHeight\TeXofficeHeadheight% % If headheight is defined (>0) \ifdim\@TOGeomHeadHeight>\z@% % Then use set spacing value \@TOGeomHeadSep\TeXofficeHeadsep% % If a headrule should be drawn \ifdim\TeXofficeHeadrulegauge>\z@% % Add space for the headrule \addtolength{\@TOGeomHeadHeight}{\TeXofficeHeadrulegauge}% \addtolength{\@TOGeomHeadHeight}{\TeXofficeHeadrulesep}% % Take space from the head spacing \addtolength{\@TOGeomHeadSep}{-\TeXofficeHeadrulegauge}% \addtolength{\@TOGeomHeadSep}{-\TeXofficeHeadrulesep}% \fi% \else% % Else use no spacing \@TOGeomHeadSep\z@% \fi% % Adapt values to printer \@TOGeomOddsideMargin\TeXofficePrintscale\TeXofficeOddsideMargin% \@TOGeomLeftMargin\TeXofficePrintscale\TeXofficeLeftmargin% \@TOGeomTopMargin\TeXofficePrintscale\TeXofficeTopmargin% \@TOGeomRightMargin\TeXofficePrintscale\TeXofficeRightmargin% \@TOGeomBottomMargin\TeXofficePrintscale\TeXofficeBottommargin% \@TOGeomMarginparWidth\TeXofficePrintscale\TeXofficeMarginparwidth% % Normally, just use the set footheight value \@TOGeomFootHeight\TeXofficeFootheight% % If footheight is defined (>0) \ifdim\@TOGeomFootHeight>\z@% % Then use set spacing value \@TOGeomFootSep\TeXofficeFootsep% % If a footrule should be drawn \ifdim\TeXofficeFootrulegauge>\z@% % Add space for the footrule \addtolength{\@TOGeomFootHeight}{\TeXofficeFootrulegauge}% \addtolength{\@TOGeomFootHeight}{\TeXofficeFootrulesep}% % Take space from the foot spacing \addtolength{\@TOGeomFootSep}{-\TeXofficeFootrulegauge}% \addtolength{\@TOGeomFootSep}{-\TeXofficeFootrulesep}% \fi% % Then use separation and height for skip value \@TOGeomFootSkip\@TOGeomFootSep% \addtolength{\@TOGeomFootSkip}{\@TOGeomFootHeight}% % Because footer centers around footskip line % placement must be adjusted relative to textheight \addtolength{\@TOGeomFootSkip}{-.5\@TOGeomFootHeight}% % ... and relative to paper bottom \addtolength{\@TOGeomBottomMargin}{.5\@TOGeomFootHeight}% \else% % Else use no spacing \@TOGeomFootSkip\z@% \fi% % % If TeXofficemarginparwidth is defined (>0) \ifdim\TeXofficeMarginparwidth>\z@% % Then use set spacing value \@TOGeomMarginparSep\TeXofficeMarginparsep% \else% % Else use no spacing \@TOGeomMarginparSep\z@% \fi% % \def\@TOGeomTwoside{twoside=false}% \ifdefined\@TOGeomTwosideSwitch% \def\@TOGeomTwoside{twoside=true}% \fi% % % Create and use new geometry \expandafter\newgeometry\expandafter{% % with orientation, \@TOGeomTwoside, bindingoffset=\@TOGeomOddsideMargin, % margins, left=\@TOGeomLeftMargin, right=\@TOGeomRightMargin, top=\@TOGeomTopMargin, bottom=\@TOGeomBottomMargin,% % header definitions, headheight=\@TOGeomHeadHeight, headsep=\@TOGeomHeadSep,% % footer definitions, footskip=\@TOGeomFootSkip,% % margin notes definitions and marginparsep=\@TOGeomMarginparSep, marginparwidth=\@TOGeomMarginparWidth,% % include every content into that includeall,% % showframe,% }% } % Propagate default border margin to margin variables \newcommand{\TeXofficeResetmargins}{% % reset variable to default \TeXofficeLeftmargin\TeXofficeMargin% \TeXofficeRightmargin\TeXofficeMargin% \TeXofficeTopmargin\TeXofficeMargin% \TeXofficeBottommargin\TeXofficeMargin% } % Remove headrule from layout \newcommand{\TeXofficeNoheadrule}{% \TeXofficeHeadrulegauge\z@% } % Remove footrule from layout \newcommand{\TeXofficeNofootrule}{% \TeXofficeFootrulegauge\z@% } % Remove header from layout \newcommand{\TeXofficeNoheader}{% % alter layout \TeXofficeNoheadrule% \TeXofficeHeadheight\z@% % empty \@TOGeomHeadOut{}% } % Remove footer from layout \newcommand{\TeXofficeNofooter}{% % alter layout \TeXofficeNofootrule% \TeXofficeFootheight\z@% % empty \@TOGeomFootOut{}% } % Remove marginal notes from layout \newcommand{\TeXofficeNomarginpar}{% \TeXofficeMarginparwidth\z@% } % Internal, hidden variables \newlength\@TOGeomAdditionalDepth % Height deviation by depth component % Measure full height (including below baseline) \newcommand{\@TOGeomGetheight}[2]{% % Measure height of input (above baseline) \settoheight{#1}{\vbox{#2}}% % Measure depth of input (below baseline) \settodepth{\@TOGeomAdditionalDepth}{\vbox{#2}}% % Return \addtolength{#1}{\@TOGeomAdditionalDepth}% } % Measure full width (including below baseline) \newcommand{\@TOGeomGetwidth}[2]{% % Measure width of input (above baseline) \settowidth{#1}{\hbox{#2}}% } %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Commands for header/footer output % Use commands from scrpage2 \let\@TOGeomHeadOut\chead \let\@TOGeomFootOut\cfoot % Internal command for setting header \newcommand{\@TOGeomHeader}[1]{% \@TOGeomHeadOut{% % Use total headheight and textwidth \begin{minipage}[t][\@TOGeomHeadHeight][t]{\textwidth}% % Output content #1% % If a headrule should be present \ifdim\TeXofficeHeadrulegauge>\z@% % draw it at the bottom of our minipage \vfill% \kern\z@\hfill\rule{\TeXofficeHeadrulewidth}{\TeXofficeHeadrulegauge}\hfill\kern\z@% \fi% \end{minipage}% }% } % Internal command for setting footer \newcommand{\@TOGeomFooter}[1]{% \@TOGeomFootOut{% % Use total footheight and textwidth \begin{minipage}[t][\@TOGeomFootHeight][t]{\textwidth}% % If a footrule should be present \ifdim\TeXofficeFootrulegauge>\z@% % draw it at the top of our minipage \kern\z@\hfill\rule{\TeXofficeFootrulewidth}{\TeXofficeFootrulegauge}\hfill\kern\z@% \vfill% \fi% % Output content #1% \end{minipage}% }% } % Stretch content into the present header \newcommand{\TeXofficeHeader}[1]{% % Output to header \@TOGeomHeader{% % Use usable headheight and full textwidth \begin{minipage}[t][\TeXofficeHeadheight][t]{\textwidth}% % Output content #1% \end{minipage}% }% } % Stretch content into the present footer \newcommand{\TeXofficeFooter}[1]{% % Output to footer \@TOGeomFooter{% % Use usable footheight and full textwidth \begin{minipage}[t][\TeXofficeFootheight][t]{\textwidth}% % Output content #1% \end{minipage}% }% } % Create header snugly holding the content \newcommand{\TeXofficeAdjustheader}[1]{% % Measure rendered height of input \@TOGeomGetheight{\TeXofficeHeadheight}{#1}% % Setting a minimum improves this \ifdim\TeXofficeHeadheight<14.0675pt% % Value generated by bisection testing \TeXofficeHeadheight14.0675pt% \fi% % Recalculate geometry \TeXofficeGeometry% % Output to header \TeXofficeHeader{#1}% } % Create footer snugly holding the content \newcommand{\TeXofficeAdjustfooter}[1]{% % Measure rendered height of input \@TOGeomGetheight{\TeXofficeFootheight}{#1}% % Recalculate geometry \TeXofficeGeometry% % Output to footer \TeXofficeFooter{#1}% } %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Default Values % Mostly as in default KOMAscript a4 page setup \TeXofficeHeadheight18pt % Header height 18 points \TeXofficeHeadsep21pt % Header margin 21 points \TeXofficeHeadrulegauge0pt % No header separation rule \TeXofficeFootheight18pt % Footer height 18 points \TeXofficeFootsep32pt % Footer margin 32 points \TeXofficeFootrulegauge0pt % No footer separation rule \TeXofficeMarginparwidth0pt % No marginal notes section \TeXofficeMarginparsep12pt % Marginal notes margin 12 points \TeXofficeOddsideMargin0pt % Additional inner margin \TeXofficeMargin20mm % Default border margin 2 centimeters \TeXofficeResetmargins % Propagate border margins \TeXofficeLeftmargin25mm % Left margin 2.5 centimeters %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Create default geometry \TeXofficeGeometry