Нечетная/четная страница определяется неправильно, если на текущей странице недостаточно места

Нечетная/четная страница определяется неправильно, если на текущей странице недостаточно места

Я хотел бы поставить:

  • какой-то текст на внешней стороне страницы,
  • какой-то другой текст на внутренней стороне страницы.

Для этого я использую тест ( \checkoddpage) \ifoddpage, предоставляемый пакетом changepage. Он работает довольно хорошо, за исключением случаев, когда оказывается, что на текущей странице, где вставляется код, недостаточно места, как указано в следующем MWE (первые два подходят, последние два нет).

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

Как сделать тест четных/нечетных страниц надежным? Должен ли я получить вертикальное пространство текстов и сравнить его с вертикальным пространством, оставшимся на текущей странице, и если да, как я могу узнать последнее?

решение1

Остерегайтесь делать что-либо в главном вертикальном списке:-)

Это позволяет провести тест в горизонтальном режиме, что более безопасно.

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

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