% ============================================================================= % LATEX HEADER CONFIGURATION FOR HARDWARE KITS PDF % ============================================================================= % This file contains all LaTeX package imports, custom commands, and styling % definitions for the PDF output of the Hardware Kits labs. % % Key Features: % - Teal branding throughout (matching kits website) % - Custom part/chapter/section styling % - Professional table formatting with colored headers % - Margin notes with custom styling % - TikZ-based part dividers % - Page numbering (Roman for frontmatter, Arabic for mainmatter) % % Note: This file is included via _quarto-pdf.yml and affects PDF output only. % HTML/EPUB styling is handled separately via CSS files. % ============================================================================= % ============================================================================= % PACKAGE IMPORTS % ============================================================================= % Layout and positioning % \usepackage[outercaption, ragged]{sidecap} % Commented out to make figure captions inline instead of in margin \usepackage{adjustbox} % Adjusting box dimensions \usepackage{afterpage} % Execute commands after page break \usepackage{morefloats} % Increase number of floats \usepackage{array} % Enhanced table column formatting \usepackage{atbegshi} % Insert content at page beginning %\usepackage{changepage} % Change page dimensions mid-document \usepackage{emptypage} % Clear headers/footers on empty pages % Language and text \usepackage[english]{babel} % English language support \usepackage{microtype} % Improved typography and hyphenation % Captions and floats \usepackage{caption} % Caption styling configuration %\captionsetup[table]{belowskip=5pt} \captionsetup{format=plain} \DeclareCaptionLabelFormat{mylabel}{#1 #2:\hspace{1.0ex}} \DeclareCaptionFont{ninept}{\fontsize{7pt}{8}\selectfont #1} % Figure captions: Small font, bold label, ragged right \captionsetup[figure]{labelfont={bf,ninept},labelsep=space, belowskip=2pt,aboveskip=6pt,labelformat=mylabel, justification=raggedright,singlelinecheck=false,font={ninept}} % Table captions: Small font, bold label, ragged right \captionsetup[table]{belowskip=6pt,labelfont={bf,ninept},labelsep=none, labelformat=mylabel,justification=raggedright,singlelinecheck=false,font={ninept}} % Typography fine-tuning \emergencystretch=5pt % Allow extra stretch to avoid overfull boxes % Utility packages \usepackage{etoolbox} % For patching commands and environments % Page layout and headers \usepackage{fancyhdr} % Custom headers and footers \usepackage{geometry} % Page dimensions and margins % Graphics and figures \usepackage{graphicx} % Include graphics \usepackage{float} % Improved float placement \usepackage[skins,breakable]{tcolorbox} % Coloured and framed text boxes \tcbset{before upper=\setlength{\parskip}{3pt}} % Tables \usepackage{longtable} % Multi-page tables % Fonts and typography \usepackage{fontspec} % Font selection for LuaLaTeX \usepackage{mathptmx} % Times-like math fonts \usepackage{newpxtext} % Palatino-like font for body text % Colors and visual elements \usepackage[dvipsnames]{xcolor} % Extended color support \usepackage{tikz} % Programmatic graphics \usetikzlibrary{positioning} \usetikzlibrary{calc} \usepackage{tikzpagenodes} % TikZ positioning relative to page % Code listings \usepackage{listings} % Code highlighting % Hyperlinks \usepackage{hyperref} % Clickable links in PDF % Conditional logic \usepackage{ifthen} % If-then-else commands % Math symbols \usepackage{amsmath} % AMS math extensions \usepackage{amssymb} % AMS math symbols \usepackage{latexsym} % Additional LaTeX symbols \usepackage{pifont} % Zapf Dingbats symbols \providecommand{\blacklozenge}{\ding{117}} % Black diamond symbol % Lists \usepackage{enumitem} % Customizable lists % Margin notes and sidenotes \usepackage{marginfix} % Fixes margin note overflow \usepackage{marginnote} % Margin notes \usepackage{sidenotes} % Academic-style sidenotes \renewcommand\raggedrightmarginnote{\sloppy} \renewcommand\raggedleftmarginnote{\sloppy} % Typography improvements \usepackage{ragged2e} % Better ragged text \usepackage[all]{nowidow} % Prevent widows and orphans \usepackage{needspace} % Ensure minimum space on page % Section formatting \usepackage[explicit]{titlesec} % Custom section titles \usepackage{tocloft} % Table of contents formatting % QR codes and icons \usepackage{fontawesome5} % Font Awesome icons \usepackage{qrcode} % QR code generation \qrset{link, height=15mm} % ============================================================================= % FLOAT CONFIGURATION % ============================================================================= % Allow more floats per page to handle figure-heavy chapters \extrafloats{100} \setcounter{topnumber}{10} % Max floats at top of page \setcounter{bottomnumber}{10} % Max floats at bottom of page \setcounter{totalnumber}{20} % Max floats per page \renewcommand{\topfraction}{.9} % Max fraction of page for top floats \renewcommand{\bottomfraction}{.9} \renewcommand{\textfraction}{.1} % Min fraction of page for text \renewcommand{\floatpagefraction}{.8} % Min fraction of float page % ============================================================================= % COLOR DEFINITIONS % ============================================================================= % Teal - primary brand color for Hardware Kits (matching website) \definecolor{crimson}{HTML}{0d9488} % Quiz element colors \definecolor{quiz-question-color1}{RGB}{225,243,248} % Light blue background \definecolor{quiz-question-color2}{RGB}{17,158,199} % Blue border \definecolor{quiz-answer-color1}{RGB}{250,234,241} % Light pink background \definecolor{quiz-answer-color2}{RGB}{152,14,90} % Magenta border % ============================================================================= % LIST FORMATTING % ============================================================================= % Tighter list spacing for academic style \def\tightlist{} \setlist{itemsep=1pt, parsep=1pt, topsep=0pt,after={\vspace{0.3\baselineskip}}} \let\tightlist\relax \makeatletter \@ifpackageloaded{framed}{}{\usepackage{framed}} \@ifpackageloaded{fancyvrb}{}{\usepackage{fancyvrb}} \makeatother \makeatletter %New float "codelisting" has been updated \AtBeginDocument{% \floatstyle{ruled} \newfloat{codelisting}{!htb}{lop} \floatname{codelisting}{Listing} \floatplacement{codelisting}{!htb} \captionsetup[codelisting]{labelfont={bf,ninept},labelformat=mylabel, singlelinecheck=false,width=\linewidth,labelsep=none,font={ninept}}% \renewenvironment{snugshade}{% \def\OuterFrameSep{3pt}% \def\FrameCommand{\fboxsep=5pt\colorbox{shadecolor}}% \MakeFramed{\advance\hsize-\width\FrameRestore}% \leftskip 0.5em \rightskip 0.5em% \small% decrease font size }{\endMakeFramed}% } \makeatother %The space before and after the verbatim environment "Highlighting" has been reduced \fvset{listparameters=\setlength{\topsep}{0pt}\setlength{\partopsep}{0pt}} \DefineVerbatimEnvironment{Highlighting}{Verbatim}{framesep=0mm,commandchars=\\\{\}} \makeatletter \renewcommand\fs@ruled{\def\@fs@cfont{\bfseries}\let\@fs@capt\floatc@ruled \def\@fs@pre{\hrule height.8pt depth0pt \kern2pt}% \def\@fs@post{\kern2pt\hrule\relax}% \def\@fs@mid{\kern2pt\hrule\kern1pt}%space between float and caption \let\@fs@iftopcapt\iftrue} \makeatother % ============================================================================= % HYPHENATION RULES % ============================================================================= % Explicit hyphenation points for technical terms to avoid bad breaks \hyphenation{ light-weight light-weight-ed de-vel-op-ment un-der-stand-ing mod-els prin-ci-ples ex-per-tise com-pli-cat-ed blue-print per‧for‧mance com-mu-ni-ca-tion par-a-digms hy-per-ten-sion a-chieved } % ============================================================================= % CODE LISTING CONFIGURATION % ============================================================================= % Settings for code blocks using listings package \lstset{ breaklines=true, % Automatic line wrapping breakatwhitespace=true, % Break at whitespace only basicstyle=\ttfamily, % Monospace font frame=none, % No frame around code keepspaces=true, % Preserve spaces showspaces=false, % Don't show space characters showtabs=false, % Don't show tab characters columns=flexible, % Flexible column width belowskip=0pt, % Minimal spacing aboveskip=0pt } % ============================================================================= % PAGE GEOMETRY % ============================================================================= % Book dimensions optimized for print (7.5" × 9.25") % Wide outer margin for sidenotes (1.5") \geometry{ paperwidth=7.5in, paperheight=9.25in, top=1in, bottom=1in, inner=1in, % Inner margin (binding side) outer=2.25in, % Outer margin (includes 1.5" for sidenotes) footskip=30pt, marginparwidth=1.5in, % Width for margin notes twoside % Different left/right pages } % ============================================================================= % SIDENOTE STYLING % ============================================================================= % Custom sidenote design with crimson vertical bar \renewcommand{\thefootnote}{\textcolor{crimson}{\arabic{footnote}}} % Save original sidenote command \makeatletter \@ifundefined{oldsidenote}{ \let\oldsidenote\sidenote% }{} \makeatother % Redefine sidenote with vertical crimson bar \renewcommand{\sidenote}[1]{% \oldsidenote{% \noindent \color{crimson!100} % Crimson vertical line \raisebox{0em}{% \rule{0.5pt}{1.5em} % Thin vertical line } \hspace{0.3em} % Space after line \color{black} % Reset text color \footnotesize #1 % Sidenote content }% } % ============================================================================= % FIGURE ENVIRONMENT FIX % ============================================================================= % Fix for caption display bug on even pages \makeatletter \let\oldfigure\figure% \let\endoldfigure\endfigure% \renewenvironment{figure}[1][htbp]{% \oldfigure[#1]% }{% \endoldfigure% } \makeatother % ============================================================================= % PAGE HEADERS AND FOOTERS % ============================================================================= % Ensure chapters use fancy page style (not plain) \patchcmd{\chapter}{\thispagestyle{plain}}{\thispagestyle{fancy}}{}{} % Main page style with crimson headers \pagestyle{fancy} \fancyhf{} % Clear all \fancyhead[LE]{\small\color{crimson}\nouppercase{\rightmark}} % Left even: section \fancyhead[RO]{\color{crimson}\thepage} % Right odd: page number \fancyhead[LO]{\small\color{crimson}\nouppercase{\leftmark}} % Left odd: chapter \fancyhead[RE]{\color{crimson}\thepage} % Right even: page number \renewcommand{\headrulewidth}{0.4pt} % Thin header line \renewcommand{\footrulewidth}{0pt} % No footer line % Plain page style (for chapter openings) \fancypagestyle{plain}{ \fancyhf{} \fancyfoot[C]{\color{crimson}\thepage} % Centered page number \renewcommand{\headrulewidth}{0pt} \renewcommand{\footrulewidth}{0pt} } % ============================================================================= % KOMA-SCRIPT FONT ADJUSTMENTS % ============================================================================= % Apply crimson color to all heading levels \addtokomafont{disposition}{\rmfamily\color{crimson}} \addtokomafont{chapter}{\color{crimson}} \addtokomafont{section}{\color{crimson}} \addtokomafont{subsection}{\color{crimson}} % ============================================================================= % ABSTRACT ENVIRONMENT % ============================================================================= \newenvironment{abstract}{ \chapter*{\abstractname} \addcontentsline{toc}{chapter}{\abstractname} \small }{ \clearpage } % ============================================================================= % HYPERLINK CONFIGURATION % ============================================================================= % Crimson-colored links throughout, two-page PDF layout \hypersetup{ linkcolor=crimson, citecolor=crimson, urlcolor=crimson, pdfpagelayout=TwoPageRight, % Two-page spread view pdfstartview=Fit % Initial zoom fits page } % ============================================================================= % PART SUMMARY SYSTEM % ============================================================================= % Allows adding descriptive text below part titles \newcommand{\partsummary}{} % Empty by default \newif\ifhaspartsummary% \haspartsummaryfalse% \newcommand{\setpartsummary}[1]{% \renewcommand{\partsummary}{#1}% \haspartsummarytrue% } % Additional colors for part page backgrounds \definecolor{BrownLL}{RGB}{233,222,220} \definecolor{BlueDD}{RGB}{62,100,125} \colorlet{BlueDD}{magenta} % =============================================================================== % PART STYLING SYSTEM % =============================================================================== % % This system provides three distinct visual styles for book organization: % % 1. NUMBERED PARTS (\part{title}) - For main book sections % - Roman numerals (I, II, III, etc.) in top right corner % - Crimson title with horizontal lines above/below % - "Part I" label in sidebar % - Used for: foundations, principles, optimization, deployment, etc. % % 2. UNNUMBERED PARTS (\part*{title}) - For special sections like "Labs" % - Division-style geometric background (left side) % - No Roman numerals % - Used for: labs section % % 3. DIVISIONS (\division{title}) - For major book divisions % - Clean geometric background with centered title % - Used for: frontmatter, main_content, backmatter % % The Lua filter (inject-parts.lua) automatically routes parts by {key:xxx} commands % to the appropriate LaTeX command based on the key name. % =============================================================================== % NUMBERED PARTS: Roman numeral styling for main book sections \titleformat{\part}[display] {\thispagestyle{empty}}{}{20pt}{ \begin{tikzpicture}[remember picture,overlay] %%% %% \node[crimson,align=flush right, inner sep=0,outer sep=0mm,draw=none,% anchor=east,minimum height=31mm, text width=1.2\textwidth, yshift=-30mm,font={% \fontsize{98pt}{104}\selectfont\bfseries}] (BG) at (current page text area.north east){\thepart}; % \node[black,inner sep=0mm,draw=none, anchor=mid,text width=1.2\textwidth, minimum height=35mm, align=right, node distance=7mm,below=of BG, font={\fontsize{30pt}{34}\selectfont}] (BGG) {\hyphenchar\font=-1 \color{black}\MakeUppercase {#1}}; \draw [crimson,line width=3pt] ([yshift=0mm]BGG.north west) -- ([yshift=0mm]BGG.north east); \draw [crimson,line width=2pt] ([yshift=0mm]BGG.south west) -- ([yshift=0mm]BGG.south east); % \node[fill=crimson,text=white,rotate=90,% anchor=south west,minimum height=15mm, minimum width=40mm,font={% \fontsize{20pt}{20}\selectfont\bfseries}](BP) at (current page text area.south east) {{\sffamily Part}~\thepart}; % \path[red](BP.north west)-|coordinate(PS)(BGG.south west); % \ifhaspartsummary \node[inner sep=4pt,text width=0.7\textwidth,draw=none,fill=BrownLL!40, align=justify,font={\fontsize{9pt}{12}\selectfont},anchor=south west] at (PS) {\partsummary}; \fi \end{tikzpicture} }[] \renewcommand{\thepart}{\Roman{part}} % UNNUMBERED PARTS: Division-style background for special sections \titleformat{name=\part,numberless}[display] {\thispagestyle{empty}}{}{20pt}{ \begin{tikzpicture}[remember picture,overlay] %%% \coordinate(S1)at([yshift=-200mm]current page.north west); \draw[draw=none,fill=BlueDD!7](S1)--++(45:16)coordinate(S2)- |(S2|-current page.north west)--(current page.north west)coordinate(S3)--(S1); % \coordinate(E1)at([yshift=-98mm]current page.north west); \draw[draw=none,fill=BlueDD!15](E1)--(current page.north west)coordinate(E2) --++(0:98mm)coordinate(E3)--(E1); % \coordinate(D1)at([yshift=15mm]current page.south west); \draw[draw=none,fill=BlueDD!40,opacity=0.5](D1)--++(45:5.5)coordinate(D2) -|(D2|-current page.north west)--(current page.north west)coordinate(D3)--(D1); %%%% \path[red](S2)-|(S2-|current page.east)coordinate(SS2); %PART \node[crimson,align=flush right,inner sep=0,outer sep=0mm,draw=none,anchor=south, font={\fontsize{48pt}{48}\selectfont\bfseries}] (BG) at ($(S2)!0.5!(SS2)$){\hphantom{Part}}; %%% \path[green]([yshift=15mm]D2)-|coordinate(TPD)(BG.south east); \node[inner sep=0mm,draw=none,anchor=south east,%text width=0.9\textwidth, align=right,font={\fontsize{40pt}{40}\selectfont}] (BGG) at (TPD) {\color{crimson}\MakeUppercase {#1}};%\MakeUppercase {} \end{tikzpicture} } % Define \numberedpart command for numbered parts \newcommand{\numberedpart}[1]{% \clearpage \thispagestyle{empty} \stepcounter{part}% \begin{tikzpicture}[remember picture,overlay] %%% %% \node[crimson,align=flush right, inner sep=0,outer sep=0mm,draw=none,% anchor=east,minimum height=31mm, text width=1.2\textwidth, yshift=-30mm,font={% \fontsize{98pt}{104}\selectfont\bfseries}] (BG) at (current page text area.north east){\thepart}; % \node[black,inner sep=0mm,draw=none, anchor=mid,text width=1.2\textwidth, minimum height=35mm, align=right, node distance=7mm,below=of BG, font={\fontsize{30pt}{34}\selectfont}] (BGG) {\hyphenchar\font=-1 \color{black}\MakeUppercase {#1}}; \draw [crimson,line width=3pt] ([yshift=0mm]BGG.north west) -- ([yshift=0mm]BGG.north east); \draw [crimson,line width=2pt] ([yshift=0mm]BGG.south west) -- ([yshift=0mm]BGG.south east); % \node[fill=crimson,text=white,rotate=90,% anchor=south west,minimum height=15mm, minimum width=40mm,font={% \fontsize{20pt}{20}\selectfont\bfseries}](BP) at (current page text area.south east) {{\sffamily Part}~\thepart}; % \path[red](BP.north west)-|coordinate(PS)(BGG.south west); % \ifhaspartsummary \node[inner sep=4pt,text width=0.7\textwidth,draw=none,fill=BrownLL!40, align=justify,font={\fontsize{9pt}{12}\selectfont},anchor=south west] at (PS) {\partsummary}; \fi \end{tikzpicture} \clearpage } % DIVISIONS: Clean geometric styling with subtle tech elements % Used for frontmatter, main_content, and backmatter divisions \newcommand{\division}[1]{% \clearpage \thispagestyle{empty} \begin{tikzpicture}[remember picture,overlay] % Clean geometric background (original design) \coordinate(S1)at([yshift=-200mm]current page.north west); \draw[draw=none,fill=BlueDD!7](S1)--++(45:16)coordinate(S2)- |(S2|-current page.north west)--(current page.north west)coordinate(S3)--(S1); \coordinate(E1)at([yshift=-98mm]current page.north west); \draw[draw=none,fill=BlueDD!15](E1)--(current page.north west)coordinate(E2) --++(0:98mm)coordinate(E3)--(E1); \coordinate(D1)at([yshift=15mm]current page.south west); \draw[draw=none,fill=BlueDD!40,opacity=0.5](D1)--++(45:5.5)coordinate(D2) -|(D2|-current page.north west)--(current page.north west)coordinate(D3)--(D1); % Subtle tech elements - positioned in white areas for better visibility % Upper right white area - more visible \draw[crimson!40, line width=0.8pt] ([xshift=140mm,yshift=-60mm]current page.north west) -- ++(40mm,0); \draw[crimson!40, line width=0.8pt] ([xshift=150mm,yshift=-70mm]current page.north west) -- ++(30mm,0); \draw[crimson!35, line width=0.7pt] ([xshift=160mm,yshift=-60mm]current page.north west) -- ++(0,-15mm); \draw[crimson!35, line width=0.7pt] ([xshift=170mm,yshift=-70mm]current page.north west) -- ++(0,10mm); % Circuit nodes - upper right \fill[crimson!50] ([xshift=160mm,yshift=-60mm]current page.north west) circle (1.5mm); \fill[white] ([xshift=160mm,yshift=-60mm]current page.north west) circle (0.8mm); \fill[crimson!50] ([xshift=170mm,yshift=-70mm]current page.north west) circle (1.3mm); \fill[white] ([xshift=170mm,yshift=-70mm]current page.north west) circle (0.6mm); % Lower right white area - enhanced visibility \draw[crimson!45, line width=0.9pt] ([xshift=140mm,yshift=-190mm]current page.north west) -- ++(45mm,0); \draw[crimson!45, line width=0.9pt] ([xshift=150mm,yshift=-200mm]current page.north west) -- ++(35mm,0); \draw[crimson!40, line width=0.8pt] ([xshift=160mm,yshift=-190mm]current page.north west) -- ++(0,-20mm); \draw[crimson!40, line width=0.8pt] ([xshift=170mm,yshift=-200mm]current page.north west) -- ++(0,15mm); % Additional connecting lines in lower right \draw[crimson!35, line width=0.7pt] ([xshift=130mm,yshift=-180mm]current page.north west) -- ++(25mm,0); \draw[crimson!35, line width=0.7pt] ([xshift=145mm,yshift=-180mm]current page.north west) -- ++(0,-25mm); % Circuit nodes - lower right (more prominent) \fill[crimson!55] ([xshift=160mm,yshift=-190mm]current page.north west) circle (1.6mm); \fill[white] ([xshift=160mm,yshift=-190mm]current page.north west) circle (0.9mm); \fill[crimson!55] ([xshift=170mm,yshift=-200mm]current page.north west) circle (1.4mm); \fill[white] ([xshift=170mm,yshift=-200mm]current page.north west) circle (0.7mm); \fill[crimson!50] ([xshift=145mm,yshift=-180mm]current page.north west) circle (1.2mm); \fill[white] ([xshift=145mm,yshift=-180mm]current page.north west) circle (0.6mm); % Title positioned in center - clean and readable \node[inner sep=0mm,draw=none,anchor=center,text width=0.8\textwidth, align=center,font={\fontsize{40pt}{40}\selectfont}] (BGG) at (current page.center) {\color{crimson}\MakeUppercase {#1}}; \end{tikzpicture} \clearpage } % LAB DIVISIONS: Circuit-style neural network design for lab sections % Used specifically for lab platform sections (arduino, xiao, grove, etc.) \newcommand{\labdivision}[1]{% \clearpage \thispagestyle{empty} \begin{tikzpicture}[remember picture,overlay] % Circuit background with subtle gradient \coordinate(S1)at([yshift=-200mm]current page.north west); \draw[draw=none,fill=BlueDD!5](S1)--++(45:16)coordinate(S2)- |(S2|-current page.north west)--(current page.north west)coordinate(S3)--(S1); % TOP AREA: Circuit lines in upper white space \draw[crimson!50, line width=1.5pt] ([xshift=30mm,yshift=-40mm]current page.north west) -- ++(60mm,0); \draw[crimson!40, line width=1pt] ([xshift=120mm,yshift=-50mm]current page.north west) -- ++(50mm,0); \draw[crimson!50, line width=1.5pt] ([xshift=40mm,yshift=-70mm]current page.north west) -- ++(40mm,0); % Connecting lines in top area \draw[crimson!30, line width=1pt] ([xshift=60mm,yshift=-40mm]current page.north west) -- ++(0,-20mm); \draw[crimson!30, line width=1pt] ([xshift=145mm,yshift=-50mm]current page.north west) -- ++(0,10mm); % Neural nodes in top area \fill[crimson!70] ([xshift=60mm,yshift=-40mm]current page.north west) circle (2.5mm); \fill[white] ([xshift=60mm,yshift=-40mm]current page.north west) circle (1.5mm); \fill[crimson!60] ([xshift=145mm,yshift=-50mm]current page.north west) circle (2mm); \fill[white] ([xshift=145mm,yshift=-50mm]current page.north west) circle (1mm); \fill[crimson!80] ([xshift=80mm,yshift=-70mm]current page.north west) circle (2mm); \fill[white] ([xshift=80mm,yshift=-70mm]current page.north west) circle (1mm); % BOTTOM AREA: Circuit lines in lower white space \draw[crimson!50, line width=1.5pt] ([xshift=20mm,yshift=-200mm]current page.north west) -- ++(70mm,0); \draw[crimson!40, line width=1pt] ([xshift=110mm,yshift=-210mm]current page.north west) -- ++(60mm,0); \draw[crimson!50, line width=1.5pt] ([xshift=35mm,yshift=-230mm]current page.north west) -- ++(45mm,0); % Connecting lines in bottom area \draw[crimson!30, line width=1pt] ([xshift=55mm,yshift=-200mm]current page.north west) -- ++(0,-20mm); \draw[crimson!30, line width=1pt] ([xshift=140mm,yshift=-210mm]current page.north west) -- ++(0,15mm); % Neural nodes in bottom area \fill[crimson!70] ([xshift=55mm,yshift=-200mm]current page.north west) circle (2.5mm); \fill[white] ([xshift=55mm,yshift=-200mm]current page.north west) circle (1.5mm); \fill[crimson!60] ([xshift=140mm,yshift=-210mm]current page.north west) circle (2mm); \fill[white] ([xshift=140mm,yshift=-210mm]current page.north west) circle (1mm); \fill[crimson!80] ([xshift=80mm,yshift=-230mm]current page.north west) circle (2mm); \fill[white] ([xshift=80mm,yshift=-230mm]current page.north west) circle (1mm); % SIDE AREAS: Subtle circuit elements on left and right edges \draw[crimson!30, line width=1pt] ([xshift=15mm,yshift=-120mm]current page.north west) -- ++(20mm,0); \draw[crimson!30, line width=1pt] ([xshift=175mm,yshift=-130mm]current page.north west) -- ++(15mm,0); \fill[crimson!50] ([xshift=25mm,yshift=-120mm]current page.north west) circle (1.5mm); \fill[white] ([xshift=25mm,yshift=-120mm]current page.north west) circle (0.8mm); \fill[crimson!50] ([xshift=185mm,yshift=-130mm]current page.north west) circle (1.5mm); \fill[white] ([xshift=185mm,yshift=-130mm]current page.north west) circle (0.8mm); % Title positioned in center - CLEAN AREA \node[inner sep=0mm,draw=none,anchor=center,text width=0.8\textwidth, align=center,font={\fontsize{44pt}{44}\selectfont\bfseries}] (BGG) at (current page.center) {\color{crimson}\MakeUppercase {#1}}; \end{tikzpicture} \clearpage } % Define \lab command for lab styling (different visual treatment) \newcommand{\lab}[1]{% \begin{tikzpicture}[remember picture,overlay] %%% % Different background pattern for labs \coordinate(S1)at([yshift=-200mm]current page.north west); \draw[draw=none,fill=BlueDD!15](S1)--++(45:16)coordinate(S2)- |(S2|-current page.north west)--(current page.north west)coordinate(S3)--(S1); % \coordinate(E1)at([yshift=-98mm]current page.north west); \draw[draw=none,fill=BlueDD!25](E1)--(current page.north west)coordinate(E2) --++(0:98mm)coordinate(E3)--(E1); % \coordinate(D1)at([yshift=15mm]current page.south west); \draw[draw=none,fill=BlueDD!60,opacity=0.7](D1)--++(45:5.5)coordinate(D2) -|(D2|-current page.north west)--(current page.north west)coordinate(D3)--(D1); %%%% \path[red](S2)-|(S2-|current page.east)coordinate(SS2); %LAB - Different styling \node[crimson,align=flush right,inner sep=0,outer sep=0mm,draw=none,anchor=south, font={\fontsize{48pt}{48}\selectfont\bfseries}] (BG) at ($(S2)!0.5!(SS2)$){\hphantom{Workshop}}; %%% \path[green]([yshift=15mm]D2)-|coordinate(TPD)(BG.south east); \node[inner sep=0mm,draw=none,anchor=south east,%text width=0.9\textwidth, align=right,font={\fontsize{40pt}{40}\selectfont}] (BGG) at (TPD) {\color{crimson}\MakeUppercase {#1}};%\MakeUppercase {} \end{tikzpicture} \thispagestyle{empty} \clearpage } % ============================================================================= % SECTION FORMATTING % ============================================================================= % All section levels use crimson color and are ragged right % Section (Large, bold, crimson) \titleformat{\section} {\normalfont\Large\bfseries\color{crimson}\raggedright} {\thesection} {0.5em} {#1} \titlespacing*{\section}{0pc}{14pt plus 4pt minus 4pt}{6pt plus 2pt minus 2pt}[0pc] % Subsection (large, bold, crimson) \titleformat{\subsection} {\normalfont\large\bfseries\color{crimson}\raggedright} {\thesubsection} {0.5em} {#1} \titlespacing*{\subsection}{0pc}{12pt plus 4pt minus 4pt}{5pt plus 1pt minus 2pt}[0pc] % Subsubsection (normal size, bold, crimson) \titleformat{\subsubsection} {\normalfont\normalsize\bfseries\color{crimson}\raggedright} {\thesubsubsection} {0.5em} {#1} \titlespacing*{\subsubsection}{0pc}{12pt plus 4pt minus 4pt}{5pt plus 1pt minus 2pt}[0pc] % Paragraph (run-in, bold, crimson, ends with period) \titleformat{\paragraph}[runin] {\normalfont\normalsize\bfseries\color{crimson}} {\theparagraph} {0.5em} {#1} [\textbf{.}] \titlespacing*{\paragraph}{0pc}{6pt plus 2pt minus 2pt}{0.5em}[0pc] % Subparagraph (run-in, italic, crimson, ends with period) \titleformat{\subparagraph}[runin] {\normalfont\normalsize\itshape\color{crimson}} {\thesubparagraph} {0.5em} {#1} [\textbf{.}] \titlespacing*{\subparagraph}{0pc}{6pt plus 2pt minus 2pt}{0.5em}[0pc] % ============================================================================= % CHAPTER FORMATTING % ============================================================================= % Numbered chapters: "Chapter X" prefix, huge crimson title \titleformat{\chapter}[display] {\normalfont\huge\bfseries\color{crimson}} {\chaptername\ \thechapter} {20pt} {\Huge #1} [] % Unnumbered chapters: no prefix, huge crimson title \titleformat{name=\chapter,numberless} {\normalfont\huge\bfseries\color{crimson}} {} {0pt} {\Huge #1} [] \renewcommand{\chaptername}{Chapter} % ============================================================================= % TABLE OF CONTENTS FORMATTING % ============================================================================= \setcounter{tocdepth}{2} % Show chapters, sections, subsections % TOC spacing adjustments for number widths and indentation \setlength{\cftchapnumwidth}{2em} % Chapter number width \setlength{\cftsecnumwidth}{2.75em} % Section number width \setlength{\cftsubsecnumwidth}{3.25em} % Subsection number width \setlength{\cftsubsubsecnumwidth}{4em} % Subsubsection number width \setlength{\cftsubsecindent}{4.25em} % Subsection indent \setlength{\cftsubsubsecindent}{7.5em} % Subsubsection indent % Chapter entries in TOC: bold crimson with "Chapter" prefix \renewcommand{\cftchapfont}{\bfseries\color{crimson}} \renewcommand{\cftchappresnum}{\color{crimson}Chapter~} % Custom formatting for division entries (styled like parts) \newcommand{\divisionchapter}[1]{% \addvspace{12pt}% \noindent\hfil\bfseries\color{crimson}#1\hfil\par% \addvspace{6pt}% } % Adjust TOC spacing for "Chapter" prefix \newlength{\xtraspace} \settowidth{\xtraspace}{\cftchappresnum\cftchapaftersnum} \addtolength{\cftchapnumwidth}{\xtraspace} % Unnumbered chapters with TOC entry \newcommand{\likechapter}[1]{% \chapter*{#1} \addcontentsline{toc}{chapter}{\textcolor{crimson}{#1}} } % ============================================================================= % PAGE NUMBERING SYSTEM % ============================================================================= % Hardware Kits uses Arabic numerals (1, 2, 3...) throughout the entire document. % No frontmatter/mainmatter split - all content is practical lab material. % % Note: The \AtBeginDocument in before-body-includes.tex sets \pagenumbering{arabic} % Reset footnote counter at each chapter \makeatletter \let\old@chapter\chapter% \renewcommand{\chapter}{% \@ifstar{\unnumbered@chapter}{\numbered@chapter}% } \newcommand{\numbered@chapter}[1]{% \setcounter{sidenote}{1} \old@chapter{#1}% } \newcommand{\unnumbered@chapter}[1]{% \setcounter{sidenote}{1} \old@chapter*{#1}% } \makeatother % ============================================================================= % TABLE SIZING AND SPACING % ============================================================================= % Make tables slightly smaller to fit more content \AtBeginEnvironment{longtable}{\scriptsize} % Increase vertical spacing in table cells (default is 1.0) \renewcommand{\arraystretch}{1.3} % Prefer placing tables at the top of pages \makeatletter \renewcommand{\fps@table}{t} % Default placement: top of page \makeatother % ============================================================================= % LONGTABLE PAGE BREAKING FIXES (Windows compatibility) % ============================================================================= % Prevent "Infinite glue shrinkage" errors on Windows LaTeX builds % by giving longtable more flexibility in page breaking % Allow more flexible page breaking (vs strict \flushbottom) \raggedbottom % Process more rows before attempting page break (default is 20) \setcounter{LTchunksize}{50} % Add extra stretch for longtable environments specifically \AtBeginEnvironment{longtable}{% \setlength{\emergencystretch}{3em}% \setlength{\parskip}{0pt plus 1pt}% } % ============================================================================= % TABLE STYLING - Clean tables with crimson borders % ============================================================================= % Professional table appearance with: % - Clean white background (no colored rows) % - Crimson-colored borders % - Good spacing for readability % % Note: Headers are automatically bolded by Quarto when using **text** in source \usepackage{booktabs} % Professional table rules (\toprule, \midrule, \bottomrule) \usepackage{colortbl} % For colored borders (\arrayrulecolor) % Global table styling - crimson borders \setlength{\arrayrulewidth}{0.5pt} % Thinner borders than default %\arrayrulecolor{crimson} % Crimson borders matching brand \setcounter{chapter}{0}