Как в Bibtex убедиться, что в аббревиатуре цитирования есть буквы для всех авторов?

Как в Bibtex убедиться, что в аббревиатуре цитирования есть буквы для всех авторов?

Мой вопрос прост: это эквивалентноэтот вопрос я задал некоторое время назад, но теперь я должен использовать bibtex, а не biblatex, в основном для того, чтобы иметь возможность легко размещать свои файлы на arXiv и иметь меньше трудностей при предоставлении своих tex-файлов другим людям. Точнее, я хочу, чтобы ссылки в стиле bibtex alpha отображали полный список авторов. Это не проблема, если список авторов для конкретной публикации содержит меньше или равно 4 авторам. Однако, если список авторов содержит более 3 авторов, то ссылка усекается до фамилии первых трех авторов и знака "+".

Рассмотрим пример:

\documentclass[11pt]{article}
\usepackage{cite}

\begin{document} A citation \cite{cita}.

\bibliography{trial2}{} \bibliographystyle{alpha} \end{document}

где trial2.bib — это файл .bib


@article {cita,
    AUTHOR = {Add, Abel and Bc, Bobby and Ca, Carla and De, Daniela and Edd, Emilio},
    TITLE = {Article},
    JOURNAL = {Some},
    FJOURNAL = {Any},
    VOLUME = {1},
    YEAR = {2018},
    NUMBER = {1},
    PAGES = {1--10},
}

Вывод содержит цитату "[ABC+18]". Я бы хотел, чтобы цитата была "[ABCDE18]". Любая помощь будет высоко оценена.

Если это вообще имеет значение, я работаю над TeXStudio на Windows 10, используя MikTeX.

решение1

Процедура генерации этих меток закодирована в файле .bst. alpha.bstне имеет возможности вручную переопределить метку, которую он создает, поэтому единственный способ изменить это, не меняя других вещей, — это изменить файл . Это затем сделает совместную работу более обременительной, поскольку вам также .bstпридется распространять свой измененный файл..bst

