zref-perpage は定理のような環境では動作しません

zref-perpage は定理のような環境では動作しません

このパッケージを使用して、定理のような環境と方程式をページごとに番号付けしようとしていますzref-perpage。残念ながら、うまく機能しません。この最初の例では、2 番目のものがthm2 ページ目に表示されますが、そのカウンターは 2.1 ではなく 1.2 です。方程式の番号は正常に表示されます。

\documentclass{amsart}
\usepackage[textheight=1in]{geometry} 
\usepackage{zref-perpage}

\newtheorem{thm}{Theorem}
\zmakeperpage{thm}

\renewcommand{\thethm}{\thezpage.\arabic{thm}}
\zmakeperpage{equation}
\renewcommand{\theequation}{\thezpage.\arabic{equation}}

\begin{document}

\begin{thm}
  We have
  \begin{equation}
    \int_1^e\frac1x = 1
  \end{equation}
\end{thm}

\begin{thm}
  We have
  \begin{equation}
    \int_1^e\frac1x = 1
  \end{equation}

  \begin{equation}
  \int_1^e\frac1x = 1
  \end{equation}
\end{thm}

\end{document}

textheight2 番目の例では、 を1 インチから 1.5 インチに増やすという変更のみを行っています。これにより、2 番目の式thmは最初のページで始まりますが、2 番目のページで終了します。ご覧のとおり、今回は方程式のカウンターがおかしくなります。2 番目の方程式は 2 ページ目にありますが、ラベルは 1.3 になり、あたかも 1 ページ目にあるかのように表示されます。

\documentclass{amsart}
\usepackage[textheight=1.5in]{geometry} 
\usepackage{zref-perpage}

\newtheorem{thm}{Theorem}
\zmakeperpage{thm}

\renewcommand{\thethm}{\thezpage.\arabic{thm}}
\zmakeperpage{equation}
\renewcommand{\theequation}{\thezpage.\arabic{equation}}

\begin{document}

\begin{thm}
  We have
  \begin{equation}
    \int_1^e\frac1x = 1
  \end{equation}
\end{thm}

\begin{thm}
  We have
  \begin{equation}
    \int_1^e\frac1x = 1
  \end{equation}

  \begin{equation}
  \int_1^e\frac1x = 1
  \end{equation}
\end{thm}

\end{document}

@christian の提案により、次の例では と のみを使用しています。articleの場合textheight=.9in、2 番目thmは 2 ページ目にありますが、thmカウンターには 2.1 ではなく 1.2 が表示されます。

\documentclass[letterpaper]{article}
%\usepackage{mdframed}
\usepackage[textheight=.9in]{geometry} 
\usepackage{zref-perpage}

\newtheorem{thm}{Theorem}
\zmakeperpage{thm}

\renewcommand{\thethm}{\thezpage.\arabic{thm}}
\zmakeperpage{equation}
\renewcommand{\theequation}{\thezpage.\arabic{equation}}

\begin{document}

\begin{thm}
  We have
  \begin{equation}
    \int_1^e\frac1x = 1
  \end{equation}
\end{thm}

\begin{thm}
  We have
  \begin{equation}
    \int_1^e\frac1x = 1
  \end{equation}

  \begin{equation}
  \int_1^e\frac1x = 1
  \end{equation}
\end{thm}

\end{document}

この例では、perpageパッケージも機能しないことがわかります。

\documentclass[letterpaper]{article}

\usepackage[textheight=.9in]{geometry} 
\usepackage{perpage}

\newtheorem{thm}{Theorem}
\let\origthethm\thethm
\MakePerPage{thm}
\renewcommand{\thethm}{\theperpage.\origthethm}

\let\origtheequation\theequation
\MakePerPage{equation}
\renewcommand{\theequation}{\theperpage.\origtheequation}

\begin{document}

\begin{thm}
  We have
  \begin{equation}
    \int_1^e\frac1x = 1
  \end{equation}
\end{thm}

\begin{thm}
  We have
  \begin{equation}
    \int_1^e\frac1x = 1
  \end{equation}

  \begin{equation}
  \int_1^e\frac1x = 1
  \end{equation}
\end{thm}

\end{document}

答え1

equationパッケージによって再定義された環境はamsmath、方程式カウンタを増分する。前に数式が開始されます。したがって、カウンター設定と表示される数式の間にページ区切りがあることがあります。前者は、ページ番号を取得するためにラベルが設定されている場所です。

回避策:

  • minipage改ページを防ぐために を囲みます:

    \noindent
    \begin{minipage}{\linewidth}
      \begin{equation}...\end{equation}
    \end{minipage}
    
  • を呼び出すを後の位置に\equation移動するための の再定義:\incr@eqnum\refstepcounter{equation}

    \makeatletter
    \renewcommand*{\equation}{% amsmath version
      \nobreak
      \mathdisplay@push
      \st@rredfalse
      \global\@eqnswtrue
      \mathdisplay{equation}%
      \incr@eqnum
    } 
    \makeatother
    

関連情報