Another question discusses the issue
of getting \marginpar
commands to put their output in the correct
margin of two-sided documents. This is an example of the general
problem of knowing where a particular bit of text lies: the output
routine is asynchronous, and (La)TeX will usually process quite a
bit of the "next" page before deciding to output any page. As a
result, the page
counter (known internally in LaTeX as
\c@page
) is normally only reliable when you're actually in
the output routine.
The solution is to use some version of the \label
mechanism to
determine which side of the page you're on; the value of the page
counter that appears in a \pageref
command has been inserted in
the course of the output routine, and is therefore safe.
However, \pageref
itself isn't reliable: one might hope that
\ifthenelse{\isodd{\pageref{foo}}}{odd}{even}would do the necessary, but both the babel and hyperref packages have been known to interfere with the output of
\pageref
; be careful!
The chngpage package needs to provide this functionality for
its own use, and therefore provides a command \checkoddpage
; this
sets a private-use label, and the page reference part of that label is
then examined (in a hyperref-safe way) to set a conditional
\ifcpoddpage
true if the command was issued on an odd page. Of
course, the \label
contributes to LaTeX's "Rerun to get
cross-references right" error messages...