
답변1
원본 게시물의 위 댓글에서 언급했듯이 MWE는 다른 사람들이 귀하가 달성하려는 목표와 이를 달성하려는 방법을 파악하는 데 필요합니다. 그렇지 않으면 귀하의 질문에 답변을 드릴 수 있을지 확신할 수 없지만 귀하에게 도움이 될 만한 몇 가지 정보를 여기에 제공하겠습니다.
스크린샷의 항목은 다음 유형으로 나타납니다 article
. 이것이 사실이라면 다음 natbib
과 plainnat
같이 기사를 정렬합니다. 참고: 저는 plainnat.bst
이 게시물의 2022년 최신 버전인 2007 버전을 사용하고 있습니다 .
함수
presort
(라인 #1313에서 시작)는author.sort
규칙(라인 #1326)을 적용합니다.함수
author.sort
(라인 #1248에서 시작)는 먼저 필드가author
비어 있는지 테스트합니다. 귀하의 필드가 아니므로 함수는 귀하의author
필드를 함수에 전달합니다sort.format.names
.이 설명을 돕기 위해 아래에 함수 의 복사본
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
작성자 없는 정렬을 처리하기 위해 파일을 사용자 정의하는 방법을 설명합니다 .