Skip to content

addlines: recto/odd pages without error #11

@Rimole

Description

@Rimole

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions