biblatex: Сохраняйте заглавные буквы в inprocedings/booktitle

biblatex: Сохраняйте заглавные буквы в inprocedings/booktitle

Я использую Biblatex-APA/Biber с LyX и файл Bibtex, созданный Mendeley. Я могу создавать библиографии без проблем, но я хотел бы изменить стиль ссылок для inproceedings/booktitle. На данный момент мои ссылки выглядят так:

Cole, R., Purao, S., Rossi, M. & Sein, M. (2005). Being proactive: Where action research meets design research. In Proceedings of the 26th international conference on information systems.

Из моего Bibtex-файла:

@inproceedings{Cole2005,
   author = {Cole, Robert and Purao, Sandeep and Rossi, Matti and Sein, Maung},
   booktitle = {Proceedings of the 26th International Conference on Information Systems},
   title = {{Being proactive: Where action research meets design research}},
   year = {2005}
}

Теперь я хочу сохранить заглавные буквы в названии моих трудов/книги, чтобы получить следующее:

Cole, R., Purao, S., Rossi, M. & Sein, M. (2005). Being proactive: Where action
research meets design research. In Proceedings of the 26th International Conference
on Information Systems.

Я экспериментировал со следующим, но безуспешно.

\DeclareFieldFormat[inproceedings]{booktitle}{#1}

Какие-либо предложения?

решение1

Из файла стиля библиографии apa.bbx,

\DeclareFieldFormat[inproceedings]{booktitle}{#1}

не работает, так как booktitleполе задано с помощью \printfield[apacase]{booktitle}, где apacaseдиректива форматирования определена как

\DeclareFieldFormat{apacase}{\MakeSentenceCase*{#1}}

Чтобы сохранить исходный регистр для booktitleполя в @inproceedingsтипе записи, вы можете переопределить booktitleмакрос библиографии или apacaseдирективу в преамбуле документа. Пример последнего подхода:

\DeclareFieldFormat{apacase}{%
  \ifboolexpr{ test {\ifentrytype{inproceedings}}
    and ( test {\ifcurrentfield{booktitle}}
          or test {\ifcurrentfield{booksubtitle}} ) }
    {#1}{\MakeSentenceCase*{#1}}}

Чтобы избежать использования регистра предложений во всех заголовках, кроме оригинальных ( origtitle) и дополнений к заголовкам, используйте

\DeclareFieldFormat{apacase}{#1}

вместо этого. Поскольку biblatex-apaполагается только на вариант со звездочкой, \MakeSentenceCase*вы можете избежать всех изменений регистра предложений, добавив \DeclareCaseLangs{}преамбулу и используя поле hyphenationв вашем bibфайле.

Обратите внимание, что вы можете избежать защиты некоторых слов от понижения регистра с помощью поля subtitle. Например:

   title = {Being proactive},
   subtitle = {Where action research meets design research},

решение2

Можно сохранить определенную заглавную букву, просто поместив букву вопроса в фигурные скобки. Так

@inproceedings{Cole2005,
   author = {Cole, Robert and Purao, Sandeep and Rossi, Matti and Sein, Maung},
   booktitle = {{Proceedings} of the 26th {International} {Conference} on {Information} {Systems}},
   title = {{Being proactive: Where action research meets design research}},
   year = {2005}
}

сделает свою работу. Но в большинстве случаев гораздо проще заключить всю строку в фигурные скобки, как это сделано с заголовком.

решение3

Поскольку я искал удобное решение, по крайней мере для меня, я написал небольшой скрипт на Python, который анализирует мой локальный файл bib, созданный Mendeley. Этот скрипт помещает названия книг в две фигурные скобки.

import re
import fileinput

library = 'path/to/file'

import re

def re_sub_verbose(pattern, replace, string):
  def substitute(match):
    return match.expand(replace)

  result = re.sub(pattern, substitute, string)

  return result

for line in fileinput.input(library, inplace=1):
    print re_sub_verbose("booktitle = \{(.*)\},", "booktitle = {{\\1}},", line)

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