すでに使用したラベルを更新する

すでに使用したラベルを更新する

私の質問に基づいてここ私の設定は現在次のようになっています:

\newenvironment{A}{\label{env:A}}{}
\newenvironment{B}{
%%Pseudocode
\if\thepage!=\pageofref{env:A}
Pagebreak happened!
\fi
%% End Pseudocode
}{}

\begin{A}
Text
\begin{B}
SubText
\end{B}
\end{A}
\begin{A}
Text2
\begin{B}
SubText2
\end{B}
\end{A}

私の現在の問題は、基本的に最初に定義されたラベルを再利用していることです。環境のラベルチェックを設定して、B現在の環境で作成されたラベルをチェックしA、以前に作成されたラベルをチェックしないようにする方法はありますか?

答え1

以下は Heiko Oberdiek の refcount パッケージを使用したバリエーションです。

\documentclass{article}
\usepackage{refcount}

\newcounter{envAcounter}
\newcounter{envBcounter}

\newenvironment{A}{%
  \stepcounter{envAcounter}%
  \null\label{env:A:start:\arabic{envAcounter}}%
}{\label{env:A:end:\arabic{envAcounter}}}%

\newenvironment{B}{%
  \stepcounter{envBcounter}%
  \null\label{env:B:start:\arabic{envBcounter}}%
  \ifnum\getpagerefnumber{env:A:start:\arabic{envAcounter}}=%
        \getpagerefnumber{env:B:start:\arabic{envBcounter}}\relax%
    Pagebreak did not take place before starting environment B!% 
  \else
    Pagebreak took place before starting environment B!%
  \fi
}{\label{env:B:end:\arabic{envBcounter}}}%

\begin{document}

\begin{A}
Text
\begin{B}
SubText
\end{B}
\end{A}
\begin{A}
Text2
\newpage
\begin{B}
SubText2
\end{B}
\end{A}

\end{document}

すべてのページがアラビア語形式で番号付けされていない場合に備えて、Heiko Oberdiek の zref パッケージと abspage-module を使用したバリエーションを次に示します。

\documentclass{article}
\usepackage[user,abspage]{zref}

\newcounter{envAcounter}
\newcounter{envBcounter}

\newenvironment{A}{%
  \stepcounter{envAcounter}%
  \null\zlabel{env:A:start:\arabic{envAcounter}}%
}{\zlabel{env:A:end:\arabic{envAcounter}}}%

\begingroup
\makeatletter
\@firstofone{%
  \endgroup
  \newenvironment{B}{%
    \stepcounter{envBcounter}%
    \null\zlabel{env:B:start:\arabic{envBcounter}}%
    \ifnum\zref@extract{env:A:start:\arabic{envAcounter}}{abspage}=%
          \zref@extract{env:B:start:\arabic{envBcounter}}{abspage}\relax%
      Pagebreak did not take place before starting environment B!%
    \else
      Pagebreak took place before starting environment B!%
    \fi
  }{\zlabel{env:B:end:\arabic{envBcounter}}}%
}%

\begin{document}

\begin{A}
Text
\begin{B}
SubText
\end{B}
\end{A}
\begin{A}
Text2
\newpage
\begin{B}
SubText2
\end{B}
\end{A}

\end{document}

関連情報