%%
%% The unbtexcite.sty package for the UnBTeX class is adapted from 
%% abntex2cite.sty to format bibliographic references in ABNT style.
%%
%% abntex2cite.sty, v1.9.7 laurocesar
%% Copyright 2012-2018 by abnTeX2 group at https://www.abntex.net.br/ 
%%
%% This work may be distributed and/or modified under the
%% conditions of the LaTeX Project Public License, either version 1.3
%% of this license or (at your option) any later version.
%% The latest version of this license is in
%%   http://www.latex-project.org/lppl.txt
%% and version 1.3 or later is part of all distributions of LaTeX
%% version 2005/12/01 or later.
%%
%% This work has the LPPL maintenance status `maintained'.
%% 
%% The Current Maintainer of this work is the abnTeX2 team, led
%% by Lauro César Araujo. Further information are available on 
%%   https://www.abntex.net.br/
%%

% How this package is organized:
% ------------------------------
% - \AfterTheBibliography{} hook
% - Options declaration (search for substring needed here)
%     alf, num (default)
%     biblabel-on-margin
%     no-abnt-option-file (in case one defines its own options file)
%     other options are considered "\citeoption's" (mechanism includes a
%       list that stores non defined options, and in \AtBeginDocument,
%       \citeoption acts over this list)
% - Allocing auxiliar variables
% - \citeoption
%     Similar to \nocite, but does not complain about obviously not defined
%     citations. Intented to access options of abnTeX's bibtex styles.
% - \bibliography
%     Extra care to auto include unbtex-options as bibliography database (if
%     needed)
% - \bibliographystyle
%     If none is given, the style correspondent to the package style in
%     use (alf or num) is given.
% - Style customization
%     \authorstyle, \yearstyle, \optionaltextstyle
% - \bibitem
%     Defines action of \bibitem by its subcommands. Compatibility with old
%     abnt-alf is present.
% - \hiddenbibitem
%     Creates an empty bibliography entry buts creates all labels.
% - \abntrefinfo
%     From the creation of abntcite, options are present as a separated
%     command. This enables compatibility with any bibtex style.
%
% - \cite
%     This command depends on if the style is alf or num
%     If alf, then \cite produces (<explicit (capital)>, <year>)
%     If num, then \cite produces a superscript with [<implicit (lowercase)>]
% - \citeonline
%     This command depends on if the style is alf or num
%     If alf, \citeonline produces <implicit (lowercase)>, (<year>)
%     If num, \citeonline then produces <implicit (lowercase)>
% - \citeyear
%     Produces <year>
% - \citeauthor
%     Produces <explicit (capital) author>
% - \citeauthoronline
%     Produces <implicit (lowercase) author>
% - \apud[comments]{First}{Second}
%     Produces a double citation: (FIRST, YEAR apud SECOND, YEAR<, comments>)
% - \apudonline[comments]{First]{Second]
%     Produces a double citation: First (apud SECOND, YEAR<, comments>)
% - \Idem[comments]{Author}
%     Produces: Id., YEAR<, comments>
% - \Ibidem[comments]{Author}
%     Produces: Ibid.<, comments>
% - \opcit[comments]{Author}
%     Produces: AUTHOR, op. cit.<, comments>
% - \cfcite[comments]{Author}
%     Produces: Cf. AUTHOR, YEAR<, comments>

\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{unbtexcite}[2026/05/15 v1.6.2 UnBTeX]
\RequirePackage{ifthen}
\RequirePackage{calc}
\RequirePackage{setspace}	
\RequirePackage{url}

%%%%%%  Options Declaration  %%%%%%

% alf, num: main options
\newboolean{ABCItextondemand}
\DeclareOption{alf}{\def\AbntCitetype{alf}\setboolean{ABCItextondemand}{true}}
\DeclareOption{num}{\def\AbntCitetype{num}}
\ExecuteOptions{num}

% references on page foot
\newboolean{ABCIfoot}
\DeclareOption{foot}{\setboolean{ABCIfoot}{true}%
  \setboolean{ABCItextondemand}{false}}
\DeclareOption{not-foot}{\setboolean{ABCIfoot}{false}%
  \setboolean{ABCItextondemand}{true}}
\ExecuteOptions{not-foot}

% cite text on demand (defaults depends on foot or not-foot)
% (also recall that options are executed in order of definition at
% \ProcessOptions) 
\DeclareOption{load-text-on-demand}{\setboolean{ABCItextondemand}{true}}
\DeclareOption{load-text}{\setboolean{ABCItextondemand}{false}}

% biblabel-on-margin
\newboolean{ABCIbibjustif}
\DeclareOption{bibjustif}{\setboolean{ABCIbibjustif}{true}}
\DeclareOption{bibleftalign}{\setboolean{ABCIbibjustif}{false}}
\ExecuteOptions{bibleftalign}

% biblabel-on-margin
\newboolean{ABCIbiblabelonmargin}
\DeclareOption{biblabel-on-margin}
  {\setboolean{ABCIbiblabelonmargin}{true}}
\DeclareOption{biblabel-not-on-margin}
  {\setboolean{ABCIbiblabelonmargin}{false}}
\ExecuteOptions{biblabel-not-on-margin}

% indentation: compatibility with old norms
\ifx \bibindent\undefined
  \newlength{\bibindent}
\fi
\setlength{\bibindent}{2.3em}

\newcommand{\citebrackets}[2]{\def\citeopen{#1}\def\citeclose{#2}}
\newcommand{\setcitebrackets}{\citebrackets()}

% 10520:2002 now defines only two numerical styles
\newboolean{ABNTovercite}
\DeclareOption{overcite}{\setboolean{ABNTovercite}{true}}
\DeclareOption{inlinecite}{\setboolean{ABNTovercite}{false}}

% 10520:2002 does not allow (XX) or [XX] for superscript cites
\newboolean{ABNTstrictnumformat}

% Incorpora o arquivo nbr10520-2002.def do abntex1
% A norma NBR 10520:2002 removeu as opções [] e () para citações
% em superscrito
\ifx\AbntCitetype\AbntCitetypeALF\else
  \renewcommand{\setcitebrackets}{
  \ifthenelse{\boolean{ABNTovercite}}{\citebrackets{}{}}{\citebrackets()}}
\fi

%
% Allocing variables
%

% used for \@biblabel in num
\newlength{\minimumbiblabelwidth}
\newlength{\ABCIauxlen}

% Here I define a LaTeX list that will contain all options not defined
% before.
% A LaTeX list is a command containing a comma separated list of
% itens. The list is processed by command \@for, as in \citeoption.
\def\citeoptionlist{}
% This command adds a string to the list.
\newcommand{\addtociteoptionlist}[1]{
  \ifthenelse{\equal{\citeoptionlist}{}}
    {\edef\citeoptionlist{#1}}
    {\edef\citeoptionlist{\citeoptionlist,#1}}
}

\DeclareOption*{\addtociteoptionlist{\CurrentOption}}

\provideboolean{ABNThyperref}

\@ifpackageloaded{hyperref}{%
%\addtociteoptionlist{abnt-url-package=hyperref}
\setboolean{ABNThyperref}{true}
}{\setboolean{ABNThyperref}{false}}

\@ifpackageloaded{url}{%
\addtociteoptionlist{abnt-url-package=url}
\def\UrlLeft{}
\def\UrlRight{}
\urlstyle{same}}

\ProcessOptions

% really foot?
\ifthenelse{\boolean{ABCIfoot}\and\equal{\AbntCitetype}{num}}
  {\setboolean{ABCIfoot}{true}}
  {\setboolean{ABCIfoot}{false}}

% Now, after all options are processed, \citeoption process the list of
% options given as package options.
\ifthenelse{\equal{\citeoptionlist}{}}{}
  {\AtBeginDocument{\citeoption{\citeoptionlist}}}

% \citeoption - equal to \nocite  (I copied source from \nocite)
% but not complains about this option be obviously undefined
\newboolean{ABCIciteoptionwasused}
\setboolean{ABCIciteoptionwasused}{false}
\def\citeoption#1{\@bsphack
  \@for\@citekey:=#1\do{%
    % next line eliminates white space before citation name
    \edef\@citekey{\expandafter\@firstofone\@citekey}%
    \if@filesw\immediate\write\@auxout{\string\citation{\@citekey}}\fi
  }%
  \@esphack%
  \setboolean{ABCIciteoptionwasused}{true}%
}

% \bibliography{list of files .bib to be processed by bibTeX}
%
%   I had to redefine this command such that unbtex-options.bib is
%   automatically used in case that some \citeoption was given as package
%   option. An entry
%      \bibliography{unbtex-options,unbtex-options,..}
%   produces an error in bibTeX. So I had to check if user already
%   includes unbtex-options by (him/her)self.
%
%   Implementation:
%
%     \citeoption was used?
%     If YES, (unbtex-options must be given to bibtex!)
%       checks for unbtex-options into parameter given to \bibliography
%       if present
%          user have included, so I don't add it once more
%       not present
%          I add necessary unbtex-options
%     If NO
%       no changes to \bibliography

\def\bibliography#1{%
  {
	  \ifx \SingleSpacing\undefined
	    \singlespacing
	  \else
	    \SingleSpacing
	  \fi
	  \ifthenelse{\boolean{ABCIciteoptionwasused}}
	   {
	      \if@filesw\immediate\write\@auxout{\string\bibdata{unbtex-options,#1}}\fi
	   }
	   {
	    \if@filesw
	       \immediate\write\@auxout{\string\bibdata{#1}}%
	    \fi
	   }
	 \@input@{\jobname.bbl}
  }
 }

% The next piece of code looks if bibtexstyle is used or not, and if not,
% includes the respective style from the abntcite mode (alf or num)
\newboolean{ABCIbibtexstyleused}
\setboolean{ABCIbibtexstyleused}{false}
\def\bibliographystyle#1{%
  \ifx\@begindocumenthook\@undefined\else
    \expandafter\AtBeginDocument
  \fi
    {\if@filesw
       \immediate\write\@auxout{\string\bibstyle{#1}}%
     \fi}
  \setboolean{ABCIbibtexstyleused}{true}
  }

%%%%%%%%%%%%%% Style %%%%%%%%%%%%%%%%%

\newcommand{\authorstyle}{\relax}
\newcommand{\yearstyle}{\relax}
\newcommand{\optionaltextstyle}{\relax}
\newcommand{\citenumstyle}{\relax}

\newlength{\biblabelsep}
\setlength{\biblabelsep}{1ex}

%%%%%%%%%%%%%%%%%%%%%  Implementation  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% automatic care for commas inside references
\providecommand{\ABCIccomma}{}
\newcommand{\ABCIcitecommadefault}{,\penalty\@m\ }
\newcommand{\ABCIcitecomma}{\ABCIccomma\let\ABCIccomma\ABCIcitecommadefault}
\newcommand{\ABCIinitcitecomma}{\def\ABCIccomma{}}
\newcommand{\ABCIcitecolondefault}{; }%{;\penalty\@m\ }

 \ifthenelse{\boolean{ABCIfoot}}
  {% foot-num mode
    \def\@lbibitem[#1]#2{\gdef\abntnextkey{#2}}
    \def\@bibitem#1{\gdef\abntnextkey{#1}}
  }
  {
    \def\@lbibitem[#1]#2{
      \gdef\abntnextkey{#2}
      \item[\@biblabel{#1}\hfill]%
      \ifthenelse{\boolean{ABNThyperref}}{%
        \hyper@anchorstart{cite.#2}\relax\hyper@anchorend}{}%
      \if@filesw
         {
          \let\protect\noexpand
          \immediate\write\@auxout{\string\bibcite{#2}{#1}}
         }
      \fi%
      \ignorespaces
    }
    \def\@bibitem#1{
      \gdef\abntnextkey{#1}
      \item%
      \ifthenelse{\boolean{ABNThyperref}}{%
        \hyper@anchorstart{cite.#1}\relax\hyper@anchorend}{}%
      \if@filesw
         {\immediate\write\@auxout{\string\bibcite{#1}{\the\value{\@listctr}}}}
      \fi%
      \ignorespaces
    }
  }

\newcommand{\hiddenbibitem}[2][]{\gdef\abntnextkey{#2}}

\newcommand{\ABCIgetcitetext}[1]{
  \if@filesw
    {\let\protect\noexpand
     \immediate\write\@auxout{\string\bibcite{\abntnextkey++TEXT}{#1}}}%
  \fi}

\newcommand{\ABCIgetcitetextecho}[1]{\ABCIgetcitetext{#1}#1}

% we are repeating \bibcite command as defined in hyperref.sty
% so that we have it all together at one place.
\ifthenelse{\boolean{ABNThyperref}}{%
%\renewcommand{\bibcite}[2]{%
%\@newl@bel{b}{#1}{\hyper@@link[cite]{}{cite.#1}{#2}}}%
\newcommand{\bibciteEXPL}[2]{%
 \@newl@bel{b}{#1++EXPL}{\hyper@@link[cite]{}{cite.#1}{#2}}}%
\newcommand{\bibciteIMPL}[2]{%
 \@newl@bel{b}{#1++IMPL}{\hyper@@link[cite]{}{cite.#1}{#2}}}%
\newcommand{\bibciteYEAR}[2]{%
 \@newl@bel{b}{#1++YEAR}{\hyper@@link[cite]{}{cite.#1}{#2}}}%
}{}

\newcommand{\abntrefinfo}[3]{%
  \if@filesw
    {%
     \let\protect\noexpand
     \ifthenelse{\boolean{ABNThyperref}}{%
     \immediate\write\@auxout{\string\bibciteEXPL{\abntnextkey}{#1}}%
     \immediate\write\@auxout{\string\bibciteIMPL{\abntnextkey}{#2}}%
     \immediate\write\@auxout{\string\bibciteYEAR{\abntnextkey}{#3}}}{%
     \immediate\write\@auxout{\string\bibcite{\abntnextkey++EXPL}{#1}}%
     \immediate\write\@auxout{\string\bibcite{\abntnextkey++IMPL}{#2}}%
     \immediate\write\@auxout{\string\bibcite{\abntnextkey++YEAR}{#3}}}%
   }%
  \fi
  \ifthenelse{\boolean{ABCIfoot}}
     {\ifthenelse{\boolean{ABCItextondemand}}
        {\@ifundefined{ABCIdemand@\abntnextkey}
          {\let\ABCIprocesscitetext\@gobble}
          {\let\ABCIprocesscitetext\ABCIgetcitetext}}
        {\let\ABCIprocesscitetext\ABCIgetcitetext}}
     {\ifthenelse{\boolean{ABCItextondemand}}
        {\@ifundefined{ABCIdemand@\abntnextkey}
          {\let\ABCIprocesscitetext\relax}
          {\let\ABCIprocesscitetext\ABCIgetcitetextecho}}
        {\let\ABCIprocesscitetext\ABCIgetcitetextecho}}%
  \ABCIprocesscitetext
}

\newcommand{\ABCIdemand}[1]{\expandafter\gdef\csname ABCIdemand@#1\endcsname{}}

\def\AbntCitetypeALF{alf}

\let\ABCInewblock\newblock
\DeclareRobustCommand{\newblock}{\ABCInewblock}

%%%%%%%%%%%%%%%%%%%%  abnt-alf  %%%%%%%%%%%%%%%%%%%%%%%

\setcitebrackets

\ifx\AbntCitetype\AbntCitetypeALF % if alf

  \renewcommand{\@biblabel}[1]{}
  
  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  %
  %               \cite[optional]{list of keys}
  %
  %  Implicit citation - author in capital letters and year; 
  %                       mechanism to deal with repeated names;
  %
  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  
  \renewcommand{\@cite}[2]%
    {\citeopen{#1\ifthenelse{\equal{#2}{}}{}{,
          {\optionaltextstyle#2}}}\citeclose}
  
  \DeclareRobustCommand{\cite}[2][]{%
    \leavevmode
    \let\@citeprevious\@empty%
    \@cite{%
      \@for\@citekey:=#2\do% \@citekey contains the key
        {%
         \edef\@citekey{\expandafter\@firstofone\@citekey\@empty}%
         % here, a tricky \let\@citename\"b@\@citekey++IMPL"
         \expandafter\let\expandafter\@citename%
             \csname b@\@citekey++IMPL\endcsname%
         \expandafter\let\expandafter\@citeyear%
             \csname b@\@citekey++YEAR\endcsname%
         \ifx\@citeprevious\@empty%
         \else%
           \ifx\@citename\@citeprevious%
              \ABCIcitecommadefault% echoing ", "
           \else%
              \ABCIcitecolondefault% echoing "; "
           \fi%
         \fi%
         % writing on aux file
         \if@filesw\immediate\write\@auxout{\string\citation{\@citekey}}\fi%
         % if undefined bibitem
         \@ifundefined{b@\@citekey++IMPL}%
           {% if undefined
               {\bfseries??}% echoing ?
            \G@refundefinedtrue%
            \@latex@warning%
              {Citation `\@citekey' on page \thepage \space undefined}%
           }%
           {% if already defined
             \ifx\@citename\@citeprevious%
               {\yearstyle\@citeyear\@}\@%
             \else%
               {\@citename}, %
               {\yearstyle\@citeyear\@}%
             \fi%
             \let\@citeprevious\@citename%
           }%
           \Hy@backout{#2}%
        }% end for
    }{#1}%
  }
  
  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  %
  %             \citeonline[optional]{list of keys}
  %
  %  Inline (explicit) citation - author in "inline style" and year; 
  %                               mechanism to deal with repeated names;
  %
  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  
  \newcommand{\@citeonline}[2]%
    {{#1\ifthenelse{\equal{#2}{}}{}{, {\optionaltextstyle#2}}}\citeclose}
  
  \DeclareRobustCommand{\citeonline}[2][]{%
    \leavevmode
    \let\@citeprevious\@empty%
    \@citeonline{%
      \@for\@citekey:=#2\do%\@citekey contains the key
        {%
         \edef\@citekey{\expandafter\@firstofone\@citekey\@empty}%
         % here, a tricky \let\@citename\"b@\@citekey++UP" :-)
         \expandafter\let\expandafter\@citename%
             \csname b@\@citekey++EXPL\endcsname%
         \expandafter\let\expandafter\@citeyear%
             \csname b@\@citekey++YEAR\endcsname%
         \ifx\@citeprevious\@empty%
         \else%
           \ifx\@citename\@citeprevious%       
             \ABCIcitecommadefault% echoing ", "
           \else%
             \citeclose, % echoing "), "
           \fi%
         \fi%
         % writing in aux file
         \if@filesw\immediate\write\@auxout{\string\citation{\@citekey}}\fi%
         \@ifundefined{b@\@citekey++EXPL}%
           {% if undefined
            {\bfseries??}% echoing ?
            \G@refundefinedtrue%
            \@latex@warning%
              {Citation `\@citekey' on page \thepage \space undefined}%
           }%
           {% if really defined
            \ifx\@citename\@citeprevious%
            \else%
               {\authorstyle\@citename\@{}} \citeopen%
            \fi%
            {\yearstyle\@citeyear\@}%
            \let\@citeprevious\@citename%
           }%
           \Hy@backout{#2}%
        }% end for
    }{#1}%
  }
  
  % "overcite" compatibility
  \let\citen\citeonline
  \let\citenum\citeonline

% end alf
%
%%%%%%%%%%%%%%%%%%%%%%%%%  abnt-num  %%%%%%%%%%%%%%%%%%%%%%%%%%
%

\else % if not alf,

  \ifABCIfoot

     \renewenvironment{thebibliography}[1]{}{}

     \citebrackets{}{}

     \let\ABCIscriptfont\scriptsize
     \renewcommand{\newblock}{}

     \def\ABCI@cite#1#2{\raisebox{.8ex}%
         {\ABCIscriptfont\citeopen{#1\if@tempswa, #2\fi}\citeclose}}

     \def\ABCI@citeonline#1#2{{#1\if@tempswa, #2\fi}}

     \DeclareRobustCommand\cite{%
        \let\@cite\ABCI@cite%
        \@ifnextchar[{\@tempswatrue\@citex}{\@tempswafalse\@citex[]}}

     \DeclareRobustCommand\citeonline{%
        \leavevmode\let\@cite\ABCI@citeonline%
        \@ifnextchar[{\@tempswatrue\@citex}{\@tempswafalse\@citex[]}}

     \def\@citex[#1]#2{%
       \def\@safe@activesfalse{}%
       \ABCIinitcitecomma%
       \def\ABCIcitelist{}%
       \def\ABCIaftercitex{}% to put the footnotes
       \@cite{%
         \@for\@citeb:=#2\do%
            {%
             \edef\@citeb{\expandafter\@firstofone\@citeb\@empty}%
             \if@filesw\immediate\write\@auxout{\string\citation{\@citeb}}\fi%
             \@ifundefined{b@\@citeb++IMPL}%
                {%
                 {\bfseries??}%
                 \G@refundefinedtrue%
                 \@latex@warning%
                   {Citation `\@citeb' on page \thepage \space undefined}%
                }%
                {%
                 \@ifundefined{b@\@citeb}
                   {%
                    \stepcounter{footnote}%
                    \expandafter\xdef\csname b@\@citeb\endcsname{\thefootnote}%
                    \ABCItoken=\expandafter{\ABCIaftercitex}%
                    \xdef\ABCIaftercitex%
                       {\the\ABCItoken\noexpand\footnotetext%
                             {\noexpand\citetext{\@citeb}}}%
                   }
                   {}%
                 \expandafter\let\expandafter\ABCIcitation%
                               \csname b@\@citeb\endcsname%
                 % test for positive number
                 \ifcat _\ifnum\z@<0\ABCIcitation _\else A\fi
                    \ABCIaddtocitelist{\ABCIcitation}%
                 \else% else \ifcat
                    \ABCIcitecomma\hbox{\ABCIcitation}%
                 \fi% end \ifcat
                }%
            }%
       }{#1}%
       \ABCIaftercitex%
     }

   \newcommand{\citeifnotcited}[1]{%
     \def\ABCIcitelist{}%
     \@for\@citeb:=#1\do%
        {%
         \@ifundefined{b@\@citeb}
           {\ABCIaddtocitelist{\@citeb}}
           {}%
        }%
     \expandafter\cite\expandafter{\ABCIcitelist}%
   }

   \newcommand{\citeonlineifnotcited}[1]{%
     \def\ABCIcitelist{}%
     \@for\@citeb:=#1\do%
        {%
         \@ifundefined{b@\@citeb}
           {\ABCIaddtocitelist{\@citeb}}
           {}%
        }%
     \expandafter\citeonline\expandafter{\ABCIcitelist}%
   }

   \newcommand{\ABCIaddtocitelist}[1]{%
     \ifthenelse{\equal{\ABCIcitelist}{}}%
       {\edef\ABCIcitelist{#1}}
       {\edef\ABCIcitelist{\ABCIcitelist,#1}}%
   }%

   \newcommand{\ifcited}[3]{\@ifundefined{b@#1}{#3}{#2}}

  \else % if num and NOT foot

     % this only works with proper settings in \ABCIthebibliformat
     \ifthenelse{\boolean{ABCIbiblabelonmargin}}
     {
     \renewcommand{\@biblabel}[1]%
        {\ifthenelse{\equal{#1}{}}{}{{\citenumstyle #1\hspace{\biblabelsep}}}}
     }
     {
     \renewcommand{\@biblabel}[1]%
        {%
         \ifthenelse{\equal{#1}{}}{}
           {%
            % Para números entre colchetes na lista de referências
            %\def\biblabeltext{{\citenumstyle #1\hspace{\biblabelsep}}}%
            \def\biblabeltext{{\citenumstyle[#1]\hspace{\biblabelsep}}}%
            \settowidth{\ABCIauxlen}{\biblabeltext}%
            \ifthenelse{\lengthtest{\ABCIauxlen<\minimumbiblabelwidth}}
               {\setlength{\ABCIauxlen}{\minimumbiblabelwidth-\ABCIauxlen}}
               {\setlength{\ABCIauxlen}{0cm}}%
            %{\biblabeltext\hspace{\ABCIauxlen}}%  
            \parbox[t]{\bibindent}{\raggedleft\biblabeltext\hspace{\ABCIauxlen}}%
           }%
        }%
     }

     \let\ABCIscriptfont\scriptsize

     \ifthenelse{\boolean{ABNTovercite}}{%
     \def\ABCI@cite#1#2{\raisebox{1ex}%
         {\ABCIscriptfont\citeopen{#1\if@tempswa, #2\fi}\citeclose}}}{%
     \def\ABCI@cite#1#2{\citeopen{#1\if@tempswa, #2\fi}\citeclose}}

     \def\ABCI@citeonline#1#2{{#1\if@tempswa, #2\fi}}

     \DeclareRobustCommand\cite{%
        \let\@cite\ABCI@cite%
        \@ifnextchar[{\@tempswatrue\@citex}{\@tempswafalse\@citex[]}}

     \DeclareRobustCommand\citeonline{%
        \leavevmode\let\@cite\ABCI@citeonline%
        \@ifnextchar[{\@tempswatrue\@citex}{\@tempswafalse\@citex[]}}

     \def\@citex[#1]#2{%
       \def\@safe@activesfalse{}%
       \ABCIinitcitecomma%
       \def\ABCIcitelist{}%
       \@cite{%
         \@for\@citeb:=#2\do%
            {%
             \edef\@citeb{\expandafter\@firstofone\@citeb\@empty}%
             \if@filesw\immediate\write\@auxout{\string\citation{\@citeb}}\fi%
             \@ifundefined{b@\@citeb}%
                {%
                 {\bfseries??}%
                 \G@refundefinedtrue%
                 \@latex@warning%
                   {Citation `\@citeb' on page \thepage \space undefined}%
                }%
                {%
                 \expandafter\let\expandafter\ABCIcitation%
                               \csname b@\@citeb\endcsname%
                 % test for positive number
                 \ifcat _\ifnum\z@<0\ABCIcitation _\else A\fi
                    \ABCIaddtocitelist{\ABCIcitation}%
                 \else% else \ifcat
                    \ABCIcitecomma\hbox{\ABCIcitation}%
                 \fi% end \ifcat
                }%
            }%
       }{#1}%
     }

   \newcommand{\ABCIaddtocitelist}[1]{%
     \ifthenelse{\equal{\ABCIcitelist}{}}%
       {\edef\ABCIcitelist{#1}}
       {\edef\ABCIcitelist{\ABCIcitelist,#1}}%
   }%
  
  \fi
\fi % end if alf

\providecommand{\citeifnotcited}[1]{}
\providecommand{\citeonlineifnotcited}[1]{}
\providecommand{\ifcited}[3]{}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
%                \citeyear{list of keys}
%
%  Citation by year 
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\DeclareRobustCommand{\citeyear}[1]{%
  \leavevmode
  \let\@citeprevious\@empty%
  \@for\@citekey:=#1\do %\@citekey contains the key
    {%
     \expandafter\let\expandafter\@citename%
          \csname b@\@citekey++YEAR\endcsname%
     % if first use do nothing
     \ifx\@citeprevious\@empty%
     \else%
        , % echoing ", 
     \fi%
     % writing on aux file
     \if@filesw\immediate\write\@auxout{\string\citation{\@citekey}}\fi%
     % if undefined bibitem
     \@ifundefined{b@\@citekey++YEAR}%
       {% if undefined
        {\bfseries??}% echoing ?
        \G@refundefinedtrue%
        \@latex@warning%
          {Citation `\@citekey' on page \thepage \space undefined}%
       }%
       {% if already defined
         \ifx\@citename\@citeprevious%
         \else%
           {\@citename\@}%
         \fi%
         \let\@citeprevious\@citename%
       }%
       \Hy@backout{#1}%
    }% end for
}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
%               \citeauthor{list of keys}
%
%  Implicit citation (capital letters)
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\DeclareRobustCommand{\citeauthor}[1]{%
  \leavevmode
  \let\@citeprevious\@empty%
  \@for\@citekey:=#1\do %\@citekey contains the key
    {%
     \expandafter\let\expandafter\@citename\csname b@\@citekey++IMPL\endcsname%
     % writing on aux file
     \if@filesw\immediate\write\@auxout{\string\citation{\@citekey}}\fi%
     % if undefined bibitem
     \@ifundefined{b@\@citekey++IMPL}%
       {% if undefined
        {\bfseries??}%
        \G@refundefinedtrue%
        \@latex@warning%
          {Citation `\@citekey' on page \thepage \space undefined}%
       }%
       {% if already defined
         \ifx\@citename\@citeprevious%
         \else%
            \ifx\@citeprevious\@empty%
            \else%
              ; % echoing "; "
            \fi%
            {\@citename\@}%
         \fi%
         \let\@citeprevious\@citename%
       }%
       \Hy@backout{#1}%
    }% end for
}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
%             \citeauthoronline{list of keys}
%
%  Explicit citation (non capital letter)
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\DeclareRobustCommand{\citeauthoronline}[1]{%
  \leavevmode
  \let\@citeprevious\@empty%
  \@for\@citekey:=#1\do %\@citekey contains the key
    {%
     \expandafter\let\expandafter\@citename\csname b@\@citekey++EXPL\endcsname%
     % writing on aux file
     \if@filesw\immediate\write\@auxout{\string\citation{\@citekey}}\fi%
     % if undefined bibitem
     \@ifundefined{b@\@citekey++EXPL}%
       {% if undefined
        {\bfseries??}%
        \G@refundefinedtrue%
        \@latex@warning%
          {Citation `\@citekey' on page \thepage \space undefined}%
       }%
       {% if already defined
         \ifx\@citename\@citeprevious%
         \else%
            \ifx\@citeprevious\@empty%
            \else%
              ; % echoing "; "
            \fi%
            {\authorstyle\@citename\@}%
         \fi%
         \let\@citeprevious\@citename%
       }%
       \Hy@backout{#1}%
    }% end for
}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
%             \citetext{list of keys}
%
%  Text of the reference
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\DeclareRobustCommand{\citetext}[1]{%
  \leavevmode
  \let\@citeprevious\@empty%
  \@for\@citekey:=#1\do %\@citekey contains the key
    {%
     \expandafter\let\expandafter\@citename\csname b@\@citekey++TEXT\endcsname%
     % writing on aux file
     \if@filesw\immediate\write\@auxout{\string\citation{\@citekey}}\fi%
     \if@filesw\immediate\write\@auxout{\string\ABCIdemand{\@citekey}}\fi%
     % if undefined bibitem
     \@ifundefined{b@\@citekey++TEXT}%
       {% if undefined
        {\bfseries??}%
        \G@refundefinedtrue%
        \@latex@warning%
          {Citation `\@citekey' on page \thepage \space undefined}%
       }%
       {% if already defined
         \ifx\@citename\@citeprevious%
         \else%
            \relax
            \ifx\@citeprevious\@empty%
            \else%
              ; % echoing "; "
            \fi%
            {\@citename}%
         \fi%
         \let\@citeprevious\@citename%
       }%
       \Hy@backout{#1}%
    }% end for
}

% To ensure that the margin settings of this package works, \leftmargin
% (inside thebibliography) must be 0cm. \@openbib@code is a hook inside
% thebibliography.
\let\@openbib@codeBACKUP\@openbib@code
\def\@openbib@code{\@openbib@codeBACKUP\setlength{\leftmargin}{0cm}}

% adding things after \begin{thebibliography}{}
\let\thebibliographyBkUp\thebibliography
\def\thebibliography#1{\thebibliographyBkUp{#1}\ABCIthebibliformat}

%
% \AfterTheBibliography{} hook
%

\newtoks\ABCItoken

\newcommand{\ABCIthebiblihook}{}

\newcommand{\AfterTheBibliography}[1]{
  \ABCItoken=\expandafter{\ABCIthebiblihook}
  \expandafter\def\expandafter\ABCIthebiblihook\expandafter{\the\ABCItoken#1}
}

\ifthenelse{\boolean{ABCIbibjustif}}{}
  {\AfterTheBibliography{\setlength{\rightskip}{0pt plus 2cm}}}

\ifthenelse{\equal{\AbntCitetype}{alf}}
  {% mode alf
   \newcommand{\ABCIthebibliformat}{
     \setlength{\leftskip}{\bibindent}
     \setlength{\labelwidth}{0cm}
     \setlength{\labelsep}{0cm}
     \setlength{\itemindent}{-\bibindent}
     \setlength{\listparindent}{0cm}
     \ABCIthebiblihook
     }     
  }
  {% mode num
   \ifthenelse{\boolean{ABCIbiblabelonmargin}}
     {
       \newcommand{\ABCIthebibliformat}{
         \setlength{\leftskip}{\bibindent}
         \setlength{\labelwidth}{10cm}
         \setlength{\labelsep}{0cm}
         \setlength{\itemindent}{-\bibindent}
         \setlength{\listparindent}{0cm}
         \setlength{\biblabelsep}{1.5ex}
         \ABCIthebiblihook
       }
     }
     {
       \newcommand{\ABCIthebibliformat}{
         \setlength{\leftskip}{\bibindent}
         \setlength{\labelwidth}{0cm}
         \setlength{\labelsep}{0cm}
         \setlength{\itemindent}{-\bibindent}
         \setlength{\listparindent}{0cm}
         \setlength{\minimumbiblabelwidth}{\leftskip}
         \ABCIthebiblihook
         }
         \AfterTheBibliography{
           \ifthenelse{\lengthtest{\minimumbiblabelwidth=0pt}}
             {\setlength{\biblabelsep}{1.8ex}}
             {\setlength{\biblabelsep}{1ex}}
         }
     }
  }

\newcommand{\apudname}{apud}
\newcommand{\Idemname}{Id.}
\newcommand{\Ibidemname}{Ibid.}
\newcommand{\opcitname}{op.\ cit.}
\newcommand{\passimname}{passim}
\newcommand{\loccitname}{loc.\ cit.}
\newcommand{\cfcitename}{Cf.}
\newcommand{\etseqname}{et seq.}

\DeclareRobustCommand{\footciteref}[1]{%
\footnote{\citetext{#1}}
}

\newcommand{\apud}[3][]{(\citeauthor{#2}, \citeyear{#2} \apudname\ %
\citeauthor{#3}, \citeyear{#3}%
\ifthenelse{\equal{#1}{\empty}}{}{, #1})}

\newcommand{\apudonline}[3][]{\citeauthoronline{#2} (\citeyear{#2} \apudname\ %
\citeauthor{#3}, \citeyear{#3}%
\ifthenelse{\equal{#1}{\empty}}{}{, #1})}

\newcommand{\Idem}[2][]{\Idemname, \citeyear{#2}%
\ifthenelse{\equal{#1}{\empty}}{}{, #1}}

\newcommand{\Ibidem}[2][]{\Ibidemname%
\ifthenelse{\equal{#1}{\empty}}{}{, #1}}

\newcommand{\opcit}[2][]{\citeauthor{#2}, \opcitname%
\ifthenelse{\equal{#1}{\empty}}{}{, #1}}

\newcommand{\passim}[2][]{\citeauthor{#2}, \citeyear{#2}%
\ifthenelse{\equal{#1}{\empty}}{}{, #1}, \passimname}

\newcommand{\loccit}[2][]{\citeauthor{#2}, \citeyear{#2}%
\ifthenelse{\equal{#1}{\empty}}{}{, #1}, \loccitname}

\newcommand{\cfcite}[2][]{\cfcitename\ \citeauthor{#2}, \citeyear{#2}%
\ifthenelse{\equal{#1}{\empty}}{}{, #1}}

\newcommand{\etseq}[2][]{\citeauthor{#2}, \citeyear{#2}%
\ifthenelse{\equal{#1}{\empty}}{}{, #1}, \etseqname}

\ifthenelse{\equal{\AbntCitetype}{num}}%
{\renewcommand{\citeauthor}[1]{\citeauthoronline{#1}\cite{#1}}}{}

\endinput