Un tipo ha escrito algunos libros, pero es inconsistente de un libro a otro cuando se trata de incluir y/o abreviar su segundo nombre. Cuando cito a este autor en el texto, me gustaría biblatex
tratar todas las versiones diferentes de su nombre como si fueran el mismo autor. Puedo aplicar esto para la clasificación de la bibliografía con sortname
, pero ¿qué hago para aplicar esto a las citas de texto?
El siguiente ejemplo ilustra cómo la cita del texto trata a "Paul J[ohn] Smith" como un autor diferente de "Paul John Smith" y "Paul Smith". La primera cita debería aparecer como (Smith 2002) y la segunda cita debería aparecer como (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}
Respuesta1
Ahora hay una macro interfaz biblatex para la función de mapeo de origen, puedes poner esto en tu preámbulo:
\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}]
}
}
}
Es posible que desees ajustar la expresión regular. La hice bastante específica para no captar nada que no debería.
Respuesta2
Esto es sólo para mostrar cómo la solución anterior de PLK funciona en la práctica:
\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}