키별 정렬을 피하고 `plainnat.bst`를 편집하는 방법

키별 정렬을 피하고 `plainnat.bst`를 편집하는 방법

인용 및 참조에 natbib패키지와 스타일을 사용하고 있습니다 . plainnat불행하게도 같은 저자이지만 다른 공동 저자의 다른 논문을 인용하면 참고문헌이 키순으로 정렬됩니다.

예를 들어:

여기에 이미지 설명을 입력하세요

Ho의 경우 Meyn 키는 Ho2006이고 Ho의 경우 Lambling은 Ho2011이며 Ho의 경우 Dreyfus는 입니다 Ho2012. 확실히 LaTeX는 두 번째 저자 성 앞에 키를 고려하고 있습니다.

어떻게 해결할 수 있나요???

답변1

원본 게시물의 위 댓글에서 언급했듯이 MWE는 다른 사람들이 귀하가 달성하려는 목표와 이를 달성하려는 방법을 파악하는 데 필요합니다. 그렇지 않으면 귀하의 질문에 답변을 드릴 수 있을지 확신할 수 없지만 귀하에게 도움이 될 만한 몇 가지 정보를 여기에 제공하겠습니다.

스크린샷의 항목은 다음 유형으로 나타납니다 article. 이것이 사실이라면 다음 natbibplainnat같이 기사를 정렬합니다. 참고: 저는 plainnat.bst이 게시물의 2022년 최신 버전인 2007 버전을 사용하고 있습니다 .

  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작동하는 필드를 참조하는 함수를 볼 수 있습니다 .

    ㅏ. 첫 번째 저자를 기준으로 정렬한 후 AND

    비. "다른 사람" 외에 갈 작가가 더 많고

    씨. 총 저자가 2명 이상이며 AND

    디. 함수는 두 번째 작성자에게 있습니다(두 번째로 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작성자 없는 정렬을 처리하기 위해 파일을 사용자 정의하는 방법을 설명합니다 .

관련 정보