add to-geom package

This commit is contained in:
Jörn-Michael Miehe 2025-05-10 00:32:43 +00:00
parent 8ec7d1efd2
commit 0e6f675648
2 changed files with 604 additions and 0 deletions

View file

@ -2,3 +2,10 @@ FROM docker.io/ldericher/autodoc:diagram
# source: https://stackoverflow.com/a/39420880
COPY pdfa /opt/pdfa
# install TeXoffice
COPY --chown=root:root \
texoffice \
/opt/texlive/texdir/texmf-dist/tex/latex/texoffice
RUN /opt/texlive/texdir/bin/default/texconfig rehash

View file

@ -0,0 +1,597 @@
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 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