Use versalete na bibliografia para autores institucionais

Use versalete na bibliografia para autores institucionais

Estou usando o biblatex-apa para definir o layout da minha bibliografia. Agora estou citando vários documentos (internos) de instituições ou sites de notícias, que agora aparecem no documento usando sua abreviatura. Gostaria que essas abreviações aparecessem em versalete. Na verdade, quero que todas as instituições abreviadas apareçam em letras minúsculas. Isso é possível? Agora divido minha bibliografia usando tags (exportadas do Zotero), então presumo que uma tag também pode permitir que a citação apareça em versalete no texto. Alguém sabe como se faz isto?

Meu 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}

E o conteúdo do meu 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}
}

Responder1

Se todas as suas citações que exigem uma instituição em versalete realmente tiverem a mesma tag, então isso deverá ser possível.

No entanto, no seu MWE, as duas entradas não compartilham um keyword, então adicionei a palavra-chave instauthpara verificar.

O que fazemos é muito simples: A cada comando de citação, e antes de cada entrada bibliográfica verificamos, se a entrada possui a palavra-chave instauth, se sim o formato do sobrenome está configurado para produzir siglas via macro biblatex' \mkbibacro(observe que para que isso funcione " [a] sigla deve ser dada em letras maiúsculas.", p. 89, obiblatexdocumentação).

\AtEveryCitekey{%
  \ifkeyword{instauth}
    {\renewcommand*{\mkbibnamelast}[1]{\mkbibacro{#1}}}
    {}%
}
\AtEveryBibitem{%
  \ifkeyword{instauth}
    {\renewcommand*{\mkbibnamelast}[1]{\mkbibacro{#1}}}
    {}%
}

Uma redefinição alternativa é a mais curta

\renewcommand*{\mkbibnamelast}[1]{%
  \ifkeyword{instauth}
    {\mkbibacro{#1}}
    {#1}}

Onde está a condicionaldentroa diretiva de formatação. Então não há necessidade de conectar a mudança nos grupos onde \ifkeywordestá definida, como foi necessário acima.

Podemos até tornar a detecção instauthautomática até certo ponto. Com

\DeclareSourcemap{
  \maps[datatype=bibtex]{
    \map[overwrite=true]{
      \step[fieldsource=author, match=\regexp{^\{.+?\}$}, final]
      \step[fieldset=keywords, append, fieldvalue={,instauth}]
    }
  }
}

todos authoros campos que contêm uma string entre chaves duplas são classificados como instauth. Isso pode falhar em alguns casos extremos - assim como muitas soluções 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}

insira a descrição da imagem aqui

Responder2

Nota: A partir de março de 2016 (biblatex 3.3), você precisa alterar \mkbibnamefamily em vez de \mkbibnamelast. Veja tambémFormatação de nome Biblatex 3.3.

informação relacionada