"Conversely, on an odd page (i.e., a recto or right-side page) an error is produced, but the space is still added."
Well, nowadays that can be solved:
\NeedsTeXFormat{LaTeX2e}[2022-11-01]
\ProvidesPackage{addlines}[2023-02-03 v0.4 Add/remove lines from a page (WR)]
\if@filesw
\else
\IfFileExists{\jobname.aux}{
\PackageWarningNoLine{addlines}{%
It was not allowed to write to \jobname.aux.\MessageBreak%
A lot of packages do not work\MessageBreak%
without write access to files.\MessageBreak%
\jobname.aux already exists\MessageBreak%
from a preceding compilation run.\MessageBreak%
If it would not be changed by this run\MessageBreak%
everything is OK, otherwise enable write access.%
}
}{\PackageError{addlines}{%
Writing to \jobname.aux forbidden.}{%
\jobname.aux does not exist and\MessageBreak%
could not be created,\MessageBreak%
therefore it will not be possible\MessageBreak%
to add a line to a left side/column\MessageBreak%
when the \string\addlines\space command\MessageBreak%
is given on the right side/column.\MessageBreak%
}
}
\fi
\newcommand\addlines@onecol[1]{%
\addlines@here{#1}%
\if@twoside%
\checkoddpage%
\ifoddpage%
\if@filesw%
\addtocounter{addlinespage}{-1}%
\edef\al@beforeD{\arabic{addlinespage}}%
\addtocounter{addlinespage}{+1}%
\immediate\write\@auxout{\string\AddToHook{cmd/enlargepagebefore/after}{\string\enlargemaybe{#1}{\al@beforeD}}}%
\else%
\PackageWarning{addlines}{%
\string\enlargethispage\space only applied to right side.\MessageBreak%
Extra lines need to be added\MessageBreak%
to both sides of a doublepage spread,\MessageBreak%
but this generally requires writing to the \MessageBreak%
\jobname.aux file, which was not passible\MessageBreak% ... on line xy.
}%
\fi%
\else%
\afterpage{\addlines@here{#1}}%
\fi%
\fi%
}
\newcommand\addlines@twocol[1]{%
\if@firstcolumn%
\addlines@here{#1}%
\afterpage{\addlines@here[1]}%
\else% second column
\if@filesw%
\edef\al@beforeD{\arabic{addlinespage}}%
\immediate\write\@auxout{\string\AddToHook{cmd/enlargepagebefore/after}{\string\enlargemaybe{#1}{\al@beforeD}}}%
% enlarges BOTH columns
\else%
\PackageWarning{addlines}{%
\string\enlargethispage\space only applied to second column.\MessageBreak%
Extra lines need to be added\MessageBreak%
to both columns of a two column layout,\MessageBreak%
but this generally requires writing to the \MessageBreak%
\jobname.aux file, which was not possible\MessageBreak% ... on line xy.
}%
\fi%
\fi%
\if@twoside%
\checkoddpage%
\ifoddpage%
\if@filesw%
\addtocounter{addlinespage}{-1}%
\edef\al@beforeD{\arabic{addlinespage}}%
\addtocounter{addlinespage}{+1}%
\immediate\write\@auxout{\string\AddToHook{cmd/enlargepagebefore/after}{\string\enlargemaybe{#1}{\al@beforeD}}}%
% enlarges BOTH columns
\else%
\PackageWarning{addlines}{%
\string\enlargethispage\space only applied to right side.\MessageBreak%
Extra lines need to be added\MessageBreak%
to both sides of a doublepage spread,\MessageBreak%
but this generally requires writing to the \MessageBreak%
\jobname.aux file, which was not possible\MessageBreak% ... on line xy.
}%
\fi%
\else%
\afterpage{\afterpage{\addlines@here{#1}}}%
\afterpage{\afterpage{\if@twocolumn\afterpage{\addlines@here{#1}}\fi}}%
\fi%
\fi%
}
\newcommand\squeezepage[1][0]{%
\if@twocolumn%
\if@firstcolumn%
\enlargethispage{#1\baselineskip}%
\afterpage{\addlines@here[1]}% to also squeeze that page: \enlargethispage{#1\baselineskip}%
\else% second column
\if@addlines@checkpage@%
\if@filesw%
\edef\al@beforeD{\arabic{addlinespage}}%
\immediate\write\@auxout{\string\AddToHook{cmd/enlargepagebefore/after}{\string\enlargemaybe{#1}{\al@beforeD}}}%
% enlarges BOTH columns, without squeezing
\else%
\PackageWarning{addlines}{%
\string\enlargethispage\space only applied to second column.\MessageBreak%
Extra lines need to be added\MessageBreak%
to both columns of a two column layout,\MessageBreak%
but this generally requires writing to the \MessageBreak%
\jobname.aux file, which was not possible\MessageBreak% ... on line xy.
}%
\fi%
\fi%
\fi%
\if@addlines@checkpage@%
\if@twoside%
\checkoddpage%
\ifoddpage%
\if@filesw%
\addtocounter{addlinespage}{-1}%
\edef\al@beforeD{\arabic{addlinespage}}%
\addtocounter{addlinespage}{+1}%
\immediate\write\@auxout{\string\AddToHook{cmd/enlargepagebefore/after}{\string\enlargemaybe{#1}{\al@beforeD}}}%
% enlarges BOTH columns, without squeezing
\else%
\PackageWarning{addlines}{%
\string\enlargethispage\space only applied to right side.\MessageBreak%
Extra lines need to be added\MessageBreak%
to both sides of a doublepage spread,\MessageBreak%
but this generally requires writing to the \MessageBreak%
\jobname.aux file, which was not possible\MessageBreak% ... on line xy.
}%
\fi%
\else%
\afterpage{\afterpage{\addlines@here{#1}}}% without squeezing
\afterpage{\afterpage{\if@twocolumn\afterpage{\addlines@here{#1}}\fi}}% without squeezing
\fi%
\fi%
\else%
\enlargethispage*{#1\baselineskip}%
\if@addlines@checkpage@%
\if@twoside%
\checkoddpage%
\ifoddpage%
\if@filesw%
\addtocounter{addlinespage}{-1}%
\edef\al@beforeD{\arabic{addlinespage}}%
\addtocounter{addlinespage}{+1}%
\immediate\write\@auxout{\string\AddToHook{cmd/enlargepagebefore/after}{\string\enlargemaybe{#1}{\al@beforeD}}}%
% without squeezing
\else%
\PackageWarning{addlines}{%
\string\enlargethispage\space only applied to right side.\MessageBreak%
Extra lines need to be added\MessageBreak%
to both sides of a doublepage spread,\MessageBreak%
but this generally requires writing to the \MessageBreak%
\jobname.aux file, which was not possible\MessageBreak% ... on line xy.
}%
\fi%
\else%
\afterpage{\addlines@here{#1}}% without squeezing
\fi%
\fi%
\fi%
\fi%
}
"Conversely, on an odd page (i.e., a recto or right-side page) an error is produced, but the space is still added."
Well, nowadays that can be solved:
\NeedsTeXFormat{LaTeX2e}[2022-11-01] \ProvidesPackage{addlines}[2023-02-03 v0.4 Add/remove lines from a page (WR)]
\if@filesw \else \IfFileExists{\jobname.aux}{ \PackageWarningNoLine{addlines}{% It was not allowed to write to \jobname.aux.\MessageBreak% A lot of packages do not work\MessageBreak% without write access to files.\MessageBreak% \jobname.aux already exists\MessageBreak% from a preceding compilation run.\MessageBreak% If it would not be changed by this run\MessageBreak% everything is OK, otherwise enable write access.% } }{\PackageError{addlines}{% Writing to \jobname.aux forbidden.}{% \jobname.aux does not exist and\MessageBreak% could not be created,\MessageBreak% therefore it will not be possible\MessageBreak% to add a line to a left side/column\MessageBreak% when the \string\addlines\space command\MessageBreak% is given on the right side/column.\MessageBreak% } } \fi
\RequirePackage{afterpage}[2014/10/28]% v1.08 After-Page Package (DPC) \RequirePackage{changepage}[2009/10/20]% v1.0c check page and change page layout
\newif\if@addlines@checkpage@ \DeclareOption{final}{\@addlines@checkpage@true} \DeclareOption{draft}{\@addlines@checkpage@false} \ExecuteOptions{final} \ProcessOptions
\newcounter{addlinespage} \setcounter{addlinespage}{1}
\newcommand{\enlargepagebefore}{\addtocounter{addlinespage}{+1}}
\AddToHook{shipout/before}{\enlargepagebefore}
\newcommand{\enlargemaybe}[2]{% \edef\al@beforeA{\arabic{addlinespage}}% \edef\al@beforeB{#2}% \ifx\al@beforeA\al@beforeB\relax% \addlines@here{#1}% \if@twocolumn\afterpage{\addlines@here{#1}}\fi% \fi% }
\newcommand\addlines{\@ifstar\addlines@a\addlines@b}
\newcommand\addlines@a[1][1]{\addlines@here{#1}}
\newcommand\addlines@b[1][1]{\addlines@do{#1}}
\newcommand\addlines@here[1]{\enlargethispage{#1\baselineskip}}
\newcommand\addlines@do[1]{% \if@twocolumn\addlines@twocol{#1}% \else\addlines@onecol{#1}% \fi% }
\newcommand\addlines@onecol[1]{% \addlines@here{#1}% \if@twoside% \checkoddpage% \ifoddpage% \if@filesw% \addtocounter{addlinespage}{-1}% \edef\al@beforeD{\arabic{addlinespage}}% \addtocounter{addlinespage}{+1}% \immediate\write\@auxout{\string\AddToHook{cmd/enlargepagebefore/after}{\string\enlargemaybe{#1}{\al@beforeD}}}% \else% \PackageWarning{addlines}{% \string\enlargethispage\space only applied to right side.\MessageBreak% Extra lines need to be added\MessageBreak% to both sides of a doublepage spread,\MessageBreak% but this generally requires writing to the \MessageBreak% \jobname.aux file, which was not passible\MessageBreak% ... on line xy. }% \fi% \else% \afterpage{\addlines@here{#1}}% \fi% \fi% }
\newcommand\addlines@twocol[1]{% \if@firstcolumn% \addlines@here{#1}% \afterpage{\addlines@here[1]}% \else% second column \if@filesw% \edef\al@beforeD{\arabic{addlinespage}}% \immediate\write\@auxout{\string\AddToHook{cmd/enlargepagebefore/after}{\string\enlargemaybe{#1}{\al@beforeD}}}% % enlarges BOTH columns \else% \PackageWarning{addlines}{% \string\enlargethispage\space only applied to second column.\MessageBreak% Extra lines need to be added\MessageBreak% to both columns of a two column layout,\MessageBreak% but this generally requires writing to the \MessageBreak% \jobname.aux file, which was not possible\MessageBreak% ... on line xy. }% \fi% \fi% \if@twoside% \checkoddpage% \ifoddpage% \if@filesw% \addtocounter{addlinespage}{-1}% \edef\al@beforeD{\arabic{addlinespage}}% \addtocounter{addlinespage}{+1}% \immediate\write\@auxout{\string\AddToHook{cmd/enlargepagebefore/after}{\string\enlargemaybe{#1}{\al@beforeD}}}% % enlarges BOTH columns \else% \PackageWarning{addlines}{% \string\enlargethispage\space only applied to right side.\MessageBreak% Extra lines need to be added\MessageBreak% to both sides of a doublepage spread,\MessageBreak% but this generally requires writing to the \MessageBreak% \jobname.aux file, which was not possible\MessageBreak% ... on line xy. }% \fi% \else% \afterpage{\afterpage{\addlines@here{#1}}}% \afterpage{\afterpage{\if@twocolumn\afterpage{\addlines@here{#1}}\fi}}% \fi% \fi% }
\let\addline\addlines
\newcommand\removelines{\@ifstar\removelines@a\removelines@b}
\newcommand\removelines@a[1][1]{\addlines@here{\numexpr -1*(#1) \relax}}
\newcommand\removelines@b[1][1]{\addlines@do{\numexpr -1*(#1) \relax}}
\let\removeline\removelines
\newcommand\squeezepage[1][0]{% \if@twocolumn% \if@firstcolumn% \enlargethispage{#1\baselineskip}% \afterpage{\addlines@here[1]}% to also squeeze that page: \enlargethispage{#1\baselineskip}% \else% second column \if@addlines@checkpage@% \if@filesw% \edef\al@beforeD{\arabic{addlinespage}}% \immediate\write\@auxout{\string\AddToHook{cmd/enlargepagebefore/after}{\string\enlargemaybe{#1}{\al@beforeD}}}% % enlarges BOTH columns, without squeezing \else% \PackageWarning{addlines}{% \string\enlargethispage\space only applied to second column.\MessageBreak% Extra lines need to be added\MessageBreak% to both columns of a two column layout,\MessageBreak% but this generally requires writing to the \MessageBreak% \jobname.aux file, which was not possible\MessageBreak% ... on line xy. }% \fi% \fi% \fi% \if@addlines@checkpage@% \if@twoside% \checkoddpage% \ifoddpage% \if@filesw% \addtocounter{addlinespage}{-1}% \edef\al@beforeD{\arabic{addlinespage}}% \addtocounter{addlinespage}{+1}% \immediate\write\@auxout{\string\AddToHook{cmd/enlargepagebefore/after}{\string\enlargemaybe{#1}{\al@beforeD}}}% % enlarges BOTH columns, without squeezing \else% \PackageWarning{addlines}{% \string\enlargethispage\space only applied to right side.\MessageBreak% Extra lines need to be added\MessageBreak% to both sides of a doublepage spread,\MessageBreak% but this generally requires writing to the \MessageBreak% \jobname.aux file, which was not possible\MessageBreak% ... on line xy. }% \fi% \else% \afterpage{\afterpage{\addlines@here{#1}}}% without squeezing \afterpage{\afterpage{\if@twocolumn\afterpage{\addlines@here{#1}}\fi}}% without squeezing \fi% \fi% \else% \enlargethispage*{#1\baselineskip}% \if@addlines@checkpage@% \if@twoside% \checkoddpage% \ifoddpage% \if@filesw% \addtocounter{addlinespage}{-1}% \edef\al@beforeD{\arabic{addlinespage}}% \addtocounter{addlinespage}{+1}% \immediate\write\@auxout{\string\AddToHook{cmd/enlargepagebefore/after}{\string\enlargemaybe{#1}{\al@beforeD}}}% % without squeezing \else% \PackageWarning{addlines}{% \string\enlargethispage\space only applied to right side.\MessageBreak% Extra lines need to be added\MessageBreak% to both sides of a doublepage spread,\MessageBreak% but this generally requires writing to the \MessageBreak% \jobname.aux file, which was not possible\MessageBreak% ... on line xy. }% \fi% \else% \afterpage{\addlines@here{#1}}% without squeezing \fi% \fi% \fi% \fi% }
\strictpagechecktrue
\endinput%