Non metterei tutti quegli \@addtoreset là. Basta darli una volta per tutte: non ha molto senso farlo localmente.
Perché non li? per ogni articolo devo reinizializzare i valori delle varie parti ecc.
Per la questione dell’array in effetti usa authors. Poi provo.
\@addtoreset{foo}{bar} aggiunge il contatore foo alla lista di azzeramento associata al contatore bar. Così stai semplicemente aggiungendo più volte il contatore alla lista.
Quando hai dato \@addtoreset{foo}{bar}, ogni comando \stepcounter{bar}, \refstepcounter{bar} e \setcounter{bar} azzera foo. Quindi il codice giusto è
`\@addtoreset{section}{article}
\@addtoreset{figure}{article}
\@addtoreset{table}{article}
\@addtoreset{equation}{article}
\@addtoreset{footnote}{article}
\newcommand\articolo{}
\def\articolo{%
\cleardoublepage
\refstepcounter{article}
…}
\def\endarticolo{…}`
Ho anche tolto quel \newenvironment{articolo}, tanto vale definirsi direttamente \articolo e \endarticolo. Il \newcommand serve per pararsi le spalle nel caso il comando \articolo sia già definito.
Occhio agli spazi spuri. Per esempio, metterei il comando di cambio pagina prima di tutto, così da trovarsi in modo verticale dove spazi e linee vuote sono ignorati.
Ciao
Enrico