12

I'm using elsarticle and I would like to apply biblatex for my references but apparantly natbib.sty is loaded by default. In this case how can I use biblatex or how can I disable natbib?

%% natbib.sty is loaded by default. However, natbib options can be
%% provided with \biboptions{...} command. Following options are
%% valid:

%%   round  -  round parentheses are used (default)
%%   square -  square brackets are used   [option]
%%   curly  -  curly braces are used      {option}
%%   angle  -  angle brackets are used    <option>
%%   semicolon  -  multiple citations separated by semi-colon
%%   colon  - same as semicolon, an earlier confusion
%%   comma  -  separated by comma
%%   numbers-  selects numerical citations
%%   super  -  numerical citations as superscripts
%%   sort   -  sorts multiple citations according to order in ref. list
%%   sort&compress   -  like sort, but also compresses numerical citations
%%   compress - compresses without sorting
%%
%% \biboptions{comma,round}

% \biboptions{}

\usepackage[
backend=biber,
style=alphabetic,
citestyle=authoryear 
]{biblatex}

\addbibresource{references.bib}
\begin{document}
 bla bla bla 
\printbibliography
\end{document}

Messages/Log file: Command \bibhang already defined,

moewe
  • 175,683
DenFoz
  • 121

4 Answers4

9

According to the documentation of the last release of elsarticle, option nonatbib can be used. However,

\makeatletter
\let\c@author\relax
\makeatother

is needed according to this answer to get rid of the following error:

Command \c@author already defined. \abx@donames.

\documentclass[nonatbib]{elsarticle}

\makeatletter
\let\c@author\relax
\makeatother

\usepackage[backend=biber,hyperref=true,doi=false,url=false,isbn=false, uniquename=false, uniquelist=false ]{biblatex}

\usepackage{filecontents,hyperref}

