diff options
author | heavydemon21 <nielsstunnebrink1@gmail.com> | 2024-09-27 14:33:15 +0200 |
---|---|---|
committer | heavydemon21 <nielsstunnebrink1@gmail.com> | 2024-09-27 14:33:15 +0200 |
commit | 96775d053500676e0c7daebad70c5f7d3299418d (patch) | |
tree | 99b2bed0322b2316f62bff3f6f88354d0e5e3191 /projdoc.cls | |
parent | 83999b29846e1338e43bf9b2fe7489d778cb7d0c (diff) | |
parent | 3a0cc3f0720ed644d602295dc9d2d6bfc21f2d65 (diff) |
Merge branch 'master' into niels/design
Diffstat (limited to 'projdoc.cls')
-rw-r--r-- | projdoc.cls | 166 |
1 files changed, 146 insertions, 20 deletions
diff --git a/projdoc.cls b/projdoc.cls index 388f901..8a2c05d 100644 --- a/projdoc.cls +++ b/projdoc.cls @@ -1,6 +1,19 @@ \NeedsTeXFormat{LaTeX2e} \ProvidesClass{projdoc}[2024-09-03 class projdoc] +% project defaults +\makeatletter +\def\@project{Project cr\^epe} +\def\@organization{Avans University of Applied Sciences} +\def\@author{% + Loek Le Blansch\and% + Wouter Boerenkamps\and% + Jaro Rutjes\and% + Max Smits\and% + Niels Stunnebrink% +} +\makeatother + % based on article \LoadClass{article} @@ -40,6 +53,7 @@ \RequirePackage{tabularx} \RequirePackage{booktabs} \RequirePackage{needspace} +\RequirePackage{xr-hyper} \RequirePackage{hyperref} \RequirePackage{microtype} \RequirePackage{xcolor} @@ -58,6 +72,7 @@ \RequirePackage{subcaption} \RequirePackage{multicol} \RequirePackage{comparison} % ./comparison.sty +\RequirePackage{xstring} % font style \setmainfont{TeX Gyre Schola} @@ -73,6 +88,9 @@ \bigskipamount=7mm \medskipamount=4mm +% number paragraphs by default +\setcounter{secnumdepth}{4} + % section placement / appearance \newlength{\sectionpenalty} \newlength{\subsectionpenalty} @@ -119,6 +137,23 @@ itemsep=\dimexpr\style@itemsep-\style@parsep\relax, parsep=\style@parsep, } +\def\projdoc@description@before{% + \renewcommand\makelabel[1]{% + {\bfseries ##1}:% + }% +} +\newlength\projdoc@description@leftmargin% +\projdoc@description@leftmargin=3em% +\newlength\projdoc@description@labelindent% +\projdoc@description@labelindent=3ex% +\def\projdoc@setdescriptionstyle{% + \setdescription{ + before={\projdoc@description@before}, + leftmargin=\projdoc@description@leftmargin, + labelindent=\projdoc@description@labelindent, + }% +} +\projdoc@setdescriptionstyle% \makeatother % create a label using \customlabel[<creftype>]{<refname>}{<reftext>} that displays @@ -126,24 +161,20 @@ % \cref{<refname>} is used \makeatletter \NewDocumentCommand{\customlabel}{omm}{% - \begingroup - \cref@constructprefix{#1}{\cref@result}% - \protected@edef\@currentlabel{#3}% - \protected@edef\@currentlabelname{#3}% - \protected@edef\cref@currentlabel{[#1][][\cref@result]#3} - \label[#1]{#2}% - \endgroup + \begingroup + \cref@constructprefix{#1}{\cref@result}% + \protected@edef\@currentlabel{#3}% + \protected@edef\@currentlabelname{#3}% + \protected@edef\cref@currentlabel{[#1][][\cref@result]#3} + \label[#1]{#2}% + \endgroup } \makeatother % \maketitle format \makeatletter -\let\@project\relax \def\project#1{\def\@project{#1}} -\let\@organization\relax \def\organization#1{\def\@organization{#1}} -\let\@version\relax -\def\version#1{\def\@version{#1}} \def\@maketitle{% \centering% \parskip=0pt% @@ -173,8 +204,15 @@ }% \vfill\flushright% \par{% - \par{\strut{}Version \@version\strut}% \par{\strut\@date\strut}% + \begingroup% + \endlinechar=\m@ne\everyeof{\noexpand}% + \edef\x{% + \endgroup% + \def\noexpand\commit{\@@input|"git rev-parse --short HEAD" }% + }% + \x% + \par{\strut\footnotesize({\ttfamily\commit})\strut}% }% \par\vspace*{2in}% } @@ -196,6 +234,12 @@ selection={recorded and deps and see}, ] +% allow cross-references to requirements.pdf from all documents except +% requirements.pdf itself +\IfEq*{\jobname}{requirements}{}{ + \externaldocument{reqs}[requirements.pdf] +} + % default document header/trailer \makeatletter \def\projdoc@header{ @@ -206,19 +250,27 @@ \thispagestyle{empty} \end{titlepage} } -\newbool{projdoc@cited} -\apptocmd{\abx@aux@cite}{\global\booltrue{projdoc@cited}}{}{} +\newbool{projdoc@used@cite} +\newbool{projdoc@used@gls} +\apptocmd{\abx@aux@cite}{\global\booltrue{projdoc@used@cite}}{}{} +\apptocmd{\glsxtr@record}{\global\booltrue{projdoc@used@gls}}{}{} \def\projdoc@trailer{ % bibliography (if citations used) - \ifbool{projdoc@cited}{\printbibliography}{}% + \ifbool{projdoc@used@cite}{% + \hfuzz=50pt% reduce overfull hbox warnings for bibliography (mostly URLs) + \printbibliography% + }{}% % glossary - \ifcsundef{printunsrtglossary}{}{% + \ifbool{projdoc@used@gls}{% + \projdoc@description@leftmargin=2ex% + \projdoc@description@labelindent=0pt% + \projdoc@setdescriptionstyle% \section*{Glossary}% \begin{multicols}{2}% \renewcommand{\glossarysection}[2][]{}% \printunsrtglossary% \end{multicols}% - }% + }{}% } \AtBeginDocument{\projdoc@header} \AtEndDocument{\projdoc@trailer} @@ -266,8 +318,8 @@ \def\UrlRight{\hbox{\,}}% } \DefineVerbatimEnvironment{blockcode}{Verbatim}{ - tabsize=2, - obeytabs, + tabsize=2, + obeytabs, } % scale down image if it exceeds page margins @@ -277,7 +329,8 @@ % adjust scale for puml diagrams \newcommand{\includepumldiag}[1]{% - \fitimg{\includegraphics[scale=0.6]{#1}}% + \StrSubstitute{#1}{.puml}{.eps}[\filename]% + \fitimg{\includegraphics[scale=0.6]{\filename}}% } % prevent page break between two paragraphs @@ -285,3 +338,76 @@ \newcommand\noparbreak{\par\nobreak\@afterheading} \makeatother +% cleveref extra types +\crefname{paragraph}{paragraph}{paragraphs} +\Crefname{paragraph}{Paragraph}{Paragraphs} +\crefname{requirement}{requirement}{requirements} +\Crefname{requirement}{Requirement}{Requirements} +\crefname{test}{test}{tests} +\Crefname{test}{Test}{Tests} + +% fix cleveref showing filename to external cross-reference +% see <https://tex.stackexchange.com/a/708445/211562> +% edited from cleveref source +\makeatletter +\def\cref@getref#1#2{% + \expandafter\let\expandafter#2\csname r@#1@cref\endcsname% + \expandafter\expandafter\expandafter\def% + \expandafter\expandafter\expandafter#2% + \expandafter\expandafter\expandafter{% + \expandafter\@firstoffive#2}}% +\def\cpageref@getref#1#2{% + \expandafter\let\expandafter#2\csname r@#1@cref\endcsname% + \expandafter\expandafter\expandafter\def% + \expandafter\expandafter\expandafter#2% + \expandafter\expandafter\expandafter{% + \expandafter\@secondoffive#2}}% +\AtBeginDocument{% + \def\label@noarg#1{% + \cref@old@label{#1}% + \@bsphack% + \edef\@tempa{{page}{\the\c@page}}% + \setcounter{page}{1}% + \edef\@tempb{\thepage}% + \expandafter\setcounter\@tempa% + \cref@constructprefix{page}{\cref@result}% + \protected@write\@auxout{}{% + \string\newlabel{#1@cref}{% + {\cref@currentlabel}% + {[\@tempb][\arabic{page}][\cref@result]\thepage}% + {}% + {}% + {}% + }% + }% + \@esphack% + }% + \def\label@optarg[#1]#2{% + \cref@old@label{#2}% + \@bsphack% + \edef\@tempa{{page}{\the\c@page}}% + \setcounter{page}{1}% + \edef\@tempb{\thepage}% + \expandafter\setcounter\@tempa% + \cref@constructprefix{page}{\cref@result}% + \protected@edef\cref@currentlabel{% + \expandafter\cref@override@label@type% + \cref@currentlabel\@nil{#1}% + }% + \protected@write\@auxout{}{% + \string\newlabel{#2@cref}{% + {\cref@currentlabel}% + {[\@tempb][\arabic{page}][\cref@result]\thepage}% + {}% + {}% + {}% + }% + }% + \@esphack% + }% +} +\makeatother + +% missing reference marker +\def\mref{\textsuperscript{\textit{\,ref?}}} + |