Установка геометрии на каждой странице (правильный переплет) на нестандартных, смешанных страницах в двустороннем документе

Установка геометрии на каждой странице (правильный переплет) на нестандартных, смешанных страницах в двустороннем документе

У меня есть документ статьи с нестандартными номерами страниц, которые также меняются сторонами (переключение четности сторон: иногда четная сторона находится справа, иногда слева).
Цель: получить правильную пагинацию (переключение левой/правой геометрии) независимо от номера страницы ( \count0/ \thepage), вместо этого основываться на количестве страниц. Так, например, для документа, состоящего только из четных номеров страниц, пагинация все равно переключается.


Мне удалось получить доступ к фактическому количеству страниц разными способами:

  • zref-abspage:\theabspage
  • zref-abspage:\zref@extract{abspage}{abspage}
  • \thetotalpages.

Я попробовал установить \newgeometry{...}для каждой страницы, используя следующие подходы:

  • бохук:\AtBeginPage{...
  • \AddToHook{shipout}{...или shipout/beforeилиshipout/after
  • каждая страница:\AddEverypageHook{...
  • afterpage: \afterpage{...(для установки макета следующих страниц)
\ifthenelse{\isodd{\theabspage}}{
    \newgeometry{left=8cm,right=3cm,top=3cm,bottom=3cm}
}{
    \newgeometry{left=3cm,right=8cm,top=3cm,bottom=3cm}
}

Мои попытки закончились:

  • Сразу после загрузки bophookу меня появились ошибки типа «Неопределенная управляющая последовательность. \end{titlepage}»
  • \AddToHook{shipout...}& \afterpage=> формат не был применен
  • \AddEverypageHook=> Ошибка "Неправильная \prevdepth. \pagenumbering"

МВЭ:

\documentclass[twoside]{article}
\usepackage[pdfpagelayout=TwoPageRight]{hyperref}

\usepackage{fancyhdr,lipsum,geometry,ifthen}
\pagestyle{fancy}
\fancyfoot[C]{\thepage}



\newcommand\blankpage{ % source: https://tex.stackexchange.com/a/331068
    \clearpage
    \begingroup
    \null
    \thispagestyle{empty}
    \addtocounter{page}{-1}
    \hypersetup{pageanchor=false}
    \clearpage
    \endgroup
}

\usepackage{zref-abspage}
\makeatletter
\renewcommand{\cleardoublepage}{
    \clearpage
    \zref@refused{abspage}
    \ifthenelse{\isodd{\zref@extract{abspage}{abspage}}}{
        \blankpage
    }{
        \blankpage
        \blankpage
    }
}
\makeatother


% trying to make gutter compatible with custom page numbers:

\newgeometry{left=8cm,right=3cm,top=3cm,bottom=3cm}

%\usepackage{bophook}\AtBeginPage{
\AddToHook{shipout/after}{ % or shipout/before or shipout/after
%\usepackage{everypage} \AddEverypageHook{
%\usepackage{afterpage}\afterpage{6
    \ifthenelse{\thetotalpages>1}{% Avoid applying new geometry on the title page
            \ifthenelse{\isodd{\theabspage}}{
                    \newgeometry{left=8cm,right=3cm,top=3cm,bottom=3cm}
                }{
                    \newgeometry{left=3cm,right=8cm,top=3cm,bottom=3cm}
                }
        }{}
}

            
\begin{document}
    \begin{titlepage}
        my title page
    \end{titlepage}
    \pagenumbering{roman}
    \lipsum[1-8]
    \cleardoublepage
    
    \clearpage
    \pagenumbering{arabic}
    \addtocounter{page}{1}
    \lipsum[1-8]
    \cleardoublepage
    
    \pagenumbering{roman}
    \lipsum[1-10]
\end{document}

связанные вопросы:

Связанный контент