\begin{filecontents*}{\jobname.bib}
@Article{Fornberg2008,
    author =    {Fornberg, Bengt and Piret, Cécile},
    title =     {On choosing a radial basis function and a shape parameter when solving a convective PDE on a sphere},
    journal =   {Journal of Computational Physics},
    year =      {2008},
    volume =    {227},
    number =    {5},
    pages =     {2758-2780},
    month =     {feb},
    doi =       {10.1016/j.jcp.2007.11.016},
    issn =      {0021-9991},
    publisher = {Elsevier {BV}},
    type =      {Journal Article},
    url =       {http://dx.doi.org/10.1016/j.jcp.2007.11.016}
}
\end{filecontents*}

\addbibresource{\jobname.bib}

\begin{document}

    Lorem ipsum~\cite{Fornberg2008}.

    \printbibliography

\end{document}

enter image description here

Diaa
  • 9,599
  • This works fine! Thank you! But is there also a way to accomplish this with the harvard template and citation style? – xyz Jul 22 '21 at 15:03
  • @xyz I think your question has an answer in the documentation of biblatex. – Diaa Jul 22 '21 at 15:42
  • @Diaa what do you mean by that? There is no harvard citation style in biblatex. I wondered, because biblatex can't use the cst file attached to the elsarticle template. – xyz Jul 28 '21 at 17:26
  • @xyz I have no idea. I just presumed. – Diaa Jul 28 '21 at 21:39
7

This solution must only be used for typesetting personal notes!


Do not submit your papers like this!


If you consider submitting your papers with this hack in place, please stop reading right now!


For academic use only


\RequirePackage{scrlfile}
\PreventPackageFromLoading[\typeout{Please don't do this for journal submission}]{natbib}
\documentclass{elsarticle}
\expandafter\let\csname c@author\endcsname=\relax
\usepackage[
    backend=biber,
    style=authoryear,
]{biblatex}
\addbibresource{biblatex-examples.bib}
\begin{document}
\cite{aristotle:physics}

\printbibliography
\end{document}
Johannes_B
  • 24,235
  • 10
  • 93
  • 248
  • This breaks with the ´3p´ or ´5p´ options to ´elsarticle´. Any suggestions? – flindeberg Nov 27 '17 at 20:19
  • 1
    @flindeberg Considering the warnings, i would recommend not to use stuff like that. – Johannes_B Nov 28 '17 at 04:13
  • 1
    I'm not questioning the stupidity of doing it, I'm asking how to do it. Anyhow I solved it, and will link when I'm at a computer again. – flindeberg Nov 28 '17 at 11:33
  • Hi @flindeberg, Could you give us a clue how you solved it? Since the logos do not found: elsevier-logo-0p, SDlogo-0p, I tried to put this name's file in my directory, but my title is not aligned. – Oromion Jun 21 '18 at 04:07
  • @Oromion Added an answer, hope it solves the issues. If not just comment on my answer! – flindeberg Jun 21 '18 at 09:42
6

This solution must only be used for typesetting personal notes!


Do not submit your papers like this!


If you consider submitting your papers with this hack in place, please stop reading right now!


Sometimes the macros defined by the journal documentclasses come in handy for typesetting personal notes. For such private documents however one also wants to exploit the convenience of modern package such as biblatex.

The elsarticle documentclass loads natbib internally which is a show stopper for biblatex. The natbib package is loaded with the line

\RequirePackage[\@biboptions]{natbib}

To this end, hacking into \RequirePackage and make it just skip over natbib would solve the problem at hand. I use the xparse package and the underlying expl3 programming layer to realise such a macro. The (re)definition of such a macro obviously has to be placed before \documentclass.

Furthermore, elsarticle defines a counter called author, which is never used by the class but required by biblatex. We simply undefine the counter by letting its underlying count variable to \relax.

\RequirePackage{xparse}

\ExplSyntaxOn

\clist_new:N \pkg_ignored_clist
\clist_put_right:Nn \pkg_ignored_clist { natbib }

\msg_new:nnn { pkg } { pkg-ignored } { Package~#1~ignored! }

\cs_set_eq:NN \latex_require_package:wnw \RequirePackage

\cs_new_protected:Npn \pkg_require_package:nnn #1#2#3
 {
  \IfValueTF { #1 }
   {
    \IfValueTF { #3 }
     { \latex_require_package:wnw [ #1 ] { #2 } [ #3 ] }
     { \latex_require_package:wnw [ #1 ] { #2 }        }
   }
   {
    \IfValueTF { #3 }
     { \latex_require_package:wnw { #2 } [ #3 ] }
     { \latex_require_package:wnw { #2 }        }
   }
 }

\RenewDocumentCommand \RequirePackage { o m o }
 {
  \clist_if_in:NnTF \pkg_ignored_clist { #2 }
   {
    \msg_warning:nnn { pkg } { pkg-ignored } { #2 }
   }
   {
    \pkg_require_package:nnn { #1 } { #2 } { #3 }
   }
 }

\ExplSyntaxOff

\documentclass{elsarticle}
\expandafter\let\csname c@author\endcsname=\relax
\usepackage[style=authoryear,natbib]{biblatex}
\addbibresource{biblatex-examples.bib}
\begin{document}
\Citet{weinberg}

\printbibliography
\end{document}

enter image description here

Henri Menke
  • 109,596
3

@Oromion asked how I solved it for 3p and 5p so putting an MWE here. Do note that this is not for publications, and I did it after a couple of students requested help since they had been asked to write an "Elsevier style paper" for a course.

\documentclass[5p]{elsarticle}

%% Fix so biblatex works instead of natbib
\makeatletter
\let\c@author\relax
\makeatother
\let\bibhang\relax
\let\citename\relax
\let\bibfont\relax
\let\Citeauthor\relax
\expandafter\let\csname ver@natbib.sty\endcsname\relax

%% Fix headers and footers
\makeatletter
\def\ps@pprintTitle{%
    \let\@oddhead\@empty
    \let\@evenhead\@empty
    \def\@oddfoot{}%
    \let\@evenfoot\@oddfoot}
\makeatother

%% Load some packages and stuff

%% Library and stuff
\usepackage[style=apa,sortcites=true,sorting=nyt,backend=biber]{biblatex}
%% biblatex with apa-style.
\DeclareLanguageMapping{american}{american-apa}
\bibliography{library}

%% Rest as usual....