wspr / will2e

Assorted (somewhat historic) LaTeX2e packages
1 stars 3 forks source link

addlines: recto/odd pages without error #11

Open Rimole opened 1 year ago

Rimole commented 1 year ago

"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%

maxbruening commented 5 months ago

Is this an improved working version of addlines?

Rimole commented 5 months ago

Is this an improved working version of addlines?

Yes.