Biblatex가 텍스트 인용에서 서로 다른 저자 이름을 동일한 저자로 처리하도록 만듭니다.

Biblatex가 텍스트 인용에서 서로 다른 저자 이름을 동일한 저자로 처리하도록 만듭니다.

어떤 사람은 몇 권의 책을 썼지만 중간 이름을 포함하거나 축약하는 데 있어서 책마다 일관성이 없습니다. 본문에서 이 저자를 인용할 때 나는 biblatex그의 이름의 모든 다른 버전을 동일한 저자로 취급하고 싶습니다. 를 사용하여 참고문헌 정렬을 위해 이를 시행할 수 있지만 sortname, 텍스트 인용에 대해 이를 시행하려면 어떻게 해야 합니까?

다음 예는 텍스트 인용에서 "Paul J[ohn] Smith"를 "Paul John Smith" 및 "Paul Smith"와 다른 저자로 처리하는 방법을 보여줍니다. 첫 번째 인용은 (Smith 2002)로 표시되어야 하며, 두 번째 인용은 (2001a, 2001b, 2002)로 표시되어야 합니다.

\documentclass{article}
\usepackage{csquotes}
\usepackage[
        bibstyle = authoryear,
        citestyle = authoryear-comp,
        dashed = false,
        sorting = nyt,
        sortcites = false,
        language = american,
        abbreviate = false,
        backend = biber]{biblatex}
\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@BOOK{smith2001a,
    AUTHOR = "Paul John Smith",
    TITLE = "My first book",  
    YEAR = "2001"}

@BOOK{smith2001b,
    AUTHOR = "Paul Smith",
    TITLE = "My second book",  
    YEAR = "2001",
    SORTNAME = "Paul John Smith"}

@BOOK{smith2002,
    AUTHOR = "Paul J[ohn] Smith",
    TITLE = "My third book",  
    YEAR = "2002",
    SORTNAME = "Paul John Smith"}
\end{filecontents}
\addbibresource{\jobname.bib}
\begin{document}
\noindent
Some clever guy said that \parencite{smith2002}.
In fact, Paul Smith has talked about this several times \parencite*{smith2001a,smith2001b,smith2002}.
\printbibliography
\end{document}

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

답변1

이제 소스 매핑 기능에 대한 biblatex 매크로 인터페이스가 있습니다. 이를 프리앰블에 넣을 수 있습니다:

\DeclareSourcemap{
  \maps[datatype=bibtex]{
    \map[overwrite]{
       \step[fieldsource=author, match=\regexp{Paul\s+(?:J\S+\s+)?Smith}, final]
       \step[fieldset=shortauthor, fieldvalue={Smith, Paul John}]
       \step[fieldset=sortname, fieldvalue={Smith, Paul John}]
    }
  }
}

정규식을 조정하고 싶을 수도 있습니다. 저는 정규식을 매우 구체적으로 만들어서 그렇지 않은 항목을 포착하지 않도록 했습니다.

답변2

이는 위의 PLK 솔루션이 실제로 어떻게 트릭을 수행하는지 보여주기 위한 것입니다.

\documentclass{article}
\usepackage{csquotes}
\usepackage[
        bibstyle = authoryear,
        citestyle = authoryear-comp,
        dashed = false,
        sorting = nyt,
        sortcites = false,
        language = american,
        abbreviate = false,
        backend = biber]{biblatex}
\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@BOOK{smith2001a,
    AUTHOR = "Paul John Smith",
    TITLE = "My first book",  
    YEAR = "2001"}

@BOOK{smith2001b,
    AUTHOR = "Paul Smith",
    TITLE = "My second book",  
    YEAR = "2001",
    SORTNAME = "Paul John Smith"}

@BOOK{smith2002,
    AUTHOR = "Paul J[ohn] Smith",
    TITLE = "My third book",  
    YEAR = "2002",
    SORTNAME = "Paul John Smith"}
\end{filecontents}
\addbibresource{\jobname.bib}
\DeclareSourcemap{
  \maps[datatype=bibtex]{
    \map[overwrite]{
       \step[fieldsource=author, match=\regexp{Paul\s+(?:J\S+\s+)?Smith}, final]
       \step[fieldset=shortauthor, fieldvalue={Smith, Paul John}]
       \step[fieldset=sortname, fieldvalue={Smith, Paul John}]
    }
  }
}
\begin{document}
\noindent
Some clever guy said that \parencite{smith2002}.
In fact, Paul Smith has talked about this several times \parencite*{smith2001a,smith2001b,smith2002}.
\printbibliography
\end{document}

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

관련 정보