Files
PrimeTeX/packages/Layout.sty
2025-08-27 22:34:17 -05:00

137 lines
3.8 KiB
TeX

\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{PrimeTeX/packages/Layout}[2025-07-09]
% Suppress warning about \showhyphens being changed.
\let\CheckCommand\providecommand
\NewDocumentCommand{\providelength}{m O{0pt}}{%
\ifdeflength{#1}{% It is already defined!
}{% Not defined, so define it!
\newlength{#1}%
}%
\setlength{#1}{#2}%
}
\RequirePackage{microtype}
% Page Layout
\RequirePackage[
letterpaper,
width = 4.75in, % 342pt,
height = 8.0in, % 576pt,
left = 1.5in, % 108pt,
top = 1.5in, % 108pt,
head = 12pt, % 1/6in
headsep = 24pt, % 1/3in
marginparwidth = 1.75in, % 126pt,
marginparsep = 12pt, % 1/6in
footskip = 0.5in, % 36pt,
]{geometry}
% Redefine the commands geometry uses to draw the page frame to customize the
% color.
\renewcommand{\Gm@vrule}{\color{layoutColor}\vrule width 0.2pt height\textheight depth\z@}
\renewcommand{\Gm@hrule}{\color{layoutColor}\hrule height 0.2pt depth\z@ width\textwidth}
\renewcommand{\Gm@hruled}{\color{layoutColor}\hrule height\z@ depth0.2pt width\textwidth}
% Suppress "Underfull \hbox" infos.
\hbadness=10000
\ifthenelse{\boolean{isDraft}}{
\geometry{showframe}
\hfuzz = 2.0pt
}{
% Suppress small overfull infos.
\hfuzz = 6.0pt
\vfuzz = 0.0pt
}
\ifthenelse{\boolean{isElectronic}}{
% \geometry{}
}{
\geometry{twoside}
}
\RequirePackage{calc}
\RequirePackage[strict]{changepage}
\providelength{\marparwidth}[\marginparsep + \marginparwidth]
\providelength{\contentwidth}[\textwidth + \marparwidth]
\RequirePackage[balanced]{lua-widow-control}
\ifthenelse{\boolean{isDraft}}{
\lwcsetup{draft=false,showcolours=true}
}{}
% Paragraph formatting.
\setlength{\parindent}{0pt}
\setlength{\parskip}{2ex plus 0.5ex minus 0.5ex}
% Float Page Configuration
\renewcommand{\topfraction}{0.9} % max fraction of floats at top
\renewcommand{\bottomfraction}{0.8} % max fraction of floats at bottom
% Parameters for TEXT pages (not float pages):
\setcounter{topnumber}{2}
\setcounter{bottomnumber}{2}
\setcounter{totalnumber}{4} % 2 may work better
\setcounter{dbltopnumber}{2} % for 2-column pages
\renewcommand{\dbltopfraction}{0.9} % fit big float above 2-col. text
\renewcommand{\textfraction}{0.07} % allow minimal text w. figs
% Parameters for FLOAT pages (not text pages):
\renewcommand{\floatpagefraction}{0.8} % require fuller float pages
% N.B.: floatpagefraction MUST be less than topfraction !!
\renewcommand{\dblfloatpagefraction}{0.8} % require fuller float pages
% Line-breaking zero-width space
\NewDocumentCommand{\zws}{}{\hspace{0pt}}
% Line-breaking dot
\NewDocumentCommand{\bdot}{}{.\zws}
\newcommand{\bigfloatoffsetratio}{2}
% Maximum width adjustment to fit 2 16x9 screensots on one page.
\providelength{\bigfloatoverhang}[0.54in]
\providecommand{\adjwidthtype}{}
\NewDocumentCommand{\BigFloat}{
% Overhang: the distance that the BigFloat extends into the margins.
O{\bigfloatoverhang}
% Float position: where the float may appear on the page.
O{htpb}
% Offset: the distance to offset the center of the BigFloat from the center
% of the text block.
O{\bigfloatoffsetratio}
% Float type: figure or table.
m
% Content: what appears in the BigFloat.
+m
}{%
\ifthenelse{\boolean{isElectronic}}{%
\@bigfloat{#1}{#2}{#3}{#4}{#5}{adjustwidth}%
}{%
\@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}}{%
{\color{layoutColor}\rule{\textwidth}{1pt}\zws}%
#5%
%{\color{layoutColor}\rule{\textwidth}{1pt}}%
}{%
#5%
}%
\end{minipage}%
\end{#6}%
\end{#4}%
}