1

I currently use babelbib with the alphadin style for my bibliography for my Bachelor thesis. Now I have to deal with a resource which has four authors and is an @incollection of a book having eight editors (publishers).

When I have a resource with more than three authors/editors, my thesis tutor wants me to mention the first three authors/editors only and append an et al. afterwards. I know that this is possible using biblatex but I'm using babelbib. I haven't found any setting or workaround to do this and the documentary doesn't help in any way. Is there any way to do this? I also checked the alphadin.bst style for doing this but there is no variable for the maximal amount of authors and editors neither.

If it is not possible: I use Citavi as my literature organizing software. Is there any way to archive that only three authors will be exported, followed by and others which LaTeX will replace by et al.? I haven't found an option for this, too. I would favourize it to do this in latex.

Edit: This is the part where I include the bibliography package:

\usepackage[fixlanguage]{babelbib}
\selectbiblanguage{ngerman}
\addto\captionsngerman{\renewcommand{\refname}{Literatur- und Quellenverzeichnis}}
\bibliographystyle{alphadin} 
1
  • I had the problem that I wasn't able to display the whole bibliography in German. There were always some English fragments in the bibliography, for example p. for page. I also had the problem that ISSNs and DOIs didn't show up at all for some document types such as @misc.
    – Drudge
    Commented Oct 20, 2015 at 20:56

1 Answer 1

1

Since I really have to use babelbib and have not a choice using another bibliography and there is no option by babelbib itself to define the maximum amount of authors, I decided to have a look how I may modify the alphadin.bst file.

I introduced two new variables:

INTEGERS { et.al.char.used.names et.al.char.used.names.stop }

where the first one counts the amount of authors of a given source and the second one indicates, whether an et al. was written yet or not.

One has to edit the function format.names for having only three names:

FUNCTION {format.names}
{ #0 'et.al.char.used.names :=
  #0 'et.al.char.used.names.stop := 
  's :=
  "" 'u  :=
  #1 'nameptr :=
  s num.names$ 'numnames :=
  numnames 'namesleft :=
    { namesleft #0 > }
    {
       s nameptr "{ll}" format.name$ 't :=
       t capitalize 't :=
       s nameptr "{ jj}" format.name$ 'w :=
       s nameptr "{, ff}{ vv}{ jj}" format.name$ 'u :=
       u  text.length$  'lang :=
       #1 'zahl :=
       "" 'v :=
         {  zahl  lang  <  }
         {  u  zahl  #1  substring$  "~"  =
               {  v  ""  =
                     {  u  #1  zahl  #1  -  substring$  'v :=  }
                     'skip$
                  if$
                  v  u  zahl  #2  substring$ * "." *  w * 'v :=
                }
               'skip$
            if$
            zahl  #1  +  'zahl :=  }
      while$
      v  ""  =
         {  u  'v :=  }
         'skip$
      if$
      t  v  *  fkt  *  't :=
      nameptr #1 >
         {

         et.al.char.used.names #1 + 'et.al.char.used.names :=   

         namesleft #1 >
             { 

                et.al.char.used.names #2 >
                    { 
                        et.al.char.used.names.stop #1 =
                        {}
                        {
                            ua.etal *
                            #1 'et.al.char.used.names.stop :=
                        }
                        if$
                    }
                    { "; " * t * }
                if$
             }
           % { "; " * t * }
             { numnames #2 >
                  { "" * }
                  'skip$
               if$

               et.al.char.used.names.stop #1 =
                {}
                {
                   t "\textsc{others}" = t "\textsc{others} (Hrsg.)" =  or
                      { ua.etal * }
                      { 
                        et.al.char.used.names #2 >
                            { ua.etal * }
                            { "; " * t * }
                        if$
                      } 
                   if$
                }
                if$
               }
            if$  %% Ende der namesleft-Pruefung
          }
            't
           if$  %%  Ende der nameptr-Pruefung

      nameptr #1 + 'nameptr :=
      namesleft #1 -  'namesleft :=
    }
  while$  %%  Ende von { namesleft #0 > } ganz oben
  "" 'fkt :=  %% fkt wird zurueckgesetzt
  #0 'et.al.char.used.names :=  %%% MODIFIZIERT 
  #0 'et.al.char.used.names.stop :=  %%% MODIFIZIERT 
}

and the function format.lab.names for the tokens (e.g. [ABC12]) to display only the initials of three authors instead of 5 before adding a +:

FUNCTION {format.lab.names}
{ 's :=
  s num.names$ 'numnames :=
  numnames #1 >
    { numnames #3 >                     %% MODIFIZIERT war 4
        { #3 'namesleft := }
        { numnames 'namesleft := }
      if$
      #1 'nameptr :=
      ""
        { namesleft #0 > }
        { nameptr numnames =
            { s nameptr "{ff }{vv }{ll}{ jj}" format.name$ "others" =
%%                { "\," *  %% kein besonderes Zeichen fuer "others" i. label
                { "{\etalchar{+}}" *   %% ein plus-Zeichen (+) fuer "others"!
                  #1 'et.al.char.used :=
                }
                { s nameptr "{l{}}" format.name$ * }
              if$
            }
            { s nameptr "{l{}}" format.name$ * }
          if$
          nameptr #1 + 'nameptr :=
          namesleft #1 - 'namesleft :=
        }
      while$
      numnames #3 >                     %% MODIFIZIERT war 4
%%        { "\," *  %%  s. Bemerkung oben
        { "{\etalchar{+}}" *
          #1 'et.al.char.used :=
        }
        'skip$
      if$
    }
    { s #1 "{l{}}" format.name$
      duplicate$ text.length$ #2 <
        { pop$ s #1 "{ll}" format.name$ #3 text.prefix$ } %%  vgl. Anmerkung!
        'skip$
      if$
    }
  if$
}

Maybe this helps someone if needed.

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .