SAT-WiSe-25-26/HSRTReport/Config/Typography.tex

159 lines
5.8 KiB
TeX

% !TEX root = ../HSRTReport.cls
% ==============================================================================
% Typography Configuration Module
% ==============================================================================
% Description: Typography settings including text alignment, spacing, and formatting
% Author: Frederik Beimgraben
% License: Creative Commons CC BY 4.0
% ==============================================================================
% ==============================================================================
% Page Style Configuration
% ==============================================================================
\pagestyle{fancy}
% ==============================================================================
% Line and Paragraph Spacing
% ==============================================================================
% Line spacing
\renewcommand{\baselinestretch}{1.5}
% ==============================================================================
% Text Alignment
% ==============================================================================
% Use justified text (Blocksatz) - this is the default in LaTeX
% No \raggedright command needed
% Enable hyphenation for better text distribution in justified text
% Lower penalties encourage more hyphenation for better spacing
\hyphenpenalty=500
\exhyphenpenalty=500
\tolerance=1000
\emergencystretch=3em
% Prevent excessive word spacing in justified text
\spaceskip=0.3em plus 0.2em minus 0.1em
\xspaceskip=0.6em plus 0.3em minus 0.15em
% ==============================================================================
% Widow and Orphan Control
% ==============================================================================
% Prevent single lines at the beginning or end of a page
% High penalties discourage but don't absolutely prevent widows/orphans
\widowpenalty=10000
\clubpenalty=10000
\displaywidowpenalty=10000
% Prevent page breaks right after section headings
\@beginparpenalty=10000
\@endparpenalty=10000
% ==============================================================================
% Enhanced Page Break Control
% ==============================================================================
% Section page break penalties are handled in PageBreakControl.tex
% Minimum lines on a new page after section break
% Require at least 2 paragraphs (approximately 8-10 lines) after a section
\raggedbottom % Allow variable page heights to avoid bad breaks
\flushbottom % But try to align bottoms when possible
% Configure penalties for better paragraph cohesion
\interlinepenalty=150 % Discourage breaks within paragraphs
\predisplaypenalty=10000 % Prevent breaks before equations
\postdisplaypenalty=10000 % Prevent breaks after equations
\floatingpenalty=20000 % Strongly discourage breaks around floats
% Keep at least two paragraphs together at page boundaries
\setlength{\parskip}{0.5em plus 0.2em minus 0.1em}
\parfillskip=0pt plus 1fil
% ==============================================================================
% Listing and Itemize Environment Protection
% ==============================================================================
% Prevent page breaks in listings
\lstset{
float=H, % Force listings to stay in place
belowskip=-0.5em plus 0.2em, % Adjust spacing
aboveskip=0.5em plus 0.2em,
keepspaces=true,
breaklines=true
}
% Create protected itemize environment that resists page breaks
\newenvironment{protecteditemize}{%
\begin{minipage}{\linewidth}%
\begin{itemize}%
}{%
\end{itemize}%
\end{minipage}%
}
% Create protected enumerate environment
\newenvironment{protectedenumerate}{%
\begin{minipage}{\linewidth}%
\begin{enumerate}%
}{%
\end{enumerate}%
\end{minipage}%
}
% Hook into itemize/enumerate to discourage breaks without redefining
% This avoids conflicts with enumitem package options
\AtBeginEnvironment{itemize}{%
\nopagebreak[4]% Strong discouragement of page break
\interlinepenalty=5000% Discourage breaks within items
}
\AtEndEnvironment{itemize}{%
\nopagebreak[3]% Discourage break after list
}
\AtBeginEnvironment{enumerate}{%
\nopagebreak[4]%
\interlinepenalty=5000%
}
\AtEndEnvironment{enumerate}{%
\nopagebreak[3]%
}
% ==============================================================================
% Needspace Package for Conditional Page Breaks
% ==============================================================================
\usepackage{needspace}
% Section spacing is handled in PageBreakControl.tex
% ==============================================================================
% Float Placement Control
% ==============================================================================
% Adjust float placement to keep figures and tables near their reference
\renewcommand{\floatpagefraction}{0.8} % Float page must be 80% full
\renewcommand{\topfraction}{0.9} % Max 90% of page for top floats
\renewcommand{\bottomfraction}{0.9} % Max 90% of page for bottom floats
\renewcommand{\textfraction}{0.1} % Min 10% of page must be text
\setcounter{topnumber}{2} % Max 2 floats at top of page
\setcounter{bottomnumber}{2} % Max 2 floats at bottom of page
\setcounter{totalnumber}{4} % Max 4 floats per page
% ==============================================================================
% List Formatting
% ==============================================================================
% Define a list paragraph style with no spacing between items
% This will be used for compact lists as required
\newenvironment{listenabsatz}{%
\begin{itemize}[nosep,leftmargin=*]%
}{%
\end{itemize}%
}
% Also provide enumerated version
\newenvironment{listenabsatz*}{%
\begin{enumerate}[nosep,leftmargin=*]%
}{%
\end{enumerate}%
}
% ==============================================================================
% End of Typography Configuration Module
% ==============================================================================