\NeedsTeXFormat{LaTeX2e} \ProvidesPackage{latex-templates/PrimeManual}[2025-06-24] % Suppress warning about \showhyphens being changed. \let\CheckCommand\providecommand \RequirePackage{microtype} % Custom document properties. %#region \DeclareRobustCommand*{\customer}[1]{\gdef\@customer{#1}} \DeclareRobustCommand*{\customerFull}[1]{\gdef\@customerFull{#1}} \DeclareRobustCommand*{\projectNumber}[1]{\gdef\@projectNumber{#1}} \DeclareRobustCommand*{\projectDesc}[1]{\gdef\@projectDesc{#1}} \DeclareRobustCommand*{\version}[1]{\gdef\@version{#1}} %#endregion % Macros to insert document properties. %#region \newcommand{\sTitle}{\makeatletter{\@title}} \newcommand{\sAuthor}{\makeatletter{\@author}} \newcommand{\sDate}{\makeatletter{\@date}} \newcommand{\sCustomer}{\makeatletter{\@customer}} \newcommand{\sCustomerFull}{\makeatletter{\@customerFull}} \newcommand{\sProjectNumber}{\makeatletter{\@projectNumber}} \newcommand{\sProjectDesc}{\makeatletter{\@projectDesc}} \newcommand{\sProjectTitle}{\makeatletter{Project \@projectNumber : \@projectDesc}} \newcommand{\sVersion}{\makeatletter{\@version}} %#endregion % Specify Fonts %#region \RequirePackage{fontspec} % Main font: Roboto Serif \setmainfont{RobotoSerif}[ Path = ./fonts/RobotoSerif/, Extension = .ttf, UprightFont = *-Light, BoldFont = *-SemiBold, ItalicFont = *-LightItalic, BoldItalicFont = *-SemiBoldItalic, ] % Headings & Titles font: Roboto Slab \setsansfont{RobotoSlab}[ Path = ./fonts/RobotoSlab/, Extension = .ttf, UprightFont = *-SemiBold, BoldFont = *-Black, ] % Monospace font: Roboto Mono \setmonofont{RobotoMono}[ Path = ./fonts/RobotoMono/, Extension = .ttf, UprightFont = *-Regular, BoldFont = *-Bold, ItalicFont = *-Italic, BoldItalicFont = *-BoldItalic, ] %#endregion % Page Layout %#region \RequirePackage[pass]{geometry} \RequirePackage{calc} \RequirePackage{ifoddpage} \newlength{\contentwidth} \setlength{\contentwidth}{\textwidth+\marginparsep+\marginparwidth} \newlength{\bfFigureWidth} \newlength{\bfMarginOffset} \newcommand{\bigfloat}[2][1in]{% \setlength{\bfFigureWidth}{#1*-2+\paperwidth}% \checkoddpage% \ifoddpage% \setlength{\bfMarginOffset}{-1in+#1-\oddsidemargin}% \else% \setlength{\bfMarginOffset}{-1in+#1-\evensidemargin}% \fi% \begin{figure}[ht]% {\leavevmode% \put(\bfMarginOffset,0in){% \begin{minipage}{\bfFigureWidth}% #2% \end{minipage}% }% }% \end{figure}% } %#endregion % Title & Heading Options %#region \RequirePackage[sf,raggedright]{titlesec} %#endregion % Header & Footer Options %#region \pagestyle{plain} %#endregion % Color import and definition %#region \RequirePackage{xcolor} \definecolor{PrimeBlue}{RGB}{25,45,145} %#endregion % Cross references %#region %\newcommand{\sectionRef}[2]{\ref{#1:#2}: #2} \newcommand{\refChapter}[1]{Chapter \ref{ch:#1}} \newcommand{\refAppendix}[1]{Appendix \ref{ch:#1}} \newcommand{\refSection}[1]{Section \ref{sec:#1}} \newcommand{\refSubsection}[1]{Subsection \ref{subsec:#1}} \newcommand{\refSubsubsection}[1]{Sub-subsection \ref{sssec:#1}} \newcommand{\refParagraph}[1]{Paragraph \ref{par:#1}} \newcommand{\refSubparagraph}[1]{Subparagraph \ref{subpar:#1}} \newcommand{\refTable}[1]{Table \ref{tbl:#1}} \newcommand{\refFigure}[1]{Figure \ref{fig:#1}} \newcommand{\lblGeneral}[4][]{ \if\relax\detokenize{#1}\relax % Check if #1 is empty string. #3{#2}\label{#4:#2} \else #3{#2}\label{#4:#1} \fi } \newcommand{\lblChapter}[2][]{ \lblGeneral[#1]{#2}{\chapter}{ch} } \newcommand{\lblSection}[2][]{ \lblGeneral[#1]{#2}{\section}{sec} } \newcommand{\lblSubsection}[2][]{ \lblGeneral[#1]{#2}{\subsection}{subsec} } \newcommand{\lblSubsubsection}[2][]{ \lblGeneral[#1]{#2}{\subsubsection}{sssec} } \newcommand{\lblParagraph}[2][]{ \lblGeneral[#1]{#2}{\paragraph}{par} } \newcommand{\lblSubparagraph}[2][]{ \lblGeneral[#1]{#2}{\subparagraph}{subpar} } \newcommand{\lblTable}[2][]{ \textbf{\lblGeneral[#1]{#2}{\caption}{tbl}} } \newcommand{\lblFigure}[2][]{ \textbf{\lblGeneral[#1]{#2}{\caption}{fig}} } %#endregion % Graphics package for including images %#region \RequirePackage{graphicx} \RequirePackage[hypcap=true]{caption} \newcommand{\ig}[2][0.5in]{ \includegraphics[keepaspectratio,width=#1]{#2} } \newcommand{\cfig}[4]{% \begin{figure}[ht]% \centering% #4{#1}% \caption{#3}% \label{fig:#2}% \end{figure}% } \newcommand{\centerfig}[3]{\cfig{#1}{#2}{#3}{\includegraphics}} \newcommand{\centerfigw}[4][\textwidth]{\cfig{#2}{#3}{#4}{\includegraphics[keepaspectratio,width=#1]}} \newcommand{\bigfig}[4][1in]{% \bigfloat[#1]{% \captionsetup{type=figure}% \includegraphics[keepaspectratio,width=\bfFigureWidth]{#2}% \captionof{figure}{#4}% \label{fig:#3}% }% } %#endregion % Paragraph formatting. %#region \setlength{\parindent}{0pt} \setlength{\parskip}{2ex plus 0.5ex minus 0.5ex} %#endregion % Table formatting. %#region \RequirePackage{tabularray} \RequirePackage{csvsimple-l3} %#endregion % Glossary formatting. %#region \RequirePackage[xindy,nopostdot,toc,sort=standard]{glossaries} %#endregion % Index formatting. %#region \RequirePackage{makeidx} \RequirePackage{xstring} \newcommand{\idx}[1]{\StrSubstitute{#1}{!}{ }\index{#1}} %#endregion % Margin Note formatting. %#region \RequirePackage{marginnote} \colorlet{marginTextColor}{PrimeBlue} \renewcommand{\marginfont}{\small\color{marginTextColor}} % Put a glossary definition in a margin note. % Optional parameter is vertical adjustment of the note. \newcommand{\mdef}[3][0pt]{% \index{\glsentryname{#2}}% Add a reference to this in the index. \textbf{#3{#2}}% This is the text that appears on the page. \marginnote{% Create the margin note. \textsf{\textbf{% \Glsentryname{#2}:% Create the title of the margin note. }}% \glsdesc*{#2}% Create the text of the margin note. }[#1]% } \newcommand{\margindef}[2][0pt]{% \mdef[#1]{#2}{\gls}% } \newcommand{\Margindef}[2][0pt]{% \mdef[#1]{#2}{\Gls}% } % Put a footnote in a margin note. % Optional parameter is vertical adjustment of the note. \newcommand{\mnote}[2][0pt]{% \footnotemark% \marginnote{% \footnotemark[\value{footnote}]#2% }[#1]% } \newcommand{\mfig}[5][0pt]{% % This strut ensures that the margin figure is counted as part of the % following paragraph and is vertically aligned with it. \strut% \marginnote{% \captionsetup{% type = figure,% font = {color=marginTextColor},% }% {\centering#5{#2}\par}% \captionof{figure}{#4}% \label{fig:#3}% }[#1]% } \newcommand{\marginfig}[4][0pt]{% \mfig[#1]{#2}{#3}{#4}{\includegraphics}% } \newcommand{\marginfigw}[5][0pt]{% \mfig[#1]{#2}{#3}{#4}{\includegraphics[keepaspectratio,width=#5]}% } %#endregion % Use Hyperref to automatically create links in the document %#region \RequirePackage{hyperref} \hypersetup{colorlinks=true, allcolors=PrimeBlue} %#endregion % Define custom title page. %#region \newcommand{\PrimeTitlePage}[1]{ \begin{titlepage} \begin{sffamily} {\raggedright\noindent\large \vspace*{\stretch{1}} \sCustomerFull \medbreak \sProjectTitle \bigbreak {\Huge \sTitle} \vfill {\leavevmode % Move the rule graphic to 0.25 in from the left edge of the % paper and vertically centered on the heartbeat graphic. \put(-\oddsidemargin-0.75in,10pt){ \includegraphics{#1/prime_rule.pdf} } % The numbers here are just what looks good. \put(100pt,0pt){ \includegraphics{#1/prime_heartbeat.pdf} } } \sAuthor Revision \sVersion \sDate \vfill } \end{sffamily} \end{titlepage} } %#endregion