어떤 사람은 몇 권의 책을 썼지만 중간 이름을 포함하거나 축약하는 데 있어서 책마다 일관성이 없습니다. 본문에서 이 저자를 인용할 때 나는 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}