Ich habe drei Zähler definiert, die ich innerhalb einer Bedingung hochzählen werde. Das soll dazu führen, dass funktionale Anforderungen mit FA (und einer nachfolgenden Nummer) und nicht funktionale Anforderungen mit NFA (und einer von den funktionalen Anforderungen unabhängigen Nummernfolge) beginnen. Das soll auch für die allgemeine User Story gelten.
Mit dem unten stehenden Code scheint der Zähler unabhängig davon weiterzugehen, ob die Bedingung erfüllt ist oder nicht. Leider bin ich mir nicht ganz sicher, ob es eine bessere Lösung gibt oder ob ich etwas falsch mache. Kommentare sind sehr willkommen!
\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}
Antwort1
Das Beispiel erzeugt den Fehler
! Undefined control sequence.
\userstory #1#2#3-> \if \equal
as \equal
ist nicht definiert. Wenn \equal
definiert wurde, \if\equal{
würde es expandieren \equal
und dann prüfen, ob die ersten beiden Token in seiner Expansion das gleiche Zeichen wären, oder wenn seine Expansion nur ein Token wäre, würde es prüfen, ob das ist{
Sie könnten ersetzen
\if\equal{#1}{\string FA}
durch beispielsweise
\def\tmpa{#1}\def\tmpb{FA}\ifx\tmpa\tmpb
Antwort2
In TeX gibt es kein \equal
, es sei denn, Sie definieren es. Hier ist eine viel einfachere Methode, Ihren Befehl zu definieren.
\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}
Dies lässt sich in gleicher Weise problemlos auf mehr als zwei Fälle ausweiten.