формат заголовка записи в biblatex

формат заголовка записи в biblatex

Я пытаюсь набрать список публикаций, используя biblatexи хотел бы изменить заголовки записей на регистр предложений (или заглавные/строчные/заголовок). Я пытался использовать, \DeclareFieldFormat{title}{\MakeSentenceCase{#1}}но это, похоже, не работает.

МВЭ:

%\RequirePackage{filecontents}
\begin{filecontents}{pub.bib}
@article{article1,
    author={Author One and Author Two},
    title={Title of Article One},
    date= {2018},
    }
@article{article2,
    author={Author One and Author Two},
    title={Title of article two},
    date= {2017},
    }
\end{filecontents}
\documentclass{article}
\usepackage[
    backend=biber,
    sorting=ynt,
    giveninits=true,
    maxbibnames=99,
]{biblatex}
\DeclareFieldFormat*{title}{\MakeCapital{#1}}   % Change titles to sentence case
\addbibresource{pub.bib}
\begin{document}
\nocite{*}
\printbibliography[type=article, title={Publications}]
\end{document}

решение1

titlecaseДля этого вам следует использовать .

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

Полная версия MWE:

%\RequirePackage{filecontents}
\begin{filecontents}{pub.bib}
@article{article1,
    author={Author One and Author Two},
    title={Title of Article One},
    date= {2018},
    }
@article{article2,
    author={Author One and Author Two},
    title={Title of article two},
    date= {2017},
    }
\end{filecontents}
\documentclass{article}
\usepackage[
    backend=biber,
    sorting=ynt,
    giveninits=true,
    maxbibnames=99,
]{biblatex}
\DeclareFieldFormat*{titlecase}{\MakeSentenceCase{#1}}   % Change titles to sentence case
\addbibresource{pub.bib}
\begin{document}
\nocite{*}
\printbibliography[type=article, title={Publications}]
\end{document}

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

Обновлять: Возможно, объяснение того, почему titlecaseвместо titleследует использовать, может быть полезным здесь. Если мы посмотрим на определение макроса titleв , biblatex.defто найдем следующее:

\newbibmacro*{title}{%
  \ifboolexpr{
    test {\iffieldundef{title}}
    and
    test {\iffieldundef{subtitle}}
  }
    {}
    {\printtext[title]{%
       \printfield[titlecase]{title}%
       \setunit{\subtitlepunct}%
       \printfield[titlecase]{subtitle}}%
     \newunit}%
  \printfield{titleaddon}}

Обратите внимание, что директива форматирования [title]применяется к title + subtitleинструкциям по печати. ​​Это необходимо, поскольку общим требованием стилей библиографии является то, что заголовок некоторых общих типов записей должен быть заключен в кавычки, то есть одна пара кавычек для "title" и "subtitle". Директива форматирования [titlecase]применяется индивидуально к titleи subtitle. Следствием этого является то, что если вы попытаетесь применить \MakeSentenceCaseк titleдирективе форматирования, вы передадите ей последовательность \printfields и инструкций по пунктуации с их собственными индивидуальными директивами форматирования [titlecase]. Что-то, что ведет себя не очень хорошо, как вы заметили. Но даже если бы это была очищенная строка, вы бы получили нежелательную строчную первую букву подзаголовка (вы бы передали их обе вместе в \MakeSentenceCase). Так что, короче говоря, titlecaseсуществует именно так, как есть, чтобы можно было работать с titleи subtitleотдельно, и это было бы подходящей областью применения любых директив оформления предложений.

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