キーによるソートを避けて `plainnat.bst` を編集する方法

キーによるソートを避けて `plainnat.bst` を編集する方法

私は引用と参考文献にnatbibパッケージとplainnatスタイルを使用しています。残念ながら、同じ著者だが共著者が異なる異なる論文を引用する場合、参考文献はキーによってソートされます。

例えば:

ここに画像の説明を入力してください

Ho, Meyn のキーはHo2006、Ho, Lambling のキーはHo2011、Ho, Dreyfus のキーは ですHo2012。確かに LaTeX は 2 番目の著者の姓の前のキーを考慮しています。

どうすれば解決できますか?

答え1

元の投稿の上のコメントで述べたように、MWE は、他の人があなたが何を達成しようとしているのか、どのように達成しようとしているのかを理解する上で必要です。それがなければ、あなたの質問に答えているかどうか確信が持てませんが、それでも役立つと思われる情報をここでいくつか提供します。

スクリーンショットのエントリは タイプのようですarticle。これが当てはまる場合、natbibplainnatこれらの記事を次のように並べ替えます。注: 私は の 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. 第一著者でソートした後、

    b. 「その他」以外にも著者がおり、

    c. 著者は合計2名以上であり、

    d. 関数は2番目の著者にあります(whileループの2回目)

    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著者なしのソートに対応するためにファイルをカスタマイズする方法を説明します。

関連情報