три автора, за которыми в списке литературы BibTeX следует «et al»

три автора, за которыми в списке литературы BibTeX следует «et al»

Я нашел этот ответ на очень похожий вопрос:BibTeX: Как сократить длинные списки авторов до «Firstauthor et al.»?

Однако предложенное решение не сработало для меня. У меня есть стиль, предоставленный издателем, который в то же время объясняет, что авторы ссылок должны быть сокращены после третьего автора (за которым следует et al)

в файле я нашел { namesleft #1 >и изменил его, как указано в том ответе, но это не сработало. Можете ли вы мне помочь?

{ 'bibinfo :=
 duplicate$ empty$ 'skip$ {
 's :=
 "" 't :=
 #1 'nameptr :=
 s num.names$ 'numnames :=
 numnames 'namesleft :=
   { namesleft #0 > }
   { s nameptr
     "{vv~}{ll}{ f{}}{ jj}"
     format.name$
     remove.dots
     bibinfo bibinfo.check
     't :=
     nameptr #1 >
      % {
       %  namesleft #1 >
nameptr #1 >
        {
         nameptr #3
         #1 + =
         numnames #5
         > and
           { "others" 't :=
             #1 'namesleft := }
           'skip$
         if$
         namesleft #1 >
           { ", " * t * }
           {
             "," *
             s nameptr "{ll}" format.name$ duplicate$ "others" =
               { 't := }
               { pop$ }
             if$
             t "others" =
               {
                 " " * bbl.etal *
               }
               { " " * t * }
             if$
           }
         if$
       }
       't
     if$
     nameptr #1 + 'nameptr :=
     namesleft #1 - 'namesleft :=
   }
 while$
 } if$
} ```

решение1

Автор комментария указал, что он/она использует spbasicстиль библиографии, предоставленный Springer.

Чтобы добиться желаемого форматирования — показать имена всех авторов, если запись имеетмаксимум 4авторов, но показывать только первых трех авторов, за которыми следует «et al.», если запись имеетбольше 4авторы, я предлагаю вам поступить следующим образом.

  • Сделайте копию spbasic.bstи назовите ее, например, spbasic85.bst.

  • Откройте файл spbasic85.bstв текстовом редакторе. Программа, которую вы используете для редактирования tex-файлов, подойдет.

  • Найдите функцию format.names. (В моей копии файла bst функция начинается на строке 455.)

  • В этой функции найдите следующие 2 строки:

          nameptr #1 >
            {
    
  • Сразу после этих двух строк и, следовательно, перед строкой, в которой написано namesleft #1 >, вставьте следующие 8 строк кода:

              nameptr #3
              #1 + =
              numnames #4
              > and
                { "others" 't :=
                  #1 'namesleft := }
                'skip$
              if$
    
  • Сохраните файл spbasic85.bstлибо в папке, содержащей основной файл tex, либо в папке, которую ищет BibTeX. Если вы выберете последний вариант, обязательно примените соответствующее обновление к базе данных имен файлов вашего дистрибутива TeX. (Если вы не уверены, что понимаете предыдущее предложение, я настоятельно рекомендую вам выбрать вариант 1...)

  • В вашем основном tex-файле измените его \bibliographystyle{spbasic}на \bibliographystyle{spbasic85}и выполните полный цикл перекомпиляции — LaTeX, BibTeX и еще дважды LaTeX — чтобы все изменения вступили в силу.


Полная версия MWE:

введите описание изображения здесь

\documentclass{article}
\begin{filecontents}[overwrite]{mybib.bib}
  @misc{abc,author="A and B and C",title="X",year=3000}
  @misc{abcd,author="A and B and C and D",title="Y",year=3001}
  @misc{abcde,author="A and B and C and D and E",title="Z",year=3002}
\end{filecontents}

\usepackage[authoryear]{natbib}
\bibliographystyle{spbasic85}

\begin{document}
\cite{abc}, \cite{abcd}, \cite{abcde}
\bibliography{mybib}
\end{document}

Связанный контент