![在 biblatex 中格式化标题条目](https://linux22.com/image/370282/%E5%9C%A8%20biblatex%20%E4%B8%AD%E6%A0%BC%E5%BC%8F%E5%8C%96%E6%A0%87%E9%A2%98%E6%9D%A1%E7%9B%AE.png)
我正在尝试使用 排版出版物列表,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
,这将是应用任何句子大小写指令的适当范围。