
Я пытаюсь набрать список публикаций, используя 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
директиве форматирования, вы передадите ей последовательность \printfield
s и инструкций по пунктуации с их собственными индивидуальными директивами форматирования [titlecase]
. Что-то, что ведет себя не очень хорошо, как вы заметили. Но даже если бы это была очищенная строка, вы бы получили нежелательную строчную первую букву подзаголовка (вы бы передали их обе вместе в \MakeSentenceCase
). Так что, короче говоря, titlecase
существует именно так, как есть, чтобы можно было работать с title
и subtitle
отдельно, и это было бы подходящей областью применения любых директив оформления предложений.