El contador se incrementa dentro de \si, incluso no se cumple la condición

El contador se incrementa dentro de \si, incluso no se cumple la condición

He definido tres contadores que voy a incrementar dentro de una condición. Esto debería conducir al resultado de que los requisitos funcionales tienen el prefijo FA (y un número posterior) y los requisitos no funcionales tienen el prefijo NFA (y una secuencia numérica diferente independiente de los requisitos funcionales). Esto también debería aplicarse a la historia de usuario general.

Con el código siguiente parece que el contador avanzará independientemente de si se cumple la condición o no. Lamentablemente, no estoy muy seguro de si habría una solución mejor o si me estoy equivocando en algo. ¡Cualquier comentario será muy apreciado!

\documentclass[11pt,a4paper]{article}
\usepackage[utf8]{inputenc}
\usepackage[scaled]{helvet}
\usepackage[T1]{fontenc}
\usepackage[left=4cm, right=2cm, top=4cm, bottom=2cm]{geometry}
\usepackage[style=long,nonumberlist,toc,acronym]{glossaries}


\newacronym{U}{U}{User Story(s)}
\newacronym{FA}{FA}{Funktionale Anforderung}
\newacronym{NFA}{NFA}{Nicht funktionale Anforderung}

\newcounter{UserStoryCounter}
\setcounter{UserStoryCounter}{1}

\newcounter{UserStoryCounterFA}
\setcounter{UserStoryCounterFA}{1}

\newcounter{UserStoryCounterNFA}
\setcounter{UserStoryCounterNFA}{1}

\newcommand{\userstory}[3]{
    \if\equal{#1}{\string FA}
        \paragraph{(#1\gls{FA}\arabic{UserStoryCounterFA}) #2}#3
        \stepcounter{UserStoryCounterFA}
    \else
        \if\equal{#1}{NFA}
            \paragraph{(#1\gls{NFA}\arabic{UserStoryCounterNFA}) #2}#3
            \stepcounter{UserStoryCounterNFA}
        \else
            \paragraph{(#1\gls{U}\arabic{UserStoryCounter}) #2}#3
            \stepcounter{UserStoryCounter}
        \fi
    \fi
}
\begin{document}

\userstory{FA}{}{}
\userstory{NFA}{}{}
\userstory{U}{}{}

\end{document}

Respuesta1

El ejemplo produce el error.

! Undefined control sequence.
\userstory #1#2#3-> \if \equal 

como \equalno está definido. Si \equalse definiera \if\equal{que se expandiría \equaly luego probaría si las dos primeras fichas de su expansión eran el mismo personaje, o si su expansión era solo una ficha, probaría si eso es{

podrías reemplazar

\if\equal{#1}{\string FA}

por, por ejemplo,

\def\tmpa{#1}\def\tmpb{FA}\ifx\tmpa\tmpb

Respuesta2

No existe \equalen TeX, a menos que lo definas. Aquí tienes un método mucho más sencillo para definir tu comando.

\documentclass[11pt,a4paper]{article}
%\usepackage[utf8]{inputenc} % no longer needed
\usepackage[scaled]{helvet}
\usepackage[T1]{fontenc}
\usepackage[left=4cm, right=2cm, top=4cm, bottom=2cm]{geometry}
\usepackage[style=long,nonumberlist,toc,acronym]{glossaries}


\newacronym{U}{U}{User Story(s)}
\newacronym{FA}{FA}{Funktionale Anforderung}
\newacronym{NFA}{NFA}{Nicht funktionale Anforderung}

\newcounter{UserStoryCounter}
\setcounter{UserStoryCounter}{1}

\newcounter{UserStoryCounterFA}
\setcounter{UserStoryCounterFA}{1}

\newcounter{UserStoryCounterNFA}
\setcounter{UserStoryCounterNFA}{1}

\ExplSyntaxOn

\NewDocumentCommand{\userstory}{mmm}
 {
  \str_case:nnF {#1}
   {
    {FA}{
     \paragraph{(#1\gls{FA}\arabic{UserStoryCounterFA})~#2}#3
     \stepcounter{UserStoryCounterFA}
    }
    {NFA}{
      \paragraph{(#1\gls{NFA}\arabic{UserStoryCounterNFA})~#2}#3
      \stepcounter{UserStoryCounterNFA}
    }
    %add other cases here
   }
   {% all other cases
    \paragraph{(#1\gls{U}\arabic{UserStoryCounter})~#2}#3
    \stepcounter{UserStoryCounter}
   }
 }
\ExplSyntaxOff

\begin{document}

\userstory{FA}{}{}

\userstory{NFA}{}{}

\userstory{U}{}{}

\end{document}

Esto puede extenderse fácilmente a más de dos casos, en el mismo sentido.

ingrese la descripción de la imagen aquí

información relacionada