Take the 2-minute tour ×
TeX - LaTeX Stack Exchange is a question and answer site for users of TeX, LaTeX, ConTeXt, and related typesetting systems. It's 100% free, no registration required.

I'd like BibTeX to print authors' names in the following fashion:

S. Bouabdallah, A. Noth, R. Siegwart

For that to happen, according to what I've read already, the .bib code should look like below:

@inproceedings{BouabdallahPID,
    author = {Bouabdallah, S. and Noth, A. and Siegwart, R.},
    keywords = {quad},
    location = {Sendai, Japan},
    pages = {2451--2456},
    title = {{PID vs LQ control techniques applied to an indoor micro quadrotor}},
    year = {2004}
}

Instead, BibTeX keeps including the "and" word before last author's name, i.e.:

S. Bouabdallah, A. Noth, and R. Siegwart

How do I get rid of the "and" word?

I've tried alpha, plain, ams and acm styles so far, which made no difference, hence assumed style doesn't change this behavior, but may be wrong on this one. I'd like to stay with plain, though.

share|improve this question
add comment

2 Answers

up vote 6 down vote accepted

If you're using the plain bibliography style, you could proceed as follows to get BibTeX to replace the " and " connector between the penultimate and ultimate author names with a simple comma:

  • Make a copy of the file plain.bst and name it, say, myplain.bst. Do not directly edit/modify an existing file that comes with a TeX distribution.

  • Open the file myplain.bst in your favorite text editor and search for the function format.names. (It starts on l. 185 in my system's copy of plain.bst.) In the code of this function, look for the following lines (likely lines 195-201):

        { numnames #2 >
            { "," * }
            'skip$
          if$
          t "others" =
            { " et~al." * }
            { " and " * t * }
    
  • Modify the first and last of these lines so that the lines of code look like this:

        { numnames #1 >
            { "," * }
            'skip$
          if$
          t "others" =
            { " et~al." * }
            { " " * t * }
    

    I.e., change #2 to #1 on the first line, and " and " to " " on the last line of this group. It's necessary to make both modifications to get the proper treatment regardless of the number of authors -- as long as the number is greater than 1, of course.

  • Save the file, update your TeX distribution's filename database as needed, and start invoking the new bibliography style with the command \bibliographystyle{myplain}.

Happy BibTeXing!

share|improve this answer
    
Thank you Mico. Unfortunately I don't know what exactly do you mean in the last point, how do I update my TeX distribution's filename database? –  mmm Nov 6 '12 at 17:25
    
I've done: Start > Programs > MiKTeX > Maintenance > Settings > General > Refresh FNDB (both as user and admin) and after the changes you described end up with empty bibliography. Apart of typing errors, what more could I have done wrong? –  mmm Nov 6 '12 at 18:09
    
@mmm: Where is the file myplain.bat stored? If it's not in one of the directories searched by TeX, updating the file name database (what you've done for your MikTeX system is perfect, BTW) won't do you much good. Incidentally, what error or warning messages do you get in the .blg file? –  Mico Nov 6 '12 at 18:14
    
OK, nevermind, I updated the database and generated my document and bibliography several times more and everything works now. Thank you a lot! –  mmm Nov 6 '12 at 19:10
add comment

When using jurabib, it works the following way:

\renewcommand*{\jbbtasep}{, } % bta = between two authors sep
\renewcommand*{\jbbfsasep}{, } % bfsa = between first and second author sep
\renewcommand*{\jbbstasep}{, }% bsta = between

I have yet to find out how it is done with plain, though.

EDIT:

I just read the plain styles documentation -- not the whole, obviously -- as to be found on CTAN. In lines 683-714 the function for the name formatting is described (as far as I understood it). It says:

format.names(s) ==
%  BEGIN
%       nameptr := 1
%       numnames := num.names$(s)
%       namesleft := numnames
%       while namesleft > 0
%         do
%                               % for full names:
%           t := format.name$(s, nameptr, "{ff~}{vv~}{ll}{, jj}")
%                               % for abbreviated first names:
%           t := format.name$(s, nameptr, "{f.~}{vv~}{ll}{, jj}")
%           if nameptr > 1 then
%               if namesleft > 1 then nameresult := nameresult * ", " * t
%               else if numnames > 2
%                      then nameresult := nameresult * ","
%                    fi
%                    if t = "others"
%                      then nameresult := nameresult * " et~al."
%                      else nameresult := nameresult * " and " * t
%                    fi
%               fi
%           else nameresult := t
%           fi
%           nameptr := nameptr + 1
%           namesleft := namesleft - 1
%         od
%       return nameresult
%  END

It seems like the else nameresult := nameresult * " and " * t would have to be transformed to else nameresult := nameresult * ", " * t in order to achieve what you want to achieve.

Therefore, you would probably have to create your own new style based on the plain style with just this part changed.

This Blogpost by “Dr. K-Lo” might also be helpful.

share|improve this answer
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.