From c914902f59b4a9306f8695df87a64769a4fabdbd Mon Sep 17 00:00:00 2001 From: Silcantar Date: Sun, 17 Aug 2025 22:29:41 -0500 Subject: [PATCH] - Add custom header/footer. - Add option to generate files optimized for either print or electronic reading. --- Manual.cls | 69 +++++++++++++++++++----------------- Submittal.cls | 32 +---------------- commonincludes.def | 33 +++++++++++++++++ geometry.tex => geometry.def | 0 packages/Color.sty | 6 ++-- packages/Header.sty | 49 +++++++++++++++++++++++++ packages/Layout.sty | 47 ++++++++++++++---------- packages/Links.sty | 10 ++++-- packages/Marginalia.sty | 6 ++-- packages/Titles.sty | 4 ++- 10 files changed, 165 insertions(+), 91 deletions(-) create mode 100644 commonincludes.def rename geometry.tex => geometry.def (100%) create mode 100644 packages/Header.sty diff --git a/Manual.cls b/Manual.cls index 51d6262..547206b 100644 --- a/Manual.cls +++ b/Manual.cls @@ -1,8 +1,17 @@ \NeedsTeXFormat{LaTeX2e} -\ProvidesClass{PrimeTeX/Manual}[2025-07-09] +\ProvidesClass{PrimeTeX/Manual}[2025-08-16] \RequirePackage{ifthen} +% Option 'electronic': single side printing. +\newboolean{isElectronic} +\setboolean{isElectronic}{false} + +\DeclareOption{electronic}{ + \setboolean{isElectronic}{true} +} + +% Option 'admin': turn on admin manual sections. \newboolean{isAdminManual} \setboolean{isAdminManual}{false} @@ -10,6 +19,7 @@ \setboolean{isAdminManual}{true} } +% Option 'darkmode': render as light text on dark background. \newboolean{isDarkMode} \setboolean{isDarkMode}{false} @@ -17,7 +27,12 @@ \setboolean{isDarkMode}{true} } -\DeclareOption{showoverfull}{ +% Option 'draft': same as base book class, but with bigger overfull boxes. +\newboolean{isDraft} +\setboolean{isDraft}{false} + +\DeclareOption{draft}{ + \setboolean{isDraft}{true} \overfullrule = 1in } @@ -25,40 +40,28 @@ \ProcessOptions\relax -\LoadClass{book} - -\ifthenelse{\boolean{isDarkMode}}{ - \RequirePackage[darkmode]{PrimeTeX/packages/Color} +\ifthenelse{\boolean{isElectronic}}{ + \ifthenelse{\boolean{isDraft}}{ + \LoadClass[draft,oneside]{book} + }{ + \LoadClass[oneside]{book} + } }{ - \RequirePackage{PrimeTeX/packages/Color} + \ifthenelse{\boolean{isDraft}}{ + \LoadClass[draft]{book} + }{ + \LoadClass{book} + } } -\RequirePackage{PrimeTeX/packages/CrossRef} - -\RequirePackage{PrimeTeX/packages/DocProperties} - -\RequirePackage{PrimeTeX/packages/Fonts} - -\RequirePackage{PrimeTeX/packages/Glossary} - -\RequirePackage{PrimeTeX/packages/Graphics} - -\RequirePackage{PrimeTeX/packages/Hyphenation} - -\RequirePackage{PrimeTeX/packages/Index} - -\RequirePackage{PrimeTeX/packages/Layout} - -\RequirePackage{PrimeTeX/packages/Links} - -\RequirePackage{PrimeTeX/packages/Marginalia} - -\RequirePackage{PrimeTeX/packages/Tables} - -\RequirePackage{PrimeTeX/packages/TitlePage} - -\RequirePackage{PrimeTeX/packages/Titles} +\input{PrimeTeX/commonincludes.def} \newcommand{\IfAdminManual}[2]{ \ifthenelse{\boolean{isAdminManual}}{#1}{#2} -} \ No newline at end of file +} + +\newcommand{\IfElectronic}[2]{ + \ifthenelse{\boolean{isElectronic}}{#1}{#2} +} + +\newcommand{\rem}[1]{} \ No newline at end of file diff --git a/Submittal.cls b/Submittal.cls index aa9b2cb..9019a28 100644 --- a/Submittal.cls +++ b/Submittal.cls @@ -20,34 +20,4 @@ \LoadClass{article} -\ifthenelse{\boolean{isDarkMode}}{ - \RequirePackage[darkmode]{PrimeTeX/packages/Color} -}{ - \RequirePackage{PrimeTeX/packages/Color} -} - -\RequirePackage{PrimeTeX/packages/CrossRef} - -\RequirePackage{PrimeTeX/packages/DocProperties} - -\RequirePackage{PrimeTeX/packages/Fonts} - -\RequirePackage{PrimeTeX/packages/Glossary} - -\RequirePackage{PrimeTeX/packages/Graphics} - -\RequirePackage{PrimeTeX/packages/Hyphenation} - -\RequirePackage{PrimeTeX/packages/Index} - -\RequirePackage{PrimeTeX/packages/Layout} - -\RequirePackage{PrimeTeX/packages/Links} - -\RequirePackage{PrimeTeX/packages/Marginalia} - -\RequirePackage{PrimeTeX/packages/Tables} - -\RequirePackage{PrimeTeX/packages/TitlePage} - -\RequirePackage{PrimeTeX/packages/Titles} \ No newline at end of file +\input{PrimeTeX/commonincludes.def} \ No newline at end of file diff --git a/commonincludes.def b/commonincludes.def new file mode 100644 index 0000000..a554891 --- /dev/null +++ b/commonincludes.def @@ -0,0 +1,33 @@ +\ifthenelse{\boolean{isDarkMode}\AND\boolean{isElectronic}}{ + \RequirePackage[darkmode]{PrimeTeX/packages/Color} +}{ + \RequirePackage{PrimeTeX/packages/Color} +} + +\RequirePackage{PrimeTeX/packages/CrossRef} + +\RequirePackage{PrimeTeX/packages/DocProperties} + +\RequirePackage{PrimeTeX/packages/Fonts} + +\RequirePackage{PrimeTeX/packages/Glossary} + +\RequirePackage{PrimeTeX/packages/Graphics} + +\RequirePackage{PrimeTeX/packages/Header} + +\RequirePackage{PrimeTeX/packages/Hyphenation} + +\RequirePackage{PrimeTeX/packages/Index} + +\RequirePackage{PrimeTeX/packages/Layout} + +\RequirePackage{PrimeTeX/packages/Links} + +\RequirePackage{PrimeTeX/packages/Marginalia} + +\RequirePackage{PrimeTeX/packages/Tables} + +\RequirePackage{PrimeTeX/packages/TitlePage} + +\RequirePackage{PrimeTeX/packages/Titles} \ No newline at end of file diff --git a/geometry.tex b/geometry.def similarity index 100% rename from geometry.tex rename to geometry.def diff --git a/packages/Color.sty b/packages/Color.sty index 2c2d929..852c782 100644 --- a/packages/Color.sty +++ b/packages/Color.sty @@ -19,12 +19,14 @@ \color[rgb]{0.9,0.9,0.9} \definecolor{pageColor}{rgb}{0.2,0.2,0.2} + \definecolor{textColor}{rgb}{0.9,0.9,0.9} \definecolor{paleGray}{rgb}{0.3,0.3,0.3} \definecolor{PrimeBlue}{RGB}{149, 164, 237} \definecolor{PrimePaleBlue}{RGB}{35, 39, 56} }{ \colorlet{pageColor}{white} + \colorlet{textColor}{black} \colorlet{paleGray}{gray!10} \definecolor{PrimeBlue}{RGB}{25,45,145} @@ -36,10 +38,10 @@ \RequirePackage{PrimeTeX/packages/Layout} -\newcommand{\boxedcolor}[3][white]{% +\newcommand{\boxedcolor}[1]{% \providelength[\fboxsep]{\fboxsepdefault}% \setlength{\fboxsep}{2pt}% - \fcolorbox{black}{#2}{\textcolor{#1}{#3}}% + \fcolorbox{black}{#1}{{\rule{0pt}{1ex}\rule{1ex}{0pt}}}% \setlength{\fboxsep}{\fboxsepdefault}% } diff --git a/packages/Header.sty b/packages/Header.sty new file mode 100644 index 0000000..8922710 --- /dev/null +++ b/packages/Header.sty @@ -0,0 +1,49 @@ +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{PrimeTeX/packages/Header}[2025-08-16] + +% Header & Footer Options +\RequirePackage{fancyhdr} +\pagestyle{fancy} + +\fancyhf{} + +\renewcommand{\headrulewidth}{0pt} +\renewcommand{\footrulewidth}{0pt} + +\newlength{\outsideheaderoffset} +\setlength{\outsideheaderoffset}{1.0in} +\newlength{\insideheaderoffset} +\setlength{\insideheaderoffset}{0.5in} + +\newcommand{\parttitle}{} + +\renewcommand{\chaptermark}[1]{ \markboth{#1}{} } + +\fancypagestyle{fancy}{ + \ifthenelse{\boolean{isElectronic}}{ + \fancyhfoffset[L]{\insideheaderoffset} + \fancyhfoffset[R]{\outsideheaderoffset} + \fancyhead[L]{\partname{} \thepart{}: \parttitle} + \fancyhead[R]{\chaptername{} \thechapter{}: \leftmark} + + \fancyfoot[R]{\thepage} + }{ + \fancyhfoffset[LE,RO]{\outsideheaderoffset} + \fancyhead[LE]{\partname{} \thepart{}: \parttitle} + \fancyhead[RO]{\chaptername{} \thechapter{}: \leftmark} + + \fancyfoot[LE,RO]{\thepage} + } +} + +\fancypagestyle{plain}{ % + \fancyhf{} % remove everything + \renewcommand{\headrulewidth}{0pt} % remove lines as well + \renewcommand{\footrulewidth}{0pt} + + \ifthenelse{\boolean{isElectronic}}{ + \fancyfoot[R]{\thepage} + }{ + \fancyfoot[LE,RO]{\thepage} + } +} diff --git a/packages/Layout.sty b/packages/Layout.sty index 829942e..2baf3aa 100644 --- a/packages/Layout.sty +++ b/packages/Layout.sty @@ -4,8 +4,6 @@ % Suppress warning about \showhyphens being changed. \let\CheckCommand\providecommand -%\usepackage{ifmtarg} - \providecommand{\providelength}[2][0pt]{% \ifdeflength{#2}{% It is already defined! }{% Not defined, so define it! @@ -16,29 +14,32 @@ \RequirePackage{microtype} -% Page Layout \RequirePackage[ letterpaper, - twoside, - nohead, - width = 342pt, - height = 576pt, - inner = 108pt, - top = 108pt, - marginparwidth = 126pt, + width = 4.75in, % 342pt, + height = 8.0in, % 576pt, + left = 1.5in, % 108pt, + top = 1.5in, % 108pt, + head = 12pt, + headsep = 24pt, + marginparwidth = 1.75in, % 126pt, marginparsep = 12pt, - footskip = 36pt, + footskip = 0.5in, % 36pt, ]{geometry} +% Page Layout +\ifthenelse{\boolean{isElectronic}}{ +% \geometry{} +}{ + \geometry{twoside} +} + \RequirePackage{calc} \RequirePackage[strict]{changepage} \newlength{\contentwidth} \setlength{\contentwidth}{\textwidth + \marginparsep + \marginparwidth} -% Header & Footer Options -\pagestyle{plain} - % Widow & Orphan control. \RequirePackage[ defaultlines = 4, @@ -78,11 +79,19 @@ \newcommand{\bigfloat}[4][\bigfloatoverhang]{% \begin{#2}[#3]% - \begin{adjustwidth*}{-#1+\bigfloatoffset}{-#1-\bigfloatoffset}% - \begin{minipage}{#1 * 2 + \textwidth}% - #4% - \end{minipage}% - \end{adjustwidth*}% + \ifthenelse{\boolean{isElectronic}}{ + \begin{adjustwidth}{-#1+\bigfloatoffset}{-#1-\bigfloatoffset}% + \begin{minipage}{#1 * 2 + \textwidth}% + #4% + \end{minipage}% + \end{adjustwidth}% + }{ + \begin{adjustwidth*}{-#1+\bigfloatoffset}{-#1-\bigfloatoffset}% + \begin{minipage}{#1 * 2 + \textwidth}% + #4% + \end{minipage}% + \end{adjustwidth*}% + } \end{#2}% } diff --git a/packages/Links.sty b/packages/Links.sty index 05bf184..f5af68b 100644 --- a/packages/Links.sty +++ b/packages/Links.sty @@ -1,11 +1,15 @@ \NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{PrimeTeX/packages/Links}[2025-07-09] +\ProvidesPackage{PrimeTeX/packages/Links}[2025-08-17] \RequirePackage{PrimeTeX/packages/Color} % Use Hyperref to automatically create links in the document \RequirePackage{hyperref} -\hypersetup{colorlinks=true, allcolors=PrimeBlue} - +\ifthenelse{\boolean{isElectronic}}{ + \hypersetup{colorlinks=true, allcolors=PrimeBlue} +}{ + \hypersetup{colorlinks=true, allcolors=textColor} +} + \RequirePackage{hypcap} \ No newline at end of file diff --git a/packages/Marginalia.sty b/packages/Marginalia.sty index 9ba49bc..9a86e83 100644 --- a/packages/Marginalia.sty +++ b/packages/Marginalia.sty @@ -8,13 +8,15 @@ \marginaliasetup{ ysep = {\parskip}, ysep page bottom = { - - 1in + - 1in % Top gutter + \paperheight - \voffset - \topmargin + - \headheight + - \headsep - \textheight }, - yshift = {7pt}, + yshift = {7pt}, % Just a magic number that lines up margin notes with their reference. style recto outer = {\raggedright\small\color{marginTextColor}}, style verso outer = {\raggedleft\small\color{marginTextColor}}, } diff --git a/packages/Titles.sty b/packages/Titles.sty index 1966ebc..839199d 100644 --- a/packages/Titles.sty +++ b/packages/Titles.sty @@ -3,10 +3,12 @@ \RequirePackage[raggedright]{titlesec} +\renewcommand{\thepart}{\arabic{part}} + \titleformat{\part}[display]{ \normalfont\sbfamily\huge\centering }{ - Part \arabic{part} + \partname{} \thepart }{20pt}{\Huge} \titleformat{\chapter}[display]{