在 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可能会有用。如果我们查看宏的定义titlebiblatex.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]分别应用于titlesubtitle。这样做的结果是,如果您尝试应用于\MakeSentenceCase格式化title指令,您将为其提供一系列\printfields 和标点符号指令,以及它们自己的单独格式化指令[titlecase]。正如您所注意到的,这表现不佳。但是,即使这是一个经过清理的字符串,您也会得到一个不需要的小写副标题首字母(您会将它们一起输入到\MakeSentenceCase)。所以,简而言之,它的titlecase存在正是为了让人们能够单独处理titlesubtitle,这将是应用任何句子大小写指令的适当范围。

相关内容