如何检查乳胶是否在当前页面上开始新的章节?

时间:2015-04-18 16:22:27

标签: latex conditional tex

我正在使用everypage包。使用\ AddEverypageHook命令,我可以在文档的每个页面的开头重复操作。现在我想做这样的事情:

\AddEverypageHook{
  \if "New chapter starts at current page." - "Do stuff." 
  \else "Do other stuff."
  \fi
}

我如何检查乳胶,是否在当前页面开始新章节?

2 个答案:

答案 0 :(得分:4)

在典型文档中,\chapter命令的问题之后是自动分页符。例如,请参阅report.cls中的\chapter

\newcommand\chapter{\if@openright\cleardoublepage\else\clearpage\fi
                    \thispagestyle{plain}%
                    \global\@topnum\z@
                    \@afterindentfalse
                    \secdef\@chapter\@schapter}

它发出\clearpage(或\cleardoublepage),刷新待处理的内容并在新页面上开始。

因此,根据您的设置,在当前页面之后使用afterpage package\afterpage{<stuff>}宏来执行<stuff> 就足够了。例如,在你的序言中,你会

\let\oldchapter\chapter % Store \chapter
\renewcommand{\chapter}{% Redefine \chapter to...
  \afterpage{\customcommand}% ...execute \customcommand after this page
  \oldchapter}

当然,只有在非章节页面上不执行任何其他操作时才会有意义,因为条件与\chapter相关联。因此,在每个页面上做出文档范围的决策可能需要稍微不同的方法。

我仍然建议使用\chapter宏,但使用条件。这是一个例子(点击放大图片):

enter image description here

\documentclass{report}
\usepackage{lipsum,afterpage,everypage}

\newcounter{chapterpage}% For this example, a chapterpage counter
\newcounter{regularpage}% For this example, a regularpage counter
\newif\ifchapterpage% Conditional used for a \chapter page
% Just for this example, print page number using:
\renewcommand{\thepage}{\LARGE\thechapterpage--\theregularpage}

\AddEverypageHook{
  \ifchapterpage % If on a \chapter page...
    \stepcounter{chapterpage}% Increase chapterpage counter
    \global\chapterpagefalse% Remove conditional
  \else % ...otherwise
    \stepcounter{regularpage}% Increase regularpage counter
  \fi
}
\let\oldchapter\chapter % Store \chapter
\renewcommand{\chapter}{% Redefine \chapter to...
  \afterpage{\global\chapterpagetrue}% ... set \ifchapterpage to TRUE _after_ this page
  \oldchapter}

\begin{document}

\chapter{First chapter}\lipsum[1-50]
\chapter{Second chapter}\lipsum[1-50]
\chapter*{Third chapter}\lipsum[1-50]
\chapter{Final chapter}\lipsum[1-50]

\end{document}

上述方法的优点是它适用于\chapter\chapter*\chapter*不会增加chapter计数器,因此不足以依赖基于此类比较的条件。

答案 1 :(得分:0)

我有一个解决方案。我们的想法是检查chapronumber计数器是否已经改变。这是通过自定义计数器完成的:

\newcounter{CurrentChapNum}
  • 如果章节计数器没有改变,我们仍然在当前章节,所以做\ customcommand1 stuff。
  • 如果计数器已经改变,我们似乎是在新章节的开头,那么请执行\ customcommand2 stuff并将CurrentChapNum-counter重置为当前章节的值。

这是由此代码完成的。

\AddEverypageHook{ 
   \ifnum\value{chapter}=\value{CurrentChapNum} \customcommand1 
   \else \customcommand2 \setcounter{CurrentChapNum}{\value{chapter}} 
   \fi  
}

因为我对乳胶标记的东西很陌生,所以我希望这不是太笨拙。