有没有办法确定目录中当前页面是奇数还是偶数?

有没有办法确定目录中当前页面是奇数还是偶数?

在目录中的某个位置,如果当前页是奇数,则必须设置分页符,但如果是偶数,则不必设置分页符。我已经在文档中使用了一个命令,它运行良好。

\makeatletter
\newcommand{\setCurPage}{
  \ifodd\c@page
    \renewcommand{\curPage}{\right}
  \else
    \renewcommand{\curPage}{\left}
  \fi
}
\makeatother

我这样使用它:

\setCurPage\ifnum\curPage=\right\clearpage\fi

但是如果我将此代码添加到我的 toc 文件中, \curPage 的值取决于目录开始的页面,而不是实际页面。如果我知道它是目录的第一页、第二页、第三页还是其他页,那么它对我来说也行。

答案1

当将宏添加到目录时,您需要保护它,否则它会展开并使用页码的当前值(或产生各种错误)。

您可以通过查看来了解发生了什么事情\jobname.toc

尝试一下这个,它用于\NewDocumentCommand定义一个受保护的宏,可以安全地包含在目录中。

我还用它\usepackage[strict]{changepage}来检查页码,因为在某些情况下检查页码计数器可能不可靠。(虽然我承认我不知道这是否是其中之一。它似乎在没有strict返回到仅检查的选项的情况下工作\c@page。)使用的缺点strict是需要额外运行 LaTeX。

\documentclass{article}

\usepackage[strict]{changepage}

\NewDocumentCommand{\clearpageifodd}{}{%
  \checkoddpage
  \ifoddpage
    \clearpage
  \fi}

\begin{document}

\tableofcontents

\section{First section}

\addtocontents{toc}{\clearpageifodd}

\section{Second section}

\addtocontents{toc}{\clearpageifodd}

\section{Third section}

\section{Fourth section}

\end{document}

当你查看时,\jobname.toc你会发现:

\contentsline {section}{\numberline {1}First section}{2}{}%
\clearpageifodd 
\contentsline {section}{\numberline {2}Second section}{2}{}%
\clearpageifodd 
\contentsline {section}{\numberline {3}Third section}{2}{}%
\contentsline {section}{\numberline {4}Fourth section}{2}{}%

之后会出现分页符第一部分,但之后第二部分

相关内容