Files
cs249r_book/kits/tex/header-includes.tex
Vijay Janapa Reddi 6a1e477510 fix: use Arabic page numbers throughout Kits PDF
- Remove Roman numeral frontmatter/mainmatter switching
- Set Arabic page numbering in before-body-includes.tex
- Simplify chapter command to just reset footnote counter
- All pages now use regular numbers (1, 2, 3...) not (i, ii, iii...)
2025-12-28 12:06:02 -05:00

833 lines
33 KiB
TeX
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
% =============================================================================
% 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}