В любом случае, вы можете изменить alpha.bstследующим образом

  1. Найдите alpha.bstна своем компьютере (можно использовать kpsewhich alpha.bstиз командной строки, чтобы узнать, где находится файл), или получите файл из CTAN:http://mirrors.ctan.org/biblio/bibtex/base/alpha.bst

  2. Скопируйте alpha.bstв место, где LaTeX сможет его найти (https://texfaq.org/FAQ-inst-wlcf, каталог документов тоже подойдет) ипереименоватьэто, скажем, alpha-maxalphanames.bst. Обратите внимание, что лицензиятребуетвы переименовываете файл, если впоследствии собираетесь его распространять.

  3. Откройте переименованный файл alpha-maxalphanames.bstи замените блок кода.

    FUNCTION {format.lab.names}
    { 's :=
      s num.names$ 'numnames :=
      numnames #1 >
        { numnames #4 >
            { #3 'namesleft := }
            { numnames 'namesleft := }
          if$
          #1 'nameptr :=
          ""
            { namesleft #0 > }
            { nameptr numnames =
                { s nameptr "{ff }{vv }{ll}{ jj}" format.name$ "others" =
                    { "{\etalchar{+}}" *
                      #1 'et.al.char.used :=
                    }
                    { s nameptr "{v{}}{l{}}" format.name$ * }
                  if$
                }
                { s nameptr "{v{}}{l{}}" format.name$ * }
              if$
              nameptr #1 + 'nameptr :=
              namesleft #1 - 'namesleft :=
            }
          while$
          numnames #4 >
            { "{\etalchar{+}}" *
              #1 'et.al.char.used :=
            }
            'skip$
          if$
        }
        { s #1 "{v{}}{l{}}" format.name$
          duplicate$ text.length$ #2 <
            { pop$ s #1 "{ll}" format.name$ #3 text.prefix$ }
            'skip$
          if$
        }
      if$
    }
    

    с

    FUNCTION {format.lab.names}
    { 's :=
      s num.names$ 'numnames :=
      numnames #1 >
        { numnames 'namesleft :=
          #1 'nameptr :=
          ""
            { namesleft #0 > }
            { nameptr numnames =
                { s nameptr "{ff }{vv }{ll}{ jj}" format.name$ "others" =
                    { "{\etalchar{+}}" *
                      #1 'et.al.char.used :=
                    }
                    { s nameptr "{v{}}{l{}}" format.name$ * }
                  if$
                }
                { s nameptr "{v{}}{l{}}" format.name$ * }
              if$
              nameptr #1 + 'nameptr :=
              namesleft #1 - 'namesleft :=
            }
          while$
        }
        { s #1 "{v{}}{l{}}" format.name$
          duplicate$ text.length$ #2 <
            { pop$ s #1 "{ll}" format.name$ #3 text.prefix$ }
            'skip$
          if$
        }
      if$
    }
    

    В частности, замените первый numnames #4 > {<true>} {<false>} if$блок только содержимым ветки <false>и полностью удалите второй numnames #4 > {<true>} {<false>} if$ блок.

  4. Добавьте в начало файла короткую заметку об изменениях с указанием вашего имени и текущей даты.

  5. Сохраните файл.

  6. Используйте \bibliographystyle{alpha-maxalphanames}вместо \bibliographystyle{alpha}в вашем документе.

Вы можете приготовить его в духовке.alpha-maxalphanames изhttps://gist.github.com/moewew/d802ea87f432f97fc428dbc9d54e64c1, diffто alpha.bstесть

--- alpha.bst   2019-12-21 08:15:40.781232500 +0100
+++ alpha-maxalphanames.bst 2019-12-21 08:19:48.505159500 +0100
@@ -1,3 +1,14 @@
+%% alpha-maxalphanames.bst
+%% 2019-12-21 MW
+%% https://tex.stackexchange.com/q/521246/35864
+%% modification of alpha.bst
+%%
+%% small change to format.lab.names:
+%% always set numnames 'namesleft :=
+%% remove both numnames #4 > tests
+%%
+%% original copyright header follows
+%%
 % BibTeX standard bibliography style `alpha'
    % Version 0.99b (8-Dec-10 release) for BibTeX versions 0.99a or later.
    % Copyright (C) 1984, 1985, 1988, 2010 Howard Trickey and Oren Patashnik.
@@ -935,10 +946,7 @@
 { 's :=
   s num.names$ 'numnames :=
   numnames #1 >
-    { numnames #4 >
-        { #3 'namesleft := }
-        { numnames 'namesleft := }
-      if$
+    { numnames 'namesleft :=
       #1 'nameptr :=
       ""
         { namesleft #0 > }
@@ -956,12 +964,6 @@
           namesleft #1 - 'namesleft :=
         }
       while$
-      numnames #4 >
-        { "{\etalchar{+}}" *
-          #1 'et.al.char.used :=
-        }
-        'skip$
-      if$
     }
     { s #1 "{v{}}{l{}}" format.name$
       duplicate$ text.length$ #2 <

При этом следующая MWE

\documentclass[11pt]{article}
\usepackage{cite}

\begin{filecontents}{\jobname.bib}
@article {cita,
  AUTHOR   = {Add, Abel and Bc, Bobby and Ca, Carla and De, Daniela and Edd, Emilio},
  TITLE    = {Article},
  JOURNAL  = {Some},
  FJOURNAL = {Any},
  VOLUME   = {1},
  YEAR     = {2018},
  NUMBER   = {1},
  PAGES    = {1--10},
}
\end{filecontents}

\begin{document}
A citation \cite{cita}.


\bibliography{\jobname}
\bibliographystyle{alpha-maxalphanames}
\end{document}

производит

Цитата [ABCDE18].

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