按章节编号页码时如何检查奇数/偶数页?

按章节编号页码时如何检查奇数/偶数页?

正如所描述的这里我在用着chappg's \pagenumbering{bychapter}(通过auto选项隐式) 以 样式对页面进行编号\thechapter-\thepage。但现在 a\ifodd\thepage失败了,正如这个 MWE 所示:

\documentclass{scrbook}  % same for book, btw
\usepackage[auto]{chappg}

\newcommand*{\whereami}{%
    \ifodd\thepage%
        odd page
    \else
        even page
    \fi
}

\begin{document}
  \whereami\clearpage\whereami

  \chapter{new}
  \whereami\clearpage\whereami

  \chapter{again}
  \whereami\clearpage\whereami
\end{document}

虽然前两页(不在同一章节)分别正确输出了“奇数页”和“偶数页”,但第一个实际章节的两页却输出了“-1奇数页”和“-2奇数页”,而第二章则输出了两次“偶数页”。

因此,它似乎chappg覆盖\thepage成为例如1-2,并且\ifodd\thepage仅检查章节编号的奇数,在这种情况下-2成为输出的一部分then

我已经尝试通过使用修复此问题pageslts's\theCurrentPage而是,但不幸的是,这似乎也弄乱了\thepage(或\pagenumbering?),因为仅仅通过另外包含该包,我就会得到错误

! Argument of \extract@ has an extra }.
<inserted text>
                \par
l.18   \whereami\clearpage
                          \whereami

那么,我该如何解决这个烂摊子呢?

答案1

请使用 KOMA 的\ifthispageodd

\newcommand*{\whereami}{%
    \ifthispageodd{%
        odd page
    }{%
        even page
    }%
}

您不需要使用 KOMA 脚本类,您也可以只使用\usepackage{scrextend}

也可以看看这个问题

答案2

changepage包可能会有用。

\documentclass{scrbook}  % same for book, btw

\usepackage{changepage}

\newcommand\whereami{\checkoddpage\ifoddpage odd\else even\fi}

\begin{document}
  \whereami\clearpage\whereami

  \chapter{new}
  \whereami\clearpage\whereami

  \chapter{again}
  \whereami\clearpage\whereami
\end{document}

答案3

你可以使用zref它,参见Martin Scharrer 的回答

\documentclass{scrbook}  % same for book, btw
\usepackage[auto]{chappg}
\usepackage[user,abspage]{zref}

\newcounter{whereami}
\makeatletter
\newcommand*{\whereami}{%
  \refstepcounter{whereami}%
  \zlabel{\thewhereami @zref}%
    \ifodd\zref@extractdefault{\thewhereami @zref}{abspage}{0}\relax
        odd page
    \else
        even page
    \fi
}
\makeatother

\begin{document}
  \whereami\clearpage\whereami

  \chapter{new}
  \whereami\clearpage\whereami

  \chapter{again}
  \whereami\clearpage\whereami
\end{document}

当然这需要多次传递,但使用辅助文件是检查页码的唯一可靠方法。

答案4

我已经尝试使用 pageslts 来解决这个问题\theCurrentPage ,但不幸的是,这似乎也弄乱了\thepage(或 \pagenumbering?),因为仅仅通过另外包含该包,我就会得到错误

在之前添加\usepackage{pageslts}和并替换为之后,即\pagenumbering{arabic}\usepackage[auto]{chappg}\thepage\theCurrentPage

\documentclass{scrbook}  % same for book, btw
\usepackage{pageslts}% <- changed
\pagenumbering{arabic}% <- changed
\usepackage[auto]{chappg}


\newcommand*{\whereami}{%
    \ifodd\theCurrentPage% <- changed
        odd page
    \else
        even page
    \fi
}

\begin{document}
  \whereami\clearpage\whereami

  \chapter{new}
  \whereami\clearpage\whereami

  \chapter{again}
  \whereami\clearpage\whereami
\end{document}

我在编译您的 MWE(当前 TeXLive 2015)时没有遇到任何问题。您是否使用了其他加载顺序(或旧版本的 scrbook/pageslts/chappg)?

相关内容