如何編輯 `plainnat.bst` 避免按鍵排序

如何編輯 `plainnat.bst` 避免按鍵排序

我使用natbib包和plainnat样式來引用和參考。不幸的是,當我引用同一作者但不同合著者的不同論文時,參考書目是按鍵排序的。

例如:

在此輸入影像描述

Ho, Meyn 的關鍵是Ho2006,Ho, Lambling 的關鍵是Ho2011,Ho, Dreyfus 的關鍵是Ho2012。當然,LaTeX 正在考慮第二作者姓氏之前的鍵。

我該如何解決呢?

答案1

正如您原始帖子的上述評論中所提到的,MWE 對於其他人了解您想要實現的目標以及如何實現它是必要的。如果沒有這個,我無法確定我是否回答了您的問題,但我仍然會在這裡提供一些可能對您有用的信息。

您的螢幕截圖中的條目似乎屬於這種article類型。如果這是真的,那麼natbibwithplainnat將對這些文章進行如下排序。注意:我使用的是 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,該函數正在發揮作用:

    A。按第一作者排序後 AND

    b.除了“其他”之外還有更多作者可以去,並且

    C。總共有兩個以上的作者 AND

    d.該函數位於第二作者(第二次循環while

    e.然後,按年份排序。

請注意,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檔案以解決無作者排序問題。

相關內容