正如所描述的这里我在用着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)?