Используйте малые заглавные буквы в библиографии для авторов организаций.

Используйте малые заглавные буквы в библиографии для авторов организаций.

Я использую biblatex-apa для определения макета моей библиографии. Теперь я цитирую несколько (внутренних) документов из учреждений или новостных сайтов, которые теперь отображаются в документе с использованием их аббревиатуры. Я хотел бы, чтобы эти аббревиатуры отображались маленькими заглавными буквами. На самом деле, я хочу, чтобы все сокращенные названия учреждений отображались маленькими заглавными буквами. Возможно ли это? Теперь я разделяю свою библиографию с помощью тегов (экспортированных из Zotero), поэтому я предполагаю, что тег также может позволить цитированию отображаться маленькими заглавными буквами в тексте? Кто-нибудь знает, как это сделать?

Мой МВЭ:

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

И содержимое моего 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}
}

решение1

Если все ваши ссылки, требующие указания учреждения малыми заглавными буквами, действительно имеют один и тот же тег, то это должно быть возможно.

Однако в вашем MWE эти две записи не имеют общего символа keyword, поэтому я добавил ключевое слово instauthдля проверки.

То, что мы делаем, очень просто: при каждой команде цитирования и перед каждой записью библиографии мы проверяем, есть ли в записи ключевое слово instauth, если да, то формат фамилии устанавливается для создания аббревиатур с помощью biblatexмакроса \mkbibacro(обратите внимание, что для того, чтобы это работало, «аббревиатура должна быть указана заглавными буквами.», стр. 89,biblatexдокументация).

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

Альтернативное переопределение — более короткое

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

Где условное наклонениевнутридиректива форматирования. Тогда нет необходимости вставлять изменение в группы, где \ifkeywordопределено, как это было необходимо выше.

Мы даже можем сделать обнаружение instauthавтоматическим до некоторой степени.

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

все authorполя, содержащие строку, заключенную в двойные фигурные скобки, классифицируются как instauth. Это может привести к сбоям в некоторых крайних случаях — как и многие автоматические решения.

МВЭ

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

введите описание изображения здесь

решение2

Примечание: с марта 2016 г. (biblatex 3.3) необходимо изменить \mkbibnamefamily вместо \mkbibnamelast. Смотрите такжеФорматирование имени Biblatex 3.3.

Связанный контент