La variable condicional (contadores) definida en un comando llamado desde una figura se comporta como se definió automáticamente antes

La variable condicional (contadores) definida en un comando llamado desde una figura se comporta como se definió automáticamente antes

Recientemente intenté generalizar un comando que funciona con marcas de notas al pie y texto de notas al pie. Para eso trabajo con una llamada condicional que define un contador, que sirve como prueba de llamadas anteriores.

Me encontré con algún problema con la estructura de la prueba, pero se resolvió en otra pregunta en StackExchange. Pero ahora me encuentro con un problema más extraño. La prueba condicional parece ejecutarse de manera diferente si los comandos se llaman desde el título de una figura o desde un texto. Y no veo por qué.

Lo que es más extraño, se comporta de manera diferente si se llama desde una figura clásica o desde una figura usando ffimgbox.

Aquí el código de prueba para ilustrar el problema: (uso tux.png para la prueba:https://upload.wikimedia.org/wikipedia/commons/a/af/Tux.png)

%%%%%%%%%%% LOT OF PACKAGES AND DEFINITIONS %%%%%%%%%%

\documentclass[a4paper,12pt,oneside,final, DIV=12, listof=totoc, bibliography=totoc, toc=bibliography, open=right, chapterprefix=true]{scrbook}

\usepackage[greek,english,french]{babel}
\usepackage{lmodern}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[final]{hyperref}
\usepackage{footnotehyper}
\usepackage{footnotebackref}
\usepackage{tablefootnote}
\usepackage{graphicx}
\graphicspath{ {images/} }
\usepackage[format=plain, font=small, labelfont=bf, textfont=it]{caption}
\usepackage{floatrow}
\usepackage{perpage}
\MakePerPage{footnote}
\usepackage[float=false]{scrhack}

%%%%%%%%%%% LOT OF PACKAGES AND DEFINITIONS END %%%%%%%%%%

%%%%%%%%%%% BEGENNING OF THE WORK ON FOOTNOTES %%%%%%%%%%

%%% Counter for making unique ID for the footnotemark and footnotetext without [] %%%%%%
\newcounter{myHyperFootnoteCounterMARK}
%%%%% Counter for testing in which branch of testing we go  %%%%%%
\newcounter{lalala}
%
\makeatletter

%%%%% define an new footnote with optional argument : the IF never reach the undefined case, the counter "lala" is never incrememented and "BA" is only shown in the text : i have tested diverses formulation \@ifundefined \ifcsname etc etc... %%%%%
\newcommand{\myOptHyperFootnotetext}[2][plop]{
    \def\myFootnoteTagtextARGU{hfoi:#1}
    \def\mysavee{saved@Href@#1}
    %
    \ifcsname c@counter@Href:#1\endcsname
    % CASE DEFINED
        AA\thelalala
        %
        \expandafter\let\expandafter\Hy@footnote@currentHref\csname\mysavee\endcsname%
        \footnotetext{\hyperref[\myFootnoteTagtextARGU]{$\uparrow$}~#2}%
        %   
    \else 
    % CASE UNDEFINED
        AB\stepcounter{lalala}
        %
        \expandafter\let\expandafter\Hy@footnote@currentHref\csname\mysavee\endcsname
        \footnotetext{\hyperref[\myFootnoteTagtextARGU]{$\uparrow$}~#2}
        %definition of the counter if it is undifined
        \newcounter{counter@Href:#1}
        %   
    \fi
}

\newcommand{\myOptHyperFootnotemark}[1][plop]{%
    \def\myFootnoteTagtextargu{hfoi:#1}%
    \def\mysave{saved@Href:#1}%
    %
    \ifcsname c@counter@Href:#1\endcsname
        % CASE DEFINED
        BA\thelalala
        %
        \label{\myFootnoteTagtextargu}
        \footnotemark \global\expandafter\let\csname\mysave\endcsname\Hy@footnote@currentHref%
    \else   
    % CASE UNDEFINED
        BB\stepcounter{lalala}
        \label{\myFootnoteTagtextargu}
        \footnotemark \global\expandafter\let\csname\mysave\endcsname\Hy@footnote@currentHref%  
        %definition of the counter if it is undifined
        \newcounter{counter@Href:#1}
        %
    \fi
}
%
\makeatother



%%%%%%% some package %%%%%%%
\KOMAoptions{DIV=last}

%%%%%% begin %%%%%%%
\begin{document}
%%%%%% TEST %%%%%%

\chapter{TEST}
\section{Introduction}

Texttest

%%%%%%%% uncomment this to test the code when it works outisde the figure %%%%%%%%
%\myOptHyperFootnotemark[truc] 

%%%%%%%% Uncomment to test the code in a classic figure %%%%%%%%
%\begin{figure}[h]
%\centering
%\includegraphics{Tux.png}
%\caption{A caption \myOptHyperFootnotemark[truc]}
%\label{Tux}
%\end{figure}

%%%%%%%% The code calling from the caption inside a floatrow %%%%%%%%
\begin{figure}[ht]
   \centering
   {
     \begin{floatrow}[1]
        \ffigbox[\FBwidth]{\caption[blaa]{\label{Tino} BLAAAAA \myOptHyperFootnotemark[truc]}}%
{\includegraphics{Tux.png}}.
     \end{floatrow}
   }
\end{figure}

EEEEEEEEEEEEEEEEE
EEEEEEEEEEEEEEEEE

\myOptHyperFootnotetext[truc]{A footnote}% 

\end{document}

En teoría, la llamada de myOptHyperFootnotemark antes de myOptHyperFootnotetext debería conducir a la creación del contador "counter@Href:truc" y al incremento del contador "lala" que sirve aquí como prueba para la llamada de estas funciones. 0 para lala = nunca llamó a la creación del contador y otro número -> se llamó a la creación.

Y funciona en la parte sin comentar del código llamado desde un texto. Obtenemos "BB" en el texto (que significa: "Estoy en el bloque de asignación de la función") y "AA1" en la nota al pie (que significa: el contador con ese nombre ya ha sido asignado, por lo que estoy en el bloque no asignado). Este es el resultado deseado y es lógico, esto también demuestra que las pruebas funcionan.

Pero si haces lo mismo en una figura, el resultado no es el mismo (parte del código comentada para descomentar para probar). En una figura clásica obtenemos "BA1" en el texto y "AA1" en la nota al pie. Lo cual significa ambas cosas: en otro momento se llamó al código para crear la variable, pero no está aquí (¿pero dónde?...).

El resultado es aún más extraño si lo llamaste en un entorno floatrow (que es mi objetivo), ya que muestra BA0 y AA0 que significan "Nunca llamamos a la función de asignación pero de todos modos pasamos la prueba de la existencia del contador..."

Esta última variante se me hace muy rara y no entiendo muy bien cómo puede ser posible…

Acepto cualquier ayuda ;)

Respuesta1

La respuesta completa a esta pregunta la dio @frougon en esta pregunta: ¿Cómo hacer un etiquetado condicional robusto que resista múltiples compilaciones y figuras?

Es un poco técnico pero funciona (en el mostrador, en la etiqueta o lo que sea).

Por favor, informe a esta página para tener la respuesta completa;)

información relacionada