Página ímpar/par detectada incorretamente se não houver espaço suficiente na página atual

Página ímpar/par detectada incorretamente se não houver espaço suficiente na página atual

Eu gostaria de colocar:

  • algum texto no lado externo da página,
  • algum outro texto no lado interno da página.

Para isso, utilizo o teste ( \checkoddpage) \ifoddpagefornecido pelo changepagepacote. Isso funciona muito bem, exceto se não houver espaço suficiente na página atual onde o código está inserido, conforme apontado pelo MWE a seguir (os dois primeiros estão corretos, não os dois últimos).

\documentclass{book}
\usepackage[inner=10mm,outer=30mm]{geometry}
\usepackage[strict]{changepage}

\newcommand{\onouterside}{%
  \begin{minipage}[t]{0.3\linewidth}
    Some text supposed to be on the outer side.
  \end{minipage}
}
\newcommand{\oninnerside}{%
  \begin{minipage}[t]{0.75\linewidth}
    Some text supposed to be on the inner side.
  \end{minipage}
}
\newcommand{\test}{%
  \checkoddpage%
  \ifoddpage%
  \oninnerside
  \hspace*{11mm}%
  \onouterside
  \else%
  \hspace*{-20mm}%
  \onouterside
  \hspace*{11mm}%
  \oninnerside
  \fi%
}
\begin{document}
\test
\newpage
\test
\newpage
\rule{0.4pt}{.969\textheight}\par
\test
\newpage
\mbox{}
\newpage
\rule{0.4pt}{.969\textheight}\par
\test
\end{document}

Como eu poderia tornar o teste de página ímpar/par robusto? Devo pegar o espaço vertical dos textos e compará-lo com o espaço vertical deixado na página atual e, em caso afirmativo, como poderia saber este último?

Responder1

Cuidado ao fazer qualquer coisa na lista vertical principal :-)

Isso faz o teste no modo horizontal, onde as coisas são mais seguras.

\documentclass{book}
\usepackage[inner=10mm,outer=30mm]{geometry}
\usepackage[strict]{changepage}

\newcommand{\onouterside}{%
  \begin{minipage}[t]{0.3\linewidth}
    Some text supposed to be on the outer side.
  \end{minipage}
}
\newcommand{\oninnerside}{%
  \begin{minipage}[t]{0.75\linewidth}
    Some text supposed to be on the inner side.
  \end{minipage}
}
\newcommand{\test}{%
  \mbox{}\checkoddpage%
  \ifoddpage%
  \oninnerside
  \hspace*{11mm}%
  \onouterside
  \else%
  \hspace*{-20mm}%
  \onouterside
  \hspace*{11mm}%
  \oninnerside
  \fi%
}
\begin{document}
\test
\newpage
\test
\newpage
\rule{0.4pt}{.969\textheight}\par
\test
\newpage
\mbox{}
\newpage
\rule{0.4pt}{.969\textheight}\par
\test
\end{document}

informação relacionada