![Изменение стиля нумерации страниц происходит на одну страницу раньше, чем ожидалось?](https://rvso.com/image/286979/%D0%98%D0%B7%D0%BC%D0%B5%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5%20%D1%81%D1%82%D0%B8%D0%BB%D1%8F%20%D0%BD%D1%83%D0%BC%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%B8%20%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%20%D0%BF%D1%80%D0%BE%D0%B8%D1%81%D1%85%D0%BE%D0%B4%D0%B8%D1%82%20%D0%BD%D0%B0%20%D0%BE%D0%B4%D0%BD%D1%83%20%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D1%83%20%D1%80%D0%B0%D0%BD%D1%8C%D1%88%D0%B5%2C%20%D1%87%D0%B5%D0%BC%20%D0%BE%D0%B6%D0%B8%D0%B4%D0%B0%D0%BB%D0%BE%D1%81%D1%8C%3F.png)
Я хочу, чтобы в моем отчете первые несколько разделов имели римскую нумерацию (i, ii, iii...), а основная часть отчета — арабскую нумерацию (1, 2, 3...) для номеров страниц.
Проблема в том, что переключение, по-видимому, происходит на страницу раньше, чем я ожидал из моего кода:
\documentclass{report}
\begin{document}
% === Abstract etc ===
\pagenumbering{roman}
\section*{first section}
Want this to be page i
\pagebreak
\section*{second section}
Want this to be page ii, but it appears as 1 instead
\pagebreak
% === Body of report ===
\pagenumbering{arabic} %change to arabic for final page
\section*{third section}
Want this to be page 1, but it appears as 2 instead
\section*{fourth section}
\end{document}
Я вижу, что если я поместлю \pagenumbering{arabic}
команду в строку под третьим разделом, то это решит проблему, но это неудобно, потому что если у меня есть модульный документ и я закомментирую раздел, то мне придется постоянно менять положение \pagenumbering{arabic}
.
Более того, если я поставлю разрыв строки перед % === Body of report ===
этим, это исправит проблему в моем MWE (но не в самом отчете по какой-то причине). Очень сбит с толку таким поведением.
Это ошибка? И есть ли решение?
решение1
Команда \pagebreak
работает по-разному, если она задана внутри абзаца или между абзацами (то есть с пустой строкой перед ней).
В вашем случае второе \pagebreak
относится к абзацу, содержащему текст
Want this to be page ii, but it appears as 1 instead
и он вступит в силу только после того, как абзац будет разбит на строки, что происходит, когда LaTeX сканирует \section*{third section}
и уже изменил нумерацию страниц на arabic
.
Не бойтесь оставлять пустые строки, но используйте \clearpage
в таких ситуациях; такая команда завершает текущий абзац, если перед ней не стоит пустая строка, поэтому она решает проблему.
\documentclass{report}
\begin{document}
% === Abstract etc ===
\pagenumbering{roman}
\section*{first section}
This is page i
\clearpage
\section*{second section}
This is page ii
\clearpage
% === Body of report ===
\pagenumbering{arabic} %change to arabic for final page
\section*{third section}
This is page 1
\section*{fourth section}
\end{document}
\pagebreak
Между и есть еще одно различие \clearpage
: если \flushbottom
он активен (а он есть в book
классе), \pagebreak
то попытается заполнить страницу доступным текстом, в то время как \clearpage
заполнит ее пустым пространством.
So \pagebreak
лучше всего использовать для точной настройки разрывов страниц, в то время как \clearpage
или \cleardoublepage
следует использовать при запросе «конец страницы здесь».