Estoy usando biblatex-apa para definir el diseño de mi bibliografía. Ahora cito varios documentos (internos) de instituciones o sitios web de noticias, que ahora aparecen en el documento usando su abreviatura. Me gustaría que estas abreviaturas aparezcan en versalitas. En realidad, quiero que todas las instituciones abreviadas aparezcan en versalitas. es posible? Ahora divido mi bibliografía usando etiquetas (exportadas de Zotero), por lo que supongo que una etiqueta también podría permitir que la cita aparezca en versalitas en el texto. ¿Alguien sabe cómo hacer esto?
Mi MWE:
\documentclass[10pt,a4paper,twoside]{book}
\usepackage[american]{babel}
\usepackage{csquotes}
\usepackage[backend=biber, style=apa, date=year, natbib=true, sorting=nyt, sortcites=true]{biblatex}
\DeclareLanguageMapping{american}{american-apa}
\bibliography{Zotero}
\begin{document}
\chapter{Literature review}
This is some text with a double reference \cite{nos_weeralarm_2009, ns_volle_2013}.
\printbibliography[notkeyword=internal]
\printbibliography[title={Internal Documents}, keyword=internal]
\end{document}
Y el contenido de mi Zotero.bib:
@online{nos_weeralarm_2009,
title = {Weeralarm en verkeeralarm ingetrokken},
url = {http://nos.nl/l/124074},
titleaddon = {{NOS.nl}},
author = {{NOS}}, %THIS AUTHOR MUST BE PRINTED IN SC
urldate = {2014-02-12},
date = {2009-12-20},
keywords = {gladheid, ijs, ongeluk, openbaar vervoer, schiphol, sneeuw}
}
@report{ns_volle_2013,
location = {Utrecht},
title = {Internal document title}},
institution = {NS},
type = {Internal Document},
author = {{NS}}, % THIS AUTHOR MUST BE PRINTED IN SC
date = {2013},
keywords = {internal}
}
Respuesta1
Si todas sus citas que requieren una institución de pequeña capitalización tienen la misma etiqueta, entonces debería ser posible.
Sin embargo, en su MWE, las dos entradas no comparten un keyword
, por lo que agregué la palabra clave instauth
para verificar.
Lo que hacemos es muy simple: en cada comando de cita, y antes de cada entrada de bibliografía, verificamos si la entrada tiene la palabra clave instauth
, de ser así, el formato del apellido está configurado para producir acrónimos a través de biblatex
la \mkbibacro
macro (tenga en cuenta que para que esto funcione " [l]a sigla debe escribirse en letras mayúsculas.", p. 89, elbiblatex
documentación).
\AtEveryCitekey{%
\ifkeyword{instauth}
{\renewcommand*{\mkbibnamelast}[1]{\mkbibacro{#1}}}
{}%
}
\AtEveryBibitem{%
\ifkeyword{instauth}
{\renewcommand*{\mkbibnamelast}[1]{\mkbibacro{#1}}}
{}%
}
Una redefinición alternativa es la más corta
\renewcommand*{\mkbibnamelast}[1]{%
\ifkeyword{instauth}
{\mkbibacro{#1}}
{#1}}
donde esta el condicionaladentrola directiva de formato. Entonces no es necesario vincular el cambio a los grupos \ifkeyword
definidos, como era necesario anteriormente.
Incluso podemos hacer que la detección sea instauth
automática hasta cierto punto. Con
\DeclareSourcemap{
\maps[datatype=bibtex]{
\map[overwrite=true]{
\step[fieldsource=author, match=\regexp{^\{.+?\}$}, final]
\step[fieldset=keywords, append, fieldvalue={,instauth}]
}
}
}
Todos author
los campos que contienen una cadena entre llaves dobles se clasifican como instauth
. Esto podría fallar en algunos casos extremos, como ocurre con muchas soluciones automáticas.
MWE
\documentclass[a4paper]{article}
\usepackage[american]{babel}
\usepackage{csquotes}
\usepackage{filecontents}
\usepackage[backend=biber, style=apa, date=year, natbib=true, sorting=nyt, sortcites=true]{biblatex}
\DeclareLanguageMapping{american}{american-apa}
\addbibresource{\jobname.bib}
\addbibresource{biblatex-examples.bib}
\begin{filecontents*}{\jobname.bib}
@online{nos_weeralarm_2009,
title = {Weeralarm en verkeeralarm ingetrokken},
url = {http://nos.nl/l/124074},
titleaddon = {{NOS.nl}},
author = {{NOS}}, %THIS AUTHOR MUST BE PRINTED IN SC
urldate = {2014-02-12},
date = {2009-12-20},
keywords = {gladheid, ijs, ongeluk, openbaar vervoer, schiphol, sneeuw}
}
@report{ns_volle_2013,
location = {Utrecht},
title = {Internal document title},
institution = {NS},
type = {Internal Document},
author = {{NS}}, % THIS AUTHOR MUST BE PRINTED IN SC
date = {2013},
keywords = {internal},
}
\end{filecontents*}
\DeclareSourcemap{
\maps[datatype=bibtex]{
\map[overwrite=true]{
\step[fieldsource=author, match=\regexp{^\{.+?\}$}, final]
\step[fieldset=keywords, append, fieldvalue={,instauth}]
}
}
}
\renewcommand*{\mkbibnamelast}[1]{%
\ifkeyword{instauth}
{\mkbibacro{#1}}
{#1}}
\begin{document}
This is some text with a double reference \cite{nos_weeralarm_2009, ns_volle_2013, wilde, cicero}.
\printbibliography[notkeyword=internal]
\printbibliography[title={Internal Documents}, keyword=internal]
\end{document}
Respuesta2
Nota: A partir de marzo de 2016 (biblatex 3.3), es necesario cambiar \mkbibnamefamily en lugar de \mkbibnamelast. Ver tambiénFormato de nombre Biblatex 3.3.