\thepage против поплавков

\thepage против поплавков

Я пишу отчет и хочу убедиться, что каждая новая глава начинается на нечетной странице. Поэтому я написал следующий сценарий, который я поместил перед каждой главой:

...    
%-- to make sure that a new chapter starts on the right side (odd page) %
\ifodd \thepage
{\newpage
\thispagestyle{empty}
\mbox{}
}
\else
{}
\fi
%-----------------------------------------------------------------------%
\chapter{Chap_name}
...

Работает это следующим образом:

Если страница перед моей новой главой нечетная, это значит, что мне придется добавить пустую страницу, чтобы начать новую главу со следующей нечетной страницы.

Работает нормально, если предыдущая страница — обычная страница.

Но когда у меня на странице перед ним есть рисунок, который был перемещен на новую страницу, так как он не поместился на странице, и на странице нет текста рядом с плавающим элементом, то этот скрипт не работает.

Команда \thepageвозвращает неправильный номер страницы (очевидно, он не увеличивается, если страница содержит только число с плавающей точкой) и поэтому не добавляет пустую страницу в случае, если последняя страница действительно была нечетной.

Я не знаю, как решить эту проблему. Есть идеи?

Спасибо за помощь.

решение1

Замечания:

  • \thepageможет быть чем угодно, римскими цифрами, сложными номерами страниц ( 1-2), … Однако, \ifoddожидает только арабское число. Лучше использовать значение счетчика \value{page}.

  • Процедура вывода называется асинхронной. Поэтому в момент \ifoddгде-то не ясно, какие страницы будут. Гораздо безопаснее место вверху страницы.

  • Многие классы документов предоставляют option twosideи command \cleardoublepage. Например, классы KOMA-Script предоставляют множество опций и команд. Также глава обычно начинается с \cleardoublepageif twosideis given.

Для стандартных классов \cleardoublepageможно переопределить, чтобы задать пустые верхние и нижние колонтитулы для пустых страниц:

\makeatletter
\renewcommand*{\cleardoublepage}{%
  \clearpage % output floats if necessary
  % new page starts here
  \if@twoside
    \ifodd\value{page}%
    \else
      \begingroup
        \pagestyle{empty}%
        \hbox{}\newpage
        \if@twocolumn
          \hbox{}\newpage
        \fi
      \endgroup
    \fi
  \fi
}
\makeatother

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