Renovar una etiqueta ya usada

Renovar una etiqueta ya usada

Basado en mi preguntaaquími configuración actualmente se ve así:

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

Mi problema ahora es que básicamente estoy reutilizando la etiqueta definida la primera vez. ¿Hay alguna manera de configurar el entorno de verificación de etiquetas Bpara verificar la etiqueta creada por el entorno actual Ay no las etiquetas creadas anteriormente?

Respuesta1

Aquí hay una variante que utiliza el paquete Refcount de Heiko Oberdiek:

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

Aquí hay una variante que utiliza el paquete zref de Heiko Oberdiek con el módulo abspage, en caso de que no todas las páginas estén numeradas en estilo árabe:

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

información relacionada