Ein bereits verwendetes Etikett erneuern

Ein bereits verwendetes Etikett erneuern

Basierend auf meiner FrageHiermein Setup sieht derzeit so aus:

\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}

Mein Problem besteht jetzt darin, dass ich im Grunde das beim ersten Mal definierte Label wiederverwende. Gibt es eine Möglichkeit, die Label-Prüfung in der Umgebung Bso einzustellen, dass das Label geprüft wird, das von der aktuellen Umgebung erstellt wurde A, und nicht irgendwelche zuvor erstellten Labels?

Antwort1

Hier ist eine Variante mit Heiko Oberdieks Refcount-Paket:

\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}

Hier ist eine Variante, die Heiko Oberdieks zref-Paket mit dem Abspage-Modul verwendet – für den Fall, dass nicht alle Seiten im arabischen Stil nummeriert sind:

\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}

verwandte Informationen