62.6 natbib.sty

<..natbib.4ht..>
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 % natbib.4ht                            2014-07-12-22:36 %
 % Copyright (C) 1999--2009       Eitan M. Gurari         %
 <.TeX4ht copyright.>
 
 \HRestore\@lbibitem
 \HRestore\@bibitem
 \ifNAT@super
    <.natbib htcitet.>
    <.natbib numbers.>
 \else
   \def\hyper@natlinkstart#1{%
     \let\rel:hyper=\def  \hyper@linkstart{cite}{X#1}%
     \def\hyper@nat@current{#1}%
   }
   \def\hyper@natlinkbreak#1#2{%
     \hyper@linkend#1\let\rel:hyper=\def \hyper@linkstart{cite}{X#2}%
   }
   \def\hyper@natlinkend{\hyper@linkend}
   <.hyperref for natbib.>
   <.natbib protect edef mbox.>
 \fi
 \Hinput{natbib}
 \endinput
 -_-_-

The following protection is needed for

\documentclass{article} 
   \usepackage[sort&compress]{natbib} 
\begin{document} 
 
Single citations are fine \cite{foo}, 
double citations are not \cite{bar,foo}. 
 
\begin{thebibliography}{99} 
\bibitem[1]{foo} foofoo 
\bibitem[2]{bar} barbar 
\end{thebibliography} 
\end{document} 

when compiled with oolatex.

<..natbib protect edef mbox..>
 \pend:defIII\NAT@cite{\let\mbox\o:mbox:}
 \pend:defIII\NAT@citenum{\let\mbox\o:mbox:}
 -_-_-

The following failed on

\documentclass{article} 
 
  \usepackage 
      [numbers,sort&compress]% 
      {natbib} 
 
\begin{document} 
 
\section{Introduction} \label{sec:Introduction} 
 
\cite{Arantes2003b}. Here 
 
Section \ref{sec:Algorithms} presents 
 
\end{document} 
 
 \let\o:NAT@citexnum:\NAT@citexnum
 \def\NAT@citexnum[#1][#2]#3{%
    \let\sv:mbox\mbox
    \let\mbox\o:mbox:
    \o:NAT@citexnum:[#1][#2]{#3}%
    \let\mbox\sv:mbox
 } -_-_-

<..hyperref for natbib..>
 \expandafter\ifx \csname hyper@linkstart\endcsname\relax
    \def\hyper@linkstart#1#2{%
      \def\:temp{#1}%
      \ifx\:temp\@urltype
        \Link[#2]{}{}%
      \else
        \ifx\rel:hyper\def\Link{#2}{}\else\Link[\##2]{}{}\fi
      \fi  \global\let\rel:hyper=\:UnDef
    }
    \def\hyper@linkend{\EndLink}
 \fi
 \long\def\:temp#1{}\ifx \:temp\hyper@natanchorstart
    \def\hyper@natanchorstart#1{\Link{}{X#1}\EndLink}
 \fi
 -_-_-

This modification is needed since Stefan <[email protected]> vide bug # 178 reported that \citet didn’t work in combination with super option of natbib package.

<..natbib htcitet..>
 \def\citet{\@ifstar{\NAT@longnamestrue\ht@citet}%
           {\NAT@longnamesfalse\ht@citet}}
 -_-_-

<..natbib numbers..>
 \def\setb:anc#1{\let\sv:anc\AnchorLabel
    \def\bib:anc{\Link{}{bibitem\the
       \c@NAT@ctr}\EndLink \gdef\bib:anc{}}%
    \def\AnchorLabel{\bib:anc}}
 \def\nb:link#1{\Protect\Link{bibitem#1}{}#1\Protect\EndLink}
 \def\nb@link#1{\Protect\Link{bibitem#1}{}#1\Protect\EndLink}
 -_-_-

<..natbib numbers..>+
 \let\nat:lbibitem\@lbibitem
 \def\@lbibitem{%
   \ifx\hyper@natanchorstart\@gobble
      \def\hyper@natanchorstart##1{\Link{}{bibitem\the
       \c@NAT@ctr}\EndLink}\fi
   \nat:lbibitem
 }
 -_-_-

