Secondo tentativo: quanto segue funziona sicuramente con le opzioni che hai indicato nel tuo messaggio precedente (se funziona anche con altre combinazioni “arcane”, tanto meglio, ma a memoria dei futuri, ipotetici utilizzatori ricordo che non assicuro nulla, come indicato nella licenza d’uso).
`%%
%% *** This is jura-extra v0.2 (2005/01/28) ***
%%
%% LaTeX package for altering citation styles provide by jurabib package to
%% satisfy unreasonable requests (a horrible hack :-))
%%
%% Copyright (C) 2005 Emanuele Vicentini
%%
%% Based on Jurabib (Copyright (C) 1999-2004 Jens Berger
%% (http://www.jurabib.org))
%%
%% This program is free software; you can redistribute it and/or
%% modify it under the terms of the GNU General Public License
%% as published by the Free Software Foundation; either version 2
%% of the License, or (at your option) any later version.
%%
%% This program is distributed in the hope that it will be useful,
%% but WITHOUT ANY WARRANTY; without even the implied warranty of
%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
%% GNU General Public License for more details.
%%
%% You should have received a copy of the GNU General Public License
%% along with this program; if not, write to the Free Software
%% Foundation, Inc., 59 Temple Place – Suite 330, Boston, MA 02111-1307, USA.
%%
\NeedsTeXFormat{LaTeX2e}[1995/12/01]
\ProvidesPackage{jura-extra}[2005/01/28 v0.2 jura-extra]
\RequirePackage{jurabib}
\def\@citex[#1][#2]#3{%
\stepcounter{jb@cites@in@footnote}%
\ifjb@ssed@mult@works\jb@check@edn{#3}\fi
\ifthenelse{\boolean{jb@foot}\or\(\boolean{jb@super}\and\not\boolean{jb@fn}%
\and\not\boolean{jbweareinbib}\and\not\boolean{jbweareinendnotes}\)}{%
\renewcommand*{\@cite}[2]{\unskip\footnote{##1##2\ifthenelse{\boolean{jb@footnote@period}}{\unskip.}{}}}%
}{%
\renewcommand*{\@cite}[2]{%
\ifjb@fn\else\ifjbweareinbib\else\ifjbcross\else\jb@open\fi\fi\fi
##1##2%
\ifjb@fn\else\ifjbweareinbib\else\ifjbcross\else\jb@close\fi\fi\fi
}%
}%
\ifx\relax#1\relax
\ifx\relax#2\relax
\ifjb@debug
\typeout{#3: @citex arg1 and @citex arg2 are empty,}%
\typeout{#3: I assume \string\cite{key}}%
\fi
\def\jb@@newannotatorcite{}%
\def\jb@@newpagecite{\jbprformat{}}%
\else
\ifjb@debug
\typeout{#3: @citex arg1 is empty or missing/@citex arg2 is #2}%
\typeout{#3: I assume \string\cite[#2]{key} or \string\cite[][#2]{key}}%
\fi
\def\jb@@newannotatorcite{}%
\def\jb@@newpagecite{\jbprformat{#2}}%
\fi
\else
\ifx\relax#2\relax
\ifjb@debug
\typeout{#3: @citex arg1 is #1/@citex arg2 is empty or missing}%
\typeout{#3: I assume \string\cite[#1][]{key}}%
\fi
\ifjb@old@order
\def\jb@@newannotatorcite{}%
\def\jb@@newpagecite{\jbprformat{#1}}%
\else
\def\jb@@newannotatorcite{#1}%
\def\jb@@newpagecite{\jbprformat{}}%
\fi
\else
\ifjb@debug
\typeout{#3: @citex arg1 is #1/@citex arg2 is #2}%
\typeout{#3: I assume \string\cite[#1][#2]{key}}%
\fi
\ifjb@old@order
\def\jb@@newannotatorcite{#2}%
\def\jb@@newpagecite{\jbprformat{#1}}%
\else
\def\jb@@newannotatorcite{#1}%
\def\jb@@newpagecite{\jbprformat{#2}}%
\fi
\fi
\fi
\ifjb@no@nested@crossrefs
\let\origcrossref\jbcrossrefchecked
\renewcommand*{\jbcrossrefchecked}[2][]{}%
\let\origbibces\bibces
\renewcommand*{\bibces}{}%
\fi
\let\@citea\@empty%
\@cite{%
\@for\@citeb:=#3\do{%
\@citea%
\def\@citea{;\penalty\@m\ %
\@ifundefined{jb@morethanonecite}{%
\global\@namedef{jb@morethanonecite}{}}{}%
\ifthenelse{\equal{\jb@@newpagecite}{\@empty}}{\relax}{%
\jb@package@warning{\jb@pkg@name}{%
I assume you know what you're doing %
using `\jb@@newpagecite'\MessageBreak
on a citation with more than one\MessageBreak
author}{\relax}%
}%
}%
\@ifundefined{b@\@citeb}{}{%
\protected@edef\@tempa{\csname b@\@citeb\endcsname}%
\protected@edef\jb@@new@@author{\expandafter\jb@fifthofseven\@tempa\@empty}%
}%
\ifthenelse{\equal{\jb@@last@@author}{\jb@@new@@author}\and\not\equal{\jb@@new@@author}{}}{%
\jb@same@fullauthortrue
}{%
\jb@same@fullauthorfalse
}%
\global\let\jb@@last@@author\jb@@new@@author
\@ifundefined{jb@morethanonecite}{\relax}{%
\let\jb@@newannotatorcite\@empty
\let\idemname\idemmidname
}%
\edef\@citeb{\expandafter\@firstofone\@citeb\@empty}%
\if@filesw
\immediate\write
\@newciteauxhandle{%
\jb@makehowcited\string\citation{\@citeb}%
}%
\fi
\@ifundefined{b@\@citeb\@extra@b@citeb}{%
\mbox{\reset@font{\bfseries ?}, #1}%
\G@refundefinedtrue
\@latex@warning{%
Citation `\@citeb' on page \thepage \space undefined
}%
}{%
\begingroup
\jb@extract%
\ifjb@always@pageranges\else\ifjb@tested@pageranges
\ifthenelse{\equal{\jb@@newpagecite}{}}{}{\jb@make@pageranges@for@first@cite}%
\else\jb@make@pageranges@for@first@cite\fi\fi
\def\jb@@newauthorcite{\@citeb}%
\jb@make@opcit
\jb@call@index{aut}{\@citeb}%
\jb@call@index{ed}{\@citeb}%
\jb@call@index{org}{\@citeb}%
\jb@changefontsforfullcite
\ifjb@allow@hyper@cite\hyper@jblinkstart{\@citeb}\fi
\jb@extract%
\jb@do@ibidem@name@title@test%
\ifthenelse{%
\equal{\jb@@fullname}{\@empty}%
\and
\equal{\jb@@author}{\@empty}%
}{%
\let\jbhowsepbeforetitle\@empty
}{}%
\jbonlyforcitations%
\jb@cite@title@for@type@hook%
\jb@cite@full@first@fortype@hook%
\jb@cite@title@for@work@hook%
\jb@start@page@for@type@hook%
\jb@make@superscript@edition%
\@ifundefined{jb@fm@\@citeb}{}{%
\ifthenelse{\equal{\jb@@mult@switch}{0}}{%
\@ifundefined{jb@fmmess@\@citeb}{% only one message per entry
\global\@namedef{jb@fmmess@\@citeb}{}%
\jb@package@warning{\jb@pkg@name}{%
Multiple use of `et. al.' for the author(s)\MessageBreak
of `#3' \MessageBreak
detected, printing the title to\MessageBreak
avoid ambiguity}}{}}{\relax}%
\jb@do@if@multiple@bibetal% the things to do if true
}%
\ifjb@babel
\ifthenelse{%
\equal{\jb@@language}{\bbl@main@language}%
}{}{%
\ifthenelse{%
\equal{\jb@@language}{\@empty}%
}{% if no language is given, use the main language
\expandafter\jbselectlanguage%
\expandafter{\bbl@main@language}%
}{% if a language is given, use it
\language=\csname l@\jb@@language\endcsname\relax%
}%
}%
\fi
\jb@checktitlefields
\@ifundefined{jb@morethanonecite}{\jb@makeibidem}{\relax}%
\jb@makeidem
\jb@firstcitefull
\jb@checked@etal
\jb@makeagainfullcite%
\jb@relaxforemptyauthor
\jb@warningfootciteusage
\jb@maketitlewishestrue
\ifjb@lookat
\ifjb@firstcite@full
\ifjb@allow@lookat@for@fullcite
\ifjb@all@full\else
\ifthenelse{%
\equal{\@nameuse{look@\@citeb}}{firsttime}%
}{%
\relax
}{%
\jb@lookat@fortype@hook
\ifthenelse{\equal{\jb@@lookat@for@type@switch}{1}}{%
\unskip\lookatprefix%
\endgroup
\begingroup
\lookatsuffix%
\jb@extract%
}{}%
}%
\fi % allfull end
\fi % allow@lookat@for@fullcite end
\fi % jb@firstcite@full end
\fi % jb@lookat end
\jb@cite@no@title@for@type@hook%
\ifjb@debug
\textcolor[named]{Dandelion}{%
\ifjb@debug@br[\fi\jb@makecheckedcite\ifjb@debug@br]\fi}%
\else
\jb@makecheckedcite%
\fi
\OpCit%
\jb@checkperiod{#2}%
\jb@extract@starting@page{\jb@@pages}%
\jb@makecheckedpages
\ifjb@allow@hyper@cite\hyper@jblinkend\fi
\endgroup
\ifx\relax#1\relax\ifx\relax#2\relax
\gdef\jb@@lastannotatorcite{}\gdef\jb@@lastpagecite{EMPTY}%
\else
\gdef\jb@@lastannotatorcite{}\gdef\jb@@lastpagecite{\jbprformat{#2}}%
\fi
\else
\ifx\relax#2\relax
\ifjb@old@order
\gdef\jb@@lastannotatorcite{}\gdef\jb@@lastpagecite{\jbprformat{#1}}%
\else
\gdef\jb@@lastannotatorcite{}\gdef\jb@@lastpagecite{EMPTY}%
\fi
\else
\ifjb@old@order
\gdef\jb@@lastannotatorcite{#2}\gdef\jb@@lastpagecite{\jbprformat{#1}}%
\else
\gdef\jb@@lastannotatorcite{#1}\gdef\jb@@lastpagecite{\jbprformat{#2}}%
\fi
\fi
\fi
\ifjbweareinbib\else\gdef\jb@@lastauthorcite{#3}\fi
\global\let\jb@morethanonecite\@undefined
\let\ibidem\@undefined
\ifjb@no@nested@crossrefs
\global\let\jbcrossrefchecked\origcrossref
\fi
\ifjb@fn
\let\jb@close\@empty
\let\jb@open\@empty
\fi
\stepcounter{citefull}%
\stepcounter{opcit}%
\jb@allow@adding@of@pagerangetrue
}%
}%
\global\jb@fullcite@againfalse
\jb@noauthorforcitetitlefalse
}{}%
\ifjb@fn\else\jb@fnfalse\fi
\jb@ssed@recent@kernedfalse
\@restore@auxhandle
}
\AtBeginDocument{%
\def\lookatprefix{Cfr.~}%
\def\lookatsuffix{}}
\endinput`
L’autore di jurabib avrebbe sicuramente fatto un lavoro migliore e con maggior cognizione di causa.