\thepage とフロート

\thepage とフロート

私はレポートを書いていますが、新しい章が必ず奇数ページから始まるようにしたいです。そこで、各章の前に置く次のスクリプトを書きました。

...    
%-- to make sure that a new chapter starts on the right side (odd page) %
\ifodd \thepage
{\newpage
\thispagestyle{empty}
\mbox{}
}
\else
{}
\fi
%-----------------------------------------------------------------------%
\chapter{Chap_name}
...

動作は次のように行われます。

新しい章の前のページが奇数ページの場合、次の奇数ページ番号から新しい章を開始するために空白ページを追加する必要があることを意味します。

前のページが通常のページであれば正常に動作します。

しかし、その前のページに図があり、その図がページに収まらなかったために新しいページに移動され、フロートの横にテキストがページ内にない場合、このスクリプトは機能しません。

このコマンドは\thepage間違ったページ番号を返します (ページに float のみが含まれている場合は増加しないようです)。そのため、最後のページが実際に奇数であった場合に空白ページが追加されません。

この問題を解決する方法がわかりません。何かアイデアはありますか?

助けてくれてありがとう。

答え1

備考:

  • \thepageローマ数字、複雑なページ番号 ( ) など、何でも構いません1-2。ただし、\ifoddアラビア数字のみを想定しています。カウンター値 を使用する方が適切です\value{page}

  • 出力ルーチンは非同期と呼ばれます。そのため、ある時点では\ifodd、どのページになるかは不明です。ページの先頭に配置する方がはるかに安全です。

  • 多くのドキュメント クラスは、オプションtwosideとコマンドを提供します\cleardoublepage。たとえば、KOMA-Script クラスは多くのオプションとコマンドを提供します。また、章は通常、\cleardoublepageifで始まりますtwoside

標準クラスの場合、\cleardoublepage空のページに空のヘッダーとフッターを設定するように再定義できます。

\makeatletter
\renewcommand*{\cleardoublepage}{%
  \clearpage % output floats if necessary
  % new page starts here
  \if@twoside
    \ifodd\value{page}%
    \else
      \begingroup
        \pagestyle{empty}%
        \hbox{}\newpage
        \if@twocolumn
          \hbox{}\newpage
        \fi
      \endgroup
    \fi
  \fi
}
\makeatother

関連情報