Jetzt funktioniert er zwar, gibt aber wieder falsches aus:
Aufruf:
Vgl. \ct[45]{Benner2009} \\%
Vgl. \ct[45-46]{Benner2009} \\%
Vgl. \ct[45-48]{Benner2009} \\%
Vgl. \ct[45-500]{Benner2009b} \\%
Vgl. Benner(2009a), S 45
Vgl. Benner(2009a), S 1f.
Vgl. Benner(2009a), S 1ff.
Vgl. Benner(2009b), S 1–23.
Offenbar habe ich die Fehlerstellen aber selbst gefunden, jedenfalls scheint es jetzt zu funktionieren. Vielleicht kannst Du trotzdem nochmal als zweites Auge drübergucken. Folgende Fehler habe ich geändert:
a) Hinter dem "S" fehlte ein Punkt -> "S."
b) Offenbar sind überall ein paar Rauten (#) verloren gegangen, weshalb es zu den fehlerhaften Ausgaben kam:
b1) 1f.\else\ifnum -> #1f.\else\ifnum
b2) 1ff.\else1--23. -> #1ff.\else#1--#2
c) Am Ende von b2) war ein Punkt zuviel
d) Ausserdem habe ich zwischen Seitenzahl und "f." (bzw. "ff.") noch der typografischen Schönheit halber ein geschütztes Leerzeichen eingefügt.
Vollständiger Code:
\newcounter{testA}
\makeatletter
\newcommand*\ct[2][]{%
\cite{#2}\ifx\relax#1\relax\else, S.\,%
\expandafter\Seite@i#1--\@nil\fi}
\def\Seite@i#1-#2-#3\@nil{%
\ifx\relax#2\relax % ohne -
#1\else
\setcounter{testA}{#2}%
\addtocounter{testA}{-#1}%
\ifnum\thetestA=1
#1\,f.\else\ifnum\thetestA<6
#1\,ff.\else#1--#2.\fi\fi\fi}
\makeatother
Vielen Dank für die schöne Lösung, hätte ich alleine nie hinbekommen und hilft mir sehr!