<..natbib numbers..>+
 \catcode‘\:=12
   \def\ht@citet#1{\def\NAT@num{-1}\let\NAT@last@yr\relax\let\NAT@nm\@empty
      \let\@citea\@empty
      \@for\@citeb:=#1\do{%
       \@ifundefined{b@\@citeb\@extra@b@citeb}%
        {{\reset@font\bfseries?}\NAT@citeundefined\PackageWarning{natbib}%
          {Citation ‘\@citeb’ on page \thepage \space undefined}%
        }%
        {\@citea\let\NAT@last@num\NAT@num\let\NAT@last@nm\NAT@nm
         \NAT@parse{\@citeb}%
         \ifNAT@longnames\@ifundefined{bv@\@citeb\@extra@b@citeb}{%
           \let\NAT@name=\NAT@all@names
           \global\@namedef{bv@\@citeb\@extra@b@citeb}{}}{}%
         \fi
         \ifNAT@full\let\NAT@nm\NAT@all@names\else
          \let\NAT@nm\NAT@name
         \fi
         \NAT@nm}\Tg<sup>\nb@link{\NAT@num}\Tg</sup>
         \def\@citea{\unskip\NAT@sep\penalty\@m\space}%
        }%
 }
 \def\NAT@citexnum[#1][#2]#3{%
  \NAT@sort@cites{#3}%
  \let\@citea\@empty
   \@cite{\def\NAT@num{-1}\let\NAT@last@yr\relax\let\NAT@nm\@empty
     \@for\@citeb:=\NAT@cite@list\do
     {\edef\@citeb{\expandafter\@firstofone\@citeb}%
      \if@filesw\immediate\write\@auxout{\string\citation{\@citeb}}\fi
      \@ifundefined{b@\@citeb\@extra@b@citeb}{%
        {\reset@font\bfseries?}
         \NAT@citeundefined\PackageWarning{natbib}%
        {Citation ‘\@citeb’ on page \thepage \space undefined}}%
      {\let\NAT@last@num\NAT@num\let\NAT@last@nm\NAT@nm
       \NAT@parse{\@citeb}%
       \ifNAT@longnames\@ifundefined{bv@\@citeb\@extra@b@citeb}{%
         \let\NAT@name=\NAT@all@names
         \global\@namedef{bv@\@citeb\@extra@b@citeb}{}}{}%
       \fi
       \ifNAT@full\let\NAT@nm\NAT@all@names\else
         \let\NAT@nm\NAT@name\fi
       \ifNAT@swa
        \ifnum\NAT@ctype=2\relax\@citea
         \hyper@natlinkstart{\@citeb\@extra@b@citeb}%
             \NAT@test{2}\hyper@natlinkend\else
        \ifnum\NAT@sort>1
          \begingroup\catcode‘\_=8
             \ifcat _\ifnum\z@<0\NAT@num _\else A\fi
               \global\let\NAT@nm=\NAT@num \else \gdef\NAT@nm{-2}\fi
             \ifcat _\ifnum\z@<0\NAT@last@num _\else A\fi
               \global\@tempcnta=\NAT@last@num
               \global\advance\@tempcnta by\@ne
             \else \global\@tempcnta\m@ne\fi
          \endgroup
          \ifnum\NAT@nm=\@tempcnta
            \ifx\NAT@last@yr\relax
              \edef\NAT@last@yr{\@citea
                 \csname o:mbox:\endcsname{<.nb link.>\NAT@num}}%
            \else
              \edef\NAT@last@yr{--\penalty
                 \@m\csname o:mbox:\endcsname{<.nb link.>\NAT@num}}%
            \fi
          \else
            \NAT@last@yr \@citea \csname o:mbox:\endcsname{<.nb link.>\NAT@num}%
            \let\NAT@last@yr\relax
          \fi
        \else
          \@citea \csname o:mbox:\endcsname
                {\ifx\hyper@natanchorstart\@gobble
                     \Link{bibitem\NAT@num}{}\NAT@num
                     \EndLink
                 \else
                     \hyper@natlinkstart{\@citeb\@extra@b@citeb}\NAT@num
                     \hyper@natlinkend
                 \fi
                }%
        \fi
        \fi
        \def\@citea{\NAT@sep\penalty\@m\NAT@space}%
       \else
         \ifcase\NAT@ctype\relax
           \ifx\NAT@last@nm\NAT@nm \NAT@yrsep\penalty\@m\NAT@space\else
           \@citea \NAT@test{1}\ \NAT@@open
           \if\relax#1\relax\else#1\ \fi\fi \NAT@mbox{%
           \hyper@natlinkstart{\@citeb\@extra@b@citeb}%
           \NAT@num\hyper@natlinkend}%
           \def\@citea{\NAT@@close\NAT@sep\penalty\@m\ }%
         \or\@citea
           \hyper@natlinkstart{\@citeb\@extra@b@citeb}%
            \NAT@test{1}\hyper@natlinkend
           \def\@citea{\NAT@sep\penalty\@m\ }%
         \or\@citea
           \hyper@natlinkstart{\@citeb\@extra@b@citeb}\NAT@test{2}%
            \hyper@natlinkend
           \def\@citea{\NAT@sep\penalty\@m\ }%
         \fi
       \fi
       }}%
       \ifnum\NAT@sort>1\NAT@last@yr\fi
       \ifNAT@swa\else\ifnum\NAT@ctype=0\if\relax#2\relax\else
       \NAT@cmt\ #2\fi \NAT@@close\fi\fi}{#1}{#2}}
  \let\@citex=\NAT@citexnum
 \catcode‘\:=11
 -_-_-

<..nb link..>
 \csname nb:link\endcsname
 -_-_-