
Я использую natbib
package и plainnat
style для своих цитат и ссылок. К сожалению, когда я цитирую разные статьи одного автора, но разных соавторов, библиография сортируется по ключу.
Например:
Ключ для Ho, Meyn — Ho2006
, для Ho, Lambling — Ho2011
, а для Ho, Dreyfus — Ho2012
. Конечно, LaTeX учитывает ключи перед фамилией второго автора.
Как мне это решить???
решение1
Как упоминалось в комментариях выше к вашему исходному посту, MWE необходим для того, чтобы другие могли понять, чего вы пытаетесь достичь и как вы пытаетесь этого достичь. Без этого я не могу быть уверен, что отвечаю на ваш вопрос, но я все равно предоставлю здесь некоторую информацию, которая может оказаться вам полезной.
Записи на вашем снимке экрана, похоже, относятся к article
типу. Если это правда, то natbib
с plainnat
отсортирует эти статьи следующим образом. Примечание: я использую версию 2007 года plainnat.bst
, которая является последней на момент публикации в 2022 году.
Функция
presort
(начиная со строки №1313) применяетauthor.sort
правило (в строке №1326).Функция
author.sort
(начиная со строки #1248) сначала проверяет,author
является ли поле пустым. Поскольку ваши поля не пусты, функция передает вашеauthor
поле вsort.format.names
функцию.Я вставил копию функции
sort.format.names
(начиная со строки #1207) ниже, чтобы помочь в этом объяснении. Из вашего примера выше, похоже, что ваши записи имеют 6, 4 или 7 авторов соответственно, рассматривая точки с запятой как разделители и точку для завершения блокаauthor
. Код здесь, похоже, работает так, как вы показали на своем снимке экрана, сортируя по первому автору, затем по году для каждой из ваших записей. Вы заметите функцию, ссылающуюся на полеyear
, которое вступает в игру:а. После сортировки по первому автору И
б. Есть еще авторы, которых можно выбрать, помимо «других» И
в) Всего авторов больше двух И
г. Функция относится ко второму автору (второй раз в
while
цикле)е. ЗАТЕМ отсортируйте по году.
Обратите внимание, что язык в файле BST реализует постфиксную нотацию.
FUNCTION {sort.format.names}
{ 's :=
#1 'nameptr :=
""
s num.names$ 'numnames :=
numnames 'namesleft :=
{ namesleft #0 > }
{
s nameptr "{vv{ } }{ll{ }}{ ff{ }}{ jj{ }}" format.name$ 't :=
nameptr #1 >
{
" " *
namesleft #1 = t "others" = and
{ "zzzzz" * }
{ numnames #2 > nameptr #2 = and
{ "zz" * year field.or.null * " " * }
'skip$
if$
t sortify *
}
if$
}
{ t sortify * }
if$
nameptr #1 + 'nameptr :=
namesleft #1 - 'namesleft :=
}
while$
}
Несмотря на это, есть ответ на сообщение TeX Stack Exchangeздесьописывающий, как настроить plainnat.bst
файл для решения проблемы сортировки без указания автора.