O contador é incrementado dentro de \if, mesmo que a condição não seja atendida

O contador é incrementado dentro de \if, mesmo que a condição não seja atendida

Eu defini três contadores que irei incrementar dentro de uma condição. Isto deve levar ao resultado de que os requisitos funcionais são prefixados com FA (e um número subsequente) e os requisitos não funcionais são prefixados com NFA (e uma sequência numérica diferente independente dos requisitos funcionais). Isso também deve se aplicar à história geral do usuário.

Com o código abaixo, parece que o contador irá avançar independentemente de a condição ser atendida ou não. Infelizmente não tenho certeza se haveria uma solução melhor ou se estou enganando alguma coisa. Qualquer comentário seria muito 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}

Responder1

O exemplo produz o erro

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

como \equalnão está definido. Se \equalfosse definido \if\equal{expandiria \equale depois testaria se os dois primeiros tokens em sua expansão eram o mesmo caractere, ou se sua expansão fosse apenas um token, testaria se esse é{

Você poderia substituir

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

por, por exemplo,

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

Responder2

Não existe \equalno TeX, a menos que você o defina. Aqui está um método muito mais simples para definir seu 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}

Isto pode ser facilmente estendido a mais de dois casos, na mesma linha.

insira a descrição da imagem aqui

informação relacionada