352 lines
12 KiB
Plaintext
352 lines
12 KiB
Plaintext
|
%% hgb.sty
|
||
|
%% This file is part of the Hagenberg Thesis package for creating bachelors's and masters's theses
|
||
|
%% Author: Wilhelm Burger (wilbur@ieee.org)
|
||
|
%% GitHub: https://github.com/Digital-Media/HagenbergThesis
|
||
|
%% File encoding: ASCII
|
||
|
|
||
|
\NeedsTeXFormat{LaTeX2e}
|
||
|
\ProvidesPackage{hgb}[2023/11/06]%%AUTO
|
||
|
\typeout{******************* hgb.sty (options=\@nameuse{opt@hgb.sty}) ***********************}
|
||
|
|
||
|
% Create a default/fallback main language so it is set no matter what
|
||
|
\providecommand{\hgb@MainLanguage}{german}
|
||
|
|
||
|
\RequirePackage{xifthen}
|
||
|
|
||
|
\newboolean{hgb@SmartQuotesOn}
|
||
|
\setboolean{hgb@SmartQuotesOn}{false} % smart quotes are turned off by default
|
||
|
|
||
|
\newboolean{hgb@noUpdateCheck}
|
||
|
\setboolean{hgb@noUpdateCheck}{false} % update check is perfomed by default
|
||
|
|
||
|
% Handle package options passed from the class file
|
||
|
\DeclareOption{english}{\renewcommand{\hgb@MainLanguage}{english}}
|
||
|
\DeclareOption{german}{\renewcommand{\hgb@MainLanguage}{german}}
|
||
|
\DeclareOption{ngerman}{\renewcommand{\hgb@MainLanguage}{german}}
|
||
|
\DeclareOption{smartquotes}{\setboolean{hgb@SmartQuotesOn}{true}}
|
||
|
\DeclareOption{noUpdateCheck}{\setboolean{hgb@noUpdateCheck}{true}}
|
||
|
\DeclareOption*{\ClassWarning{hgb}{Unknown option '\CurrentOption'.}}
|
||
|
\ProcessOptions*
|
||
|
|
||
|
%% Required Packages ----------------------------------------------------------
|
||
|
|
||
|
|
||
|
\RequirePackage{lmodern} % use Latin Modern Fonts
|
||
|
\RequirePackage{cmap} % make generated PDF files "searchable and copyable"
|
||
|
\RequirePackage[utf8]{inputenc}
|
||
|
\RequirePackage[T1]{fontenc} % T1 font encoding for improved hyphenation
|
||
|
|
||
|
% Set main language by selectively loading babel with the 'main' parameter (babel 3.9+)
|
||
|
\ifthenelse{\equal{\hgb@MainLanguage}{german}}%
|
||
|
{\RequirePackage[english,main=ngerman]{babel}}{}
|
||
|
\ifthenelse{\equal{\hgb@MainLanguage}{english}}%
|
||
|
{\RequirePackage[main=english,ngerman]{babel}}{}
|
||
|
|
||
|
%% Setup for smart quotes (csquotes package) -- experimental! ----------------------------------
|
||
|
|
||
|
\ifthenelse{\boolean{hgb@SmartQuotesOn}}{
|
||
|
\languageshorthands{none}% %% turn off babel's shorthands (permanently)
|
||
|
\usepackage[autostyle=true,german=quotes]{csquotes}%
|
||
|
\MakeOuterQuote{"}%
|
||
|
\EnableQuotes}{}
|
||
|
|
||
|
%% Language environments ------------------------------------------------------
|
||
|
|
||
|
% Switch from German to English (babel)
|
||
|
\newenvironment{english}%
|
||
|
{\begin{otherlanguage}{english}%
|
||
|
\ifthenelse{\boolean{hgb@SmartQuotesOn}}{\EnableQuotes}{}}%
|
||
|
{\end{otherlanguage}\ignorespacesafterend}%
|
||
|
|
||
|
% Switch from English to German (babel)
|
||
|
\newenvironment{german}%
|
||
|
{\begin{otherlanguage}{ngerman}%
|
||
|
\ifthenelse{\boolean{hgb@SmartQuotesOn}}{\EnableQuotes}{}}%
|
||
|
{\end{otherlanguage}}%
|
||
|
|
||
|
|
||
|
%% Date-related stuff ---------------------------------------------------------
|
||
|
|
||
|
\edef\hgbDate{\csname ver@hgb.sty\endcsname} % get this package's build date
|
||
|
|
||
|
\RequirePackage{xstring} % for string operations
|
||
|
\RequirePackage[english,ngerman,calc,useregional,showdow=false]{datetime2} % replaces obsolete 'datetime' package
|
||
|
|
||
|
% https://tex.stackexchange.com/questions/316253/latex-convert-date-string-format-from-mm-dd-yyyyy-to-dd-mm-yyyy/316257#316257
|
||
|
\newcommand{\PackageToDTMdate}[2]{% converts date in 'YYYY/MM/DD' format to DTMdate and saves to #2
|
||
|
\StrLeft{#1}{4}[\myYear]%
|
||
|
\StrRight{#1}{2}[\myDay]%
|
||
|
\StrMid{#1}{6}{7}[\myMonth]%
|
||
|
\DTMsavenoparsedate{#2}{\myYear}{\myMonth}{\myDay}{-1}%
|
||
|
%\DTMdate{\myYear-\myMonth-\myDay}%
|
||
|
}
|
||
|
|
||
|
\PackageToDTMdate{\hgbDate}{hgbPackageDate} % converts package date to DTM format: \DTMusedate{hgbPackageDate}
|
||
|
\DTMsavenoparsedate{hgbToday}{\the\year}{\the\month}{\the\day}{-1} % today's date in DTM format: \DTMusedate{hgbToday}
|
||
|
|
||
|
\newcounter{hgbAgeLimit}\setcounter{hgbAgeLimit}{365} % warn if package is older than 1 year
|
||
|
\newcount\hgbAge
|
||
|
\DTMsaveddatediff{hgbToday}{hgbPackageDate}{\hgbAge}
|
||
|
|
||
|
\newcommand{\hgbWarnOldPackage}[1]{\PackageWarning{hagenberg-thesis}{%
|
||
|
^^J****************************************************************
|
||
|
^^JNOTE: 'hagenberg-thesis' is #1 days old - pls. check for updates
|
||
|
^^Jat https://github.com/Digital-Media/HagenbergThesis
|
||
|
^^J****************************************************************
|
||
|
^^J} % https://tex.stackexchange.com/questions/6529/newline-linebreak-in-message
|
||
|
}
|
||
|
|
||
|
\ifthenelse{\hgbAge>\value{hgbAgeLimit} \AND \NOT \boolean{hgb@noUpdateCheck}}%
|
||
|
{\hgbWarnOldPackage{\the\hgbAge}}{}
|
||
|
|
||
|
|
||
|
%% ------------------------------------------------------
|
||
|
|
||
|
\RequirePackage{upquote} % uses "right" quotes in the verbatim environment
|
||
|
\RequirePackage{marvosym}
|
||
|
\providecommand{\euro}[0]{\EUR\xspace} % for compatibility with 'eurosym' macro
|
||
|
|
||
|
\RequirePackage{graphicx}
|
||
|
\RequirePackage[percent]{overpic} % to allow text/graphics overlays on pictures
|
||
|
\RequirePackage{pict2e} % extends the LaTeX 'picture' environment
|
||
|
|
||
|
\RequirePackage{xcolor}
|
||
|
\newcommand{\@MissingArg}[1]{\textcolor{red}{#1}}
|
||
|
|
||
|
\RequirePackage[T1,hyphens,obeyspaces,spaces,lowtilde]{url}
|
||
|
\urlstyle{sf}
|
||
|
|
||
|
\RequirePackage{verbatim}
|
||
|
\RequirePackage{moreverb}
|
||
|
\def\verbatimtabsize{2\relax}
|
||
|
|
||
|
\RequirePackage{ifpdf}
|
||
|
\ifpdf % LaTeX is in native PDF mode (pdflatex)
|
||
|
\RequirePackage{epstopdf} % converting EPS to PDF for pdflatex
|
||
|
% \pdfcompresslevel=0 % 0 = no compression, 9 = max. compression
|
||
|
% \pdfimageresolution=300
|
||
|
\else % LaTeX is in emulation mode (DVI-PS-PDF)
|
||
|
\RequirePackage[hyphenbreaks]{breakurl} % allows line breaks in URLs without pdflatex (DIV, PS, PDF)
|
||
|
\fi
|
||
|
|
||
|
|
||
|
%% hyperref Setup -------------------------------------------------------------
|
||
|
\RequirePackage[unicode]{hyperref} % utf8-change
|
||
|
\hypersetup{
|
||
|
linktocpage=true, % make page number, not text, be link on TOC, LOF and LOT
|
||
|
colorlinks=false, % don't uses colored links (because this shows up in printing!)
|
||
|
pdfborder={0 0 0.5}, % use a thinner (0.5pt) border around all PDF links
|
||
|
allbordercolors={blue}, % this only works with a named color, any effect?
|
||
|
%breaklinks = true % allow links to break over lines by making links over multiple lines (obsolete)
|
||
|
}
|
||
|
|
||
|
% Redefine certain commands for bookmarks and meta-data
|
||
|
\let\oldand\and
|
||
|
\pdfstringdefDisableCommands{%
|
||
|
\def\\{}%
|
||
|
\def\url#1{<#1>}%
|
||
|
\def\and{\texorpdfstring{\oldand}{, }}%
|
||
|
}
|
||
|
|
||
|
\RequirePackage[figure,table,table*]{hypcap} % do not redefine figure* for use in article (without captions)
|
||
|
|
||
|
%% Miscellaneous Utility Commands ---------------------------------------------
|
||
|
|
||
|
\newcommand\trennstrich{%
|
||
|
\nopagebreak[4]
|
||
|
\vskip 1.5ex %
|
||
|
% \nopagebreak[4]
|
||
|
\noindent\makebox[\textwidth]{\rule{4cm}{0.4pt}}
|
||
|
\vskip 2.5ex}
|
||
|
|
||
|
\newcommand{\SuperPar}[0]{%
|
||
|
\PackageWarning{hgb}{Due to frequent misuse, macro \protect\SuperPar\space has been removed.}
|
||
|
}
|
||
|
|
||
|
\newcommand{\email}[1]{%
|
||
|
\texorpdfstring{\href{mailto:#1}{\nolinkurl{#1}}}{<#1>}%
|
||
|
}
|
||
|
|
||
|
% Test box for print proofing
|
||
|
\newcommand{\calibrationbox}[2]{% parameters: #1=width, #2=height
|
||
|
\setlength{\unitlength}{1.0mm}%
|
||
|
\begin{picture}(#1,#2)%
|
||
|
\linethickness{0.05mm}%
|
||
|
\put(0,0){\dashbox{0.2}(#1,#2)%
|
||
|
{\parbox{#1mm}{%
|
||
|
\centering\footnotesize
|
||
|
width $ = #1 \textrm{mm}$\\
|
||
|
height $ = #2 \textrm{mm}$
|
||
|
}}}\end{picture}
|
||
|
}
|
||
|
|
||
|
% Test box for print proofing (obsolete - use \calibrationbox)
|
||
|
\newcommand{\Messbox}[2]{
|
||
|
\calibrationbox{#1}{#2}
|
||
|
}
|
||
|
|
||
|
\newcommand{\ShowParameter}[1]{\the#1\showthe#1} % to display TeX parameters
|
||
|
%Beispiel: clubpenalty = \ShowParameter{\clubpenalty}
|
||
|
|
||
|
|
||
|
%% Layout Settings ------------------------------------------------------------
|
||
|
|
||
|
\frenchspacing % creates normal spacing between sentences
|
||
|
\setlength{\parskip}{0pt plus 0.1pt}
|
||
|
\raggedbottom %\flushbottom
|
||
|
|
||
|
\RequirePackage{float}
|
||
|
\floatstyle{plain}
|
||
|
|
||
|
% Captions with font size "small" and additional margin spacing
|
||
|
\RequirePackage[small,bf]{caption}
|
||
|
\DeclareCaptionStyle{ruled}{labelfont=bf,labelsep=colon}
|
||
|
\setlength{\captionmargin}{5mm}
|
||
|
\setlength{\abovecaptionskip}{10pt}
|
||
|
\setlength{\belowcaptionskip}{10pt}
|
||
|
|
||
|
%% Disable \footnote in captions:
|
||
|
\newcommand{\@WarnFootnoteInCaption}{%
|
||
|
\GenericError{}{Package hgb Error: footnotes in captions are disabled}%
|
||
|
{How to fix: do not place footnotes in captions!}{}}%
|
||
|
\DeclareCaptionTextFormat{nofootnotes}{%
|
||
|
\renewcommand{\footnote}[1]{\@WarnFootnoteInCaption\relax}#1}
|
||
|
\captionsetup{textformat=nofootnotes}
|
||
|
|
||
|
|
||
|
% Make float placement easier
|
||
|
\renewcommand{\floatpagefraction}{.9} % previously: .5
|
||
|
\renewcommand{\textfraction}{.1} % previously: .2
|
||
|
\renewcommand{\topfraction}{.9} % previously: .7
|
||
|
\renewcommand{\bottomfraction}{.7} % previously: .3
|
||
|
\setcounter{topnumber}{3} % previously: 2
|
||
|
\setcounter{bottomnumber}{2} % previously: 1
|
||
|
\setcounter{totalnumber}{5} % previously: 3
|
||
|
|
||
|
\RequirePackage{enumitem} % fix excessive vertical spacing in lists
|
||
|
\setlist{%
|
||
|
partopsep = .0ex plus .1ex,
|
||
|
topsep = .6ex plus .3ex,
|
||
|
itemsep = .0ex plus .1ex,
|
||
|
parsep = .4ex plus .2ex
|
||
|
}
|
||
|
|
||
|
\newenvironment{nowidows}%
|
||
|
{\clubpenalty=10000%
|
||
|
\widowpenalty=10000%
|
||
|
\displaywidowpenalty=10000}%
|
||
|
{}
|
||
|
%Example:
|
||
|
% \begin{nowidows}
|
||
|
% Any text where no widows are allowed
|
||
|
% \end{nowidows}
|
||
|
|
||
|
\RequirePackage{lengthconvert} % for showing the current textwidth in mm
|
||
|
|
||
|
|
||
|
% Setup for Table of Contents (ToC)
|
||
|
|
||
|
%\RequirePackage[tocgraduated,tocbreaksstrict]{tocstyle}% %% Note: tocstyle is unsupported!
|
||
|
%\usetocstyle{classic}%
|
||
|
|
||
|
\RequirePackage{tocbasic}% %% tocbasic is part of koma script
|
||
|
\DeclareTOCStyleEntry[entryformat=\bfseries\textsf]{tocline}{chapter}%
|
||
|
|
||
|
%% Program environments ----------------------------------------
|
||
|
|
||
|
% Define the program float environment:
|
||
|
\@ifundefined{chapter}%
|
||
|
{\newfloat{program}{tbp}{lop}}%
|
||
|
{\newfloat{program}{tbp}{lop}[chapter]}
|
||
|
|
||
|
\floatstyle{plain}
|
||
|
\restylefloat*{program}
|
||
|
|
||
|
\ifthenelse{\equal{\bbl@main@language}{german} \or \equal{\bbl@main@language}{ngerman}}%
|
||
|
{\floatname{program}{Programm}}{}%
|
||
|
|
||
|
\ifthenelse{\equal{\bbl@main@language}{english}}%
|
||
|
{\floatname{program}{Program}}{}%
|
||
|
|
||
|
%% Experimental items ---------------------------------------------------------
|
||
|
|
||
|
\newenvironment{NarrowList}%
|
||
|
{\begin{list}{}%
|
||
|
{\setlength{\leftmargin}{2.5em}
|
||
|
\setlength{\labelwidth}{1em}
|
||
|
\setlength{\labelsep}{0.5em}
|
||
|
\setlength{\itemsep}{0.5ex}
|
||
|
\setlength{\parsep}{0ex}
|
||
|
\setlength{\topsep}{0ex}
|
||
|
\raggedright
|
||
|
}}%
|
||
|
{\end{list}}
|
||
|
|
||
|
\providecommand{\hgb@PathName}{Pfad}
|
||
|
|
||
|
\newenvironment{FileList}[1]%
|
||
|
{%\paragraph{Pfad:} \url{#1}
|
||
|
\ifthenelse{\equal{\hgb@MainLanguage}{german}}
|
||
|
{\renewcommand{\hgb@PathName}{Pfad}}%
|
||
|
{\renewcommand{\hgb@PathName}{Path}}%
|
||
|
\paragraph{\hgb@PathName: \nolinkurl{#1}}
|
||
|
\begin{list}{}%
|
||
|
{\setlength{\leftmargin}{5cm}
|
||
|
\setlength{\labelwidth}{4cm}
|
||
|
\setlength{\labelsep}{0.25cm}
|
||
|
\setlength{\rightmargin}{0cm}
|
||
|
\setlength{\itemindent}{0cm}
|
||
|
\setlength{\itemsep}{0.5ex}
|
||
|
\setlength{\parsep}{0ex}
|
||
|
\setlength{\topsep}{1ex}
|
||
|
\raggedright
|
||
|
}}%
|
||
|
{\end{list}}
|
||
|
|
||
|
\def\widedotfill{\leaders\hbox to 8pt{\hfil.\hfil}\hfill}
|
||
|
|
||
|
\newcommand{\fitem}[1]{%
|
||
|
\item[\nolinkurl{#1}\widedotfill]
|
||
|
}
|
||
|
|
||
|
% A generic environment that does nothing, e.g., for temporary variable settings:
|
||
|
% \begin{block}
|
||
|
% \setlength{\tabcolsep}{10pt}
|
||
|
% \renewcommand{\arraystretch}{1.50}
|
||
|
% ...
|
||
|
% \end{block}
|
||
|
\newenvironment{block}{}{}
|
||
|
|
||
|
% Gives access to the most recent label assigned (used in longtable example):
|
||
|
\newcommand{\getcurrentlabel}{\@currentlabel}
|
||
|
|
||
|
|
||
|
%% For inserting foreign PDF pages --------------------------------------------
|
||
|
|
||
|
\RequirePackage{pdfpages}
|
||
|
|
||
|
%% Tables ---------------------------------------------------------------------
|
||
|
|
||
|
\RequirePackage{booktabs}
|
||
|
\RequirePackage{longtable}
|
||
|
\RequirePackage{multirow}
|
||
|
|
||
|
|
||
|
%% Prevent subfigure package from being loaded -------------------------------
|
||
|
|
||
|
% The subfigure package is DEPRECATED (see https://ctan.org/pkg/subfigure)!
|
||
|
% We strongly advise against its use since it creates poor output which is not
|
||
|
% compatible with our quality standards. Loading this package is therefore blocked
|
||
|
% by default. We recommend to use the 'tabular' environment instead.
|
||
|
|
||
|
\AtBeginDocument{%
|
||
|
\@ifpackageloaded{subfigure}{%
|
||
|
\PackageError{hgb}{Use of the 'subfigure' package is not supported in this setup, because it is obsolete}{}
|
||
|
\let\subfigure\undefined% just to make sure ...
|
||
|
}%
|
||
|
}%
|
||
|
|
||
|
%% ----------------------------------------------------------------------------
|
||
|
|
||
|
\setlength{\fboxsep}{0mm} %globally zero fbox separator
|