両面文書の非標準の混合ページ番号で、各ページにジオメトリ(正しいガター)を設定する

両面文書の非標準の混合ページ番号で、各ページにジオメトリ(正しいガター)を設定する

デフォルト以外のページ番号を持つ記事文書があり、そのページ番号も左右が切り替わります (左右の切り替えのパリティ: 偶数が右側になる場合もあれば、左側になる場合もあります)。
ゴール\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 が不適切です」

MWE:

\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}

関連する質問:

関連情報