Как редактировать `plainnat.bst`, избегая сортировки по ключу

Как редактировать `plainnat.bst`, избегая сортировки по ключу

Я использую natbibpackage и plainnatstyle для своих цитат и ссылок. К сожалению, когда я цитирую разные статьи одного автора, но разных соавторов, библиография сортируется по ключу.

Например:

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

Ключ для Ho, Meyn — Ho2006, для Ho, Lambling — Ho2011, а для Ho, Dreyfus — Ho2012. Конечно, LaTeX учитывает ключи перед фамилией второго автора.

Как мне это решить???

решение1

Как упоминалось в комментариях выше к вашему исходному посту, MWE необходим для того, чтобы другие могли понять, чего вы пытаетесь достичь и как вы пытаетесь этого достичь. Без этого я не могу быть уверен, что отвечаю на ваш вопрос, но я все равно предоставлю здесь некоторую информацию, которая может оказаться вам полезной.

Записи на вашем снимке экрана, похоже, относятся к articleтипу. Если это правда, то natbibс plainnatотсортирует эти статьи следующим образом. Примечание: я использую версию 2007 года plainnat.bst, которая является последней на момент публикации в 2022 году.

  1. Функция presort(начиная со строки №1313) применяет author.sortправило (в строке №1326).

  2. Функция author.sort(начиная со строки #1248) сначала проверяет, authorявляется ли поле пустым. Поскольку ваши поля не пусты, функция передает ваше authorполе в sort.format.namesфункцию.

  3. Я вставил копию функции 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файл для решения проблемы сортировки без указания автора.

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