Lots of changes.

This commit is contained in:
2025-08-28 16:56:27 -05:00
parent f4571bcbcf
commit 168dca350f
8 changed files with 275 additions and 97 deletions

View File

@@ -36,6 +36,14 @@
\overfullrule = 1in \overfullrule = 1in
} }
% Option 'admin': turn on admin manual sections.
\newboolean{doRomanNumerals}
\setboolean{doRomanNumerals}{false}
\DeclareOption{roman}{
\setboolean{doRomanNumerals}{true}
}
\DeclareOption*{\PassOptionsToClass{\CurrentOption}{book}} \DeclareOption*{\PassOptionsToClass{\CurrentOption}{book}}
\ProcessOptions\relax \ProcessOptions\relax

View File

@@ -32,17 +32,22 @@
\NewDocumentEnvironment{@boxout}{ \NewDocumentEnvironment{@boxout}{
m m +b m m +b
}{ }{
\label{box:#2}% \label{box:#1}%
\begin{tblrBoxout}{#1}% \begin{tblrBoxout}{#2}%
#3% #3%
\end{tblrBoxout}% \end{tblrBoxout}%
}{} }{}
\NewDocumentEnvironment{Boxout}{ \NewDocumentEnvironment{Boxout}{
O{colspec={X[l,h]}} % #1: Label, passed to @boxout argument #1.
>{\TrimSpaces}m >{\TrimSpaces}m
% #2: Tabularray colspec, passed to @boxout argument #2.
O{colspec={X[l,h]}}
% #3: Caption.
+m +m
% #4: [Ww] for warning box.
o o
% #5: Body, passed to @boxout.
+b +b
}{% }{%
\ifthenelse{\equal{#4}{w}\OR\equal{#4}{W}}{% \ifthenelse{\equal{#4}{w}\OR\equal{#4}{W}}{%
@@ -64,22 +69,34 @@
}{} }{}
\NewDocumentEnvironment{BigBoxout}{ \NewDocumentEnvironment{BigBoxout}{
% #1: Overhang, passed to BigFloat argument #1.
O{\bigfloatoverhang} O{\bigfloatoverhang}
% #2: Float placement, passed to BigFloat argument #2.
O{htpb} O{htpb}
% #3: Offset ratio, passed to BigFloat argument #3.
O{\bigfloatoffsetratio} O{\bigfloatoffsetratio}
O{X[l,h]} % #4: Label, passed to Boxout argument #1.
>{\TrimSpaces}m >{\TrimSpaces}m
% #5: Tabularray colpec, passed to Boxout argument #2.
O{X[l,h]}
% #6: Caption, passed to Boxout argument #3.
+m +m
% #7: [Ww] for warning box, if present passed to Boxout argument #4.
o o
% #5: Body, passed to Boxout.
+b +b
}{ }{
\begin{figure}[#2]% \begin{BigFloat}[generic][#1][#2][#3]%
\begin{adjustwidth}{-#1}{-#1 * \real{#3}}% \IfNoValueTF{#7}{%
\begin{Boxout}[#4]{#5}{#6}[#7]% \begin{Boxout}{#4}[#5]{#6}%
#8% #8%
\end{Boxout}% \end{Boxout}%
\end{adjustwidth}% }{%
\end{figure}% \begin{Boxout}{#4}[#5]{#6}[#7]%
#8%
\end{Boxout}%
}%
\end{BigFloat}%
}{} }{}
\NewDocumentEnvironment{WrapBoxout}{ \NewDocumentEnvironment{WrapBoxout}{

View File

@@ -1,31 +1,150 @@
\NeedsTeXFormat{LaTeX2e} \NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{PrimeTeX/packages/DocProperties}[2025-07-09] \ProvidesPackage{PrimeTeX/packages/DocProperties}[2025-07-09]
\RequirePackage[en-US]{datetime2}
\DTMnewdatestyle{longdate}{%
\renewcommand{\DTMdisplaydate}[4]{\number##3\ \DTMenglishmonthname{##2}\ \number##1}%
\renewcommand{\DTMDisplaydate}{\DTMdisplaydate}%
}
\NewDocumentCommand{\FormatDate}{m m}{%
\DTMsavedate{saveDate}{#1}%
\DTMsetdatestyle{#2}%
\DTMusedate{saveDate}
}
\RequirePackage{readarray}
\readarraysepchar{,}
\NewDocumentCommand{\GetRevision}{m}{%
\readdef{#1}\@RevHistory%
\readarray*\@RevHistory\@RevHistoryArray[-,\ncols]%
\Version[\@RevHistoryArray[2,1]]%
\edef\eDate{\@RevHistoryArray[2,2]}%
\DTMsavedate{tempDate}{\eDate}%
\DTMsetdatestyle{default}%
\Date[\DTMusedate{tempDate}]%
\DTMsetdatestyle{longdate}%
\LongDate[\DTMusedate{tempDate}]%
\Author[\@RevHistoryArray[2,3]]%
}
\NewDocumentCommand{\SetPDFInfo}{}{
\hypersetup{
pdfauthor = {\@AuthorCompany},
pdfsubject = {\ProjectTitle},
pdftitle = {\@Title},
pdfkeywords = {
Customer:~\@CustomerFull~(\@Customer),
Last~Modified~By:~\@Author,
Modification~Date:~\@Date,
Revision~Number:~\@Version,
\@AuthorCompany{}~Project~Number:~\@InternalProjectNumber,
},
}
}
\NewExpandableDocumentCommand{\ProjectTitle}{}{%
Project \@CustomerProjectNumber{}: \@ProjectDescription%
}
% Custom document properties. % Custom document properties.
\DeclareRobustCommand*{\customer}[1]{\gdef\@customer{#1}} \edef\@Author{}
\DeclareRobustCommand*{\customerFull}[1]{\gdef\@customerFull{#1}} \NewDocumentCommand{\Author}{>{\TrimSpaces}o}{%
\DeclareRobustCommand*{\projectNumber}[1]{\gdef\@projectNumber{#1}} \IfNoValueTF{#1}{%
\DeclareRobustCommand*{\projectDesc}[1]{\gdef\@projectDesc{#1}} \@Author%
\DeclareRobustCommand*{\version}[1]{\gdef\@version{#1}} }{%
\xdef\@Author{#1}%
% Macros to insert document properties. }%
\NewDocumentCommand{\sTitle}{}{\makeatletter{\@title}}
\NewDocumentCommand{\sAuthor}{}{\makeatletter{\@author}}
\NewDocumentCommand{\sDate}{}{\makeatletter{\@date}}
\NewDocumentCommand{\sCustomer}{}{\makeatletter{\@customer}}
\NewDocumentCommand{\sCustomerFull}{}{\makeatletter{\@customerFull}}
\NewDocumentCommand{\sProjectNumber}{}{\makeatletter{\@projectNumber}}
\NewDocumentCommand{\sProjectDesc}{}{\makeatletter{\@projectDesc}}
\NewDocumentCommand{\sProjectTitle}{}{\makeatletter{Project \@projectNumber : \@projectDesc}}
\NewDocumentCommand{\sVersion}{}{\makeatletter{\@version}}
\let\oldAuthor\author
\let\oldTitle\title
\renewcommand{\author}[1]{%
\oldAuthor{#1}%
\hypersetup{pdfauthor=#1}%
} }
\renewcommand{\title}[1]{%
\oldTitle{#1}% \edef\@AuthorCompany{}
\hypersetup{pdftitle=#1}% \NewDocumentCommand{\AuthorCompany}{>{\TrimSpaces}o}{%
\IfNoValueTF{#1}{%
\@AuthorCompany%
}{%
\xdef\@AuthorCompany{#1}%
}%
}
\edef\@Customer{}
\NewDocumentCommand{\Customer}{>{\TrimSpaces}o}{%
\IfNoValueTF{#1}{%
\@Customer%
}{%
\xdef\@Customer{#1}%
}%
}
\edef\@CustomerFull{}
\NewDocumentCommand{\CustomerFull}{>{\TrimSpaces}o}{%
\IfNoValueTF{#1}{%
\@CustomerFull%
}{%
\xdef\@CustomerFull{#1}%
}%
}
\edef\@CustomerProjectNumber{}
\NewDocumentCommand{\CustomerProjectNumber}{>{\TrimSpaces}o}{%
\IfNoValueTF{#1}{%
\@CustomerProjectNumber%
}{%
\xdef\@CustomerProjectNumber{#1}%
}%
}
\edef\@Date{}
\NewDocumentCommand{\Date}{>{\TrimSpaces}o}{%
\IfNoValueTF{#1}{%
\@Date%
}{%
\xdef\@Date{#1}%
}%
}
\edef\@LongDate{}
\NewDocumentCommand{\LongDate}{>{\TrimSpaces}o}{%
\IfNoValueTF{#1}{%
\@LongDate%
}{%
\xdef\@LongDate{#1}%
}%
}
\edef\@InternalProjectNumber{}
\NewDocumentCommand{\InternalProjectNumber}{>{\TrimSpaces}o}{%
\IfNoValueTF{#1}{%
\@InternalProjectNumber%
}{%
\xdef\@InternalProjectNumber{#1}%
}%
}
\edef\@ProjectDescription{}
\NewDocumentCommand{\ProjectDescription}{>{\TrimSpaces}o}{%
\IfNoValueTF{#1}{%
\@ProjectDescription%
}{%
\xdef\@ProjectDescription{#1}%
}%
}
\edef\@Title{}
\NewDocumentCommand{\Title}{>{\TrimSpaces}o}{%
\IfNoValueTF{#1}{%
\@Title%
}{%
\xdef\@Title{#1}%
}%
}
\edef\@Version{}
\NewDocumentCommand{\Version}{>{\TrimSpaces}o O{Revision: }}{%
\IfNoValueTF{#1}{%
\@Version%
}{%
\xdef\@Version{#1}%
}%
} }

View File

@@ -38,12 +38,12 @@
% Caption. % Caption.
m m
}{% }{%
\BigFloat[#1][#2][#3]{figure}{% \begin{BigFloat}[figure][#1][#2][#3]%
\captionsetup{type=figure}% \captionsetup{type=figure}%
\includegraphics[keepaspectratio,width=\linewidth]{#4}% \includegraphics[keepaspectratio,width=\linewidth]{#4}%
\Centering\captionof{figure}{#6}%\par \Centering\captionof{figure}{#6}%\par
\label{fig:#5}% \label{fig:#5}%
}% \end{BigFloat}%
} }
\NewDocumentCommand{\doublebigfig}{% \NewDocumentCommand{\doublebigfig}{%
@@ -64,17 +64,17 @@
% Second Graphic caption. % Second Graphic caption.
m m
}{% }{%
\BigFloat[#1][p][#2]{figure}{% \begin{BigFloat}[figure][#1][p][#2]%
\captionsetup{type=figure}% \captionsetup{type=figure}%
\includegraphics[keepaspectratio,width=\textwidth]{#3}% \includegraphics[keepaspectratio,width=\textwidth]{#3}%
\Centering\captionof{figure}{#5}\par% \Centering\captionof{figure}{#5}%
\label{fig:#4} \label{fig:#4}
\bigskip \bigskip
\captionsetup{type=figure}% \captionsetup{type=figure}%
\includegraphics[keepaspectratio,width=\textwidth]{#6}% \includegraphics[keepaspectratio,width=\textwidth]{#6}%
\Centering\captionof{figure}{#8}\par% \Centering\captionof{figure}{#8}%
\label{fig:#7}% \label{fig:#7}%
}% \end{BigFloat}%
} }
\RequirePackage{tabularray} \RequirePackage{tabularray}
@@ -85,9 +85,26 @@
] ]
\NewDocumentCommand{\twinfig}{% \NewDocumentCommand{\twinfig}{%
O{\bigfloatoverhang} m >{\TrimSpaces}m m m >{\TrimSpaces}m m% % Big Float overhang.
O{\bigfloatoverhang}
% Float placement.
O{htpb}
% BigFloat offset ratio.
O{\bigfloatoffsetratio}
% First graphic file.
m
% First label.
>{\TrimSpaces}m
% First caption.
m
% Second graphic file.
m
% Second label.
>{\TrimSpaces}m
% Second caption.
m
}{% }{%
\BigFloat[#1]{table}{% \begin{BigFloat}[generic][#1][#2][#3]%
\begin{tblr}{% \begin{tblr}{%
colspec = {*{2}{Q[c,m,wd=\twinfigwidth]}},% colspec = {*{2}{Q[c,m,wd=\twinfigwidth]}},%
hlines = {0pt}, hlines = {0pt},
@@ -109,22 +126,22 @@
\captionsetup{type=figure}% \captionsetup{type=figure}%
\includegraphics[% \includegraphics[%
keepaspectratio,width=\twinfigwidth% keepaspectratio,width=\twinfigwidth%
]{#2}% ]{#4}%
\captionof{figure}{#4}% \captionof{figure}{#6}%
\label{fig:#3} \label{fig:#5}
\vfill% \vfill%
&% &%
\vfill \vfill
\captionsetup{type=figure}% \captionsetup{type=figure}%
\includegraphics[% \includegraphics[%
keepaspectratio,width=\twinfigwidth% keepaspectratio,width=\twinfigwidth%
]{#5}% ]{#7}%
\captionof{figure}{#7}% \captionof{figure}{#9}%
\label{fig:#6} \label{fig:#8}
\vfill% \vfill%
\\% \\%
\end{tblr}% \end{tblr}%
}% \end{BigFloat}%
} }
\NewDocumentCommand{\wrapfig}{ \NewDocumentCommand{\wrapfig}{

View File

@@ -28,6 +28,8 @@
footskip = 0.5in, % 36pt, footskip = 0.5in, % 36pt,
]{geometry} ]{geometry}
\RequirePackage{float}
% Redefine the commands geometry uses to draw the page frame to customize the % Redefine the commands geometry uses to draw the page frame to customize the
% color. % color.
\renewcommand{\Gm@vrule}{\color{layoutColor}\vrule width 0.2pt height\textheight depth\z@} \renewcommand{\Gm@vrule}{\color{layoutColor}\vrule width 0.2pt height\textheight depth\z@}
@@ -58,14 +60,16 @@
\providelength{\marparwidth}[\marginparsep + \marginparwidth] \providelength{\marparwidth}[\marginparsep + \marginparwidth]
\providelength{\contentwidth}[\textwidth + \marparwidth] \providelength{\contentwidth}[\textwidth + \marparwidth]
\RequirePackage[balanced]{lua-widow-control} \RequirePackage[
balanced,
]{lua-widow-control}
\ifthenelse{\boolean{isDraft}}{ \ifthenelse{\boolean{isDraft}}{
\lwcsetup{draft=false,showcolours=true} \lwcsetup{draft=false,showcolours=true}
}{} }{}
% Paragraph formatting. % Paragraph formatting.
\setlength{\parindent}{0pt} \setlength{\parindent}{0pt}
\setlength{\parskip}{2ex plus 0.5ex minus 0.5ex} \setlength{\parskip}{\medskipamount}
% Float Page Configuration % Float Page Configuration
\renewcommand{\topfraction}{0.9} % max fraction of floats at top \renewcommand{\topfraction}{0.9} % max fraction of floats at top
@@ -87,43 +91,42 @@
% Line-breaking dot % Line-breaking dot
\NewDocumentCommand{\bdot}{}{.\zws} \NewDocumentCommand{\bdot}{}{.\zws}
\NewDocumentEnvironment{SmartAdjustWidth}{O{\boolean{isElectronic}} m m +b}{%
\ifthenelse{#1}{%
\begin{adjustwidth}{#2}{#3}%
#4%
\end{adjustwidth}%
}{%
\begin{adjustwidth*}{#2}{#3}%
#4%
\end{adjustwidth*}%
}%
}{}
\newcommand{\bigfloatoffsetratio}{2} \newcommand{\bigfloatoffsetratio}{2}
% Maximum width adjustment to fit 2 16x9 screensots on one page. % Maximum width adjustment to fit 2 16x9 screensots on one page.
\providelength{\bigfloatoverhang}[0.54in] \providelength{\bigfloatoverhang}[0.54in]
\providecommand{\adjwidthtype}{} \floatstyle{plain}
\newfloat{generic}{htpb}{lgf}
\NewDocumentCommand{\BigFloat}{ \NewDocumentEnvironment{BigFloat}{
% Overhang: the distance that the BigFloat extends into the margins. % #1: Float type
O{generic}
% #2: Overhang: the distance that the BigFloat extends into the margins.
O{\bigfloatoverhang} O{\bigfloatoverhang}
% Float position: where the float may appear on the page. % #3: Float position: where the float may appear on the page.
O{htpb} O{htpb}
% Offset: the distance to offset the center of the BigFloat from the center % #4: Offset: the distance to offset the center of the BigFloat from the center
% of the text block. % of the text block.
O{\bigfloatoffsetratio} O{\bigfloatoffsetratio}
% Float type: figure or table. % #5: Body: what appears in the BigFloat.
m +b
% Content: what appears in the BigFloat.
+m
}{% }{%
\ifthenelse{\boolean{isElectronic}}{% \begin{#1}[#3]% float environment
\@bigfloat{#1}{#2}{#3}{#4}{#5}{adjustwidth}% \begin{SmartAdjustWidth}{-#2}{-#2 * \real{#4}}% adjustwidth(*)
}{% \begin{minipage}{\linewidth}%#2 * (#4 + 1) + \textwidth}%
\@bigfloat{#1}{#2}{#3}{#4}{#5}{adjustwidth*}%
}%
}
\NewDocumentCommand{\@bigfloat}{
% First 5 arguments are same as \BigFloat.
m m m m +m
% Argument 6 is the adjustwidth type:
% adjustwidth for one-sided document; adjustwidth* for two-sided.
m
}{
\begin{#4}[#2]% figure/table
\begin{#6}{-#1}{-#1 * \real{#3}}% adjustwidth(*)
\begin{minipage}{#1 * (#3 + 1) + \textwidth}%
\ifthenelse{\boolean{isDraft}}{% \ifthenelse{\boolean{isDraft}}{%
{\color{layoutColor}\rule{\textwidth}{1pt}\zws}% {\color{layoutColor}\rule{\textwidth}{1pt}\zws}%
#5% #5%
@@ -132,6 +135,6 @@
#5% #5%
}% }%
\end{minipage}% \end{minipage}%
\end{#6}% \end{#5}%
\end{#4}% \end{#1}%
} }{}

View File

@@ -4,21 +4,32 @@
\RequirePackage{PrimeTeX/packages/Color} \RequirePackage{PrimeTeX/packages/Color}
% Use Hyperref to automatically create links in the document % Use Hyperref to automatically create links in the document
\RequirePackage{hyperref} \RequirePackage[
final,
colorlinks = true,
pdfpagemode = UseOutlines,
pdfdisplaydoctitle = true,
bookmarksnumbered = true,
bookmarksopen = true,
bookmarksopenlevel = 2,
]{hyperref}
\ifthenelse{\boolean{isElectronic}}{ \ifthenelse{\boolean{isElectronic}}{
\hypersetup{ \hypersetup{
final,
colorlinks = true,
allcolors = PrimeBlue, allcolors = PrimeBlue,
pdfpagemode = UseOutlines,
} }
}{ }{
\hypersetup{ \hypersetup{
final,
colorlinks = true,
allcolors = textColor, allcolors = textColor,
pdfduplex = true,
pdfpagelayout = TwoPageRight,
} }
} }
\RenewDocumentCommand{\chapterautorefname}{}{Chapter}
\RenewDocumentCommand{\sectionautorefname}{}{Section}
\RenewDocumentCommand{\subsectionautorefname}{}{Subsection}
\RenewDocumentCommand{\subsubsectionautorefname}{}{Sub-subsection}
\RenewDocumentCommand{\paragraphautorefname}{}{Paragraph}
\RequirePackage{hypcap} \RequirePackage{hypcap}

View File

@@ -10,11 +10,11 @@
{\noindent\large\raggedright {\noindent\large\raggedright
\vspace*{\stretch{1}} \vspace*{\stretch{1}}
\sCustomerFull \CustomerFull
\medbreak \medbreak
\sProjectTitle \ProjectTitle
\bigbreak \bigbreak
{\Huge \sTitle} {\Huge\Title}
\vfill \vfill
{\leavevmode {\leavevmode
% Move the rule graphic to 0.25 in from the left edge of the % Move the rule graphic to 0.25 in from the left edge of the
@@ -28,11 +28,12 @@
} }
} }
\sAuthor \AuthorCompany
Revision \sVersion Revision \Version
\LongDate
\sDate
\vfill \vfill
} }
\end{sbfamily} \end{sbfamily}

View File

@@ -3,7 +3,9 @@
\RequirePackage[raggedright]{titlesec} \RequirePackage[raggedright]{titlesec}
\renewcommand{\thepart}{\arabic{part}} \ifthenelse{\NOT\boolean{doRomanNumerals}}{
\renewcommand{\thepart}{\arabic{part}}
}{}
\titleformat{\part}[display]{ \titleformat{\part}[display]{
\normalfont\sbfamily\huge \normalfont\sbfamily\huge