biblatex 中标题的句子大小写

biblatex 中标题的句子大小写

我希望 Biblatex 中的文章标题采用句子大小写(第一个单词大写,其余小写,用 {} 覆盖),这是 Bibtex 中的默认设置。

我试过:

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

然而,它也会将其他字段转换为句子大小写,例如 booktile:

[Pai99] P Paillier. “ Public-key cryptosystems based on composite degree residuosity classes”. Eurocrypt. 1999 

我想要:

[Pai99] P Paillier. “ Public-key cryptosystems based on composite degree residuosity classes”. EUROCRYPT. 1999

(假设 .bib 文件中的 booktitle 是 EUROCRYPT)

除了在每个书名条目中添加 {} 之外,还有其他方法可以做到这一点吗?

答案1

格式定义

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

使全部句子大小写的标题,这不是您想要的。需要根据条目和字段类型打印标题。例如,对于字段,title我们需要以不同的方式处理@article@book条目。对于@inproceedings条目,我们需要以不同的方式处理titlebooktitle字段。

为此,我们可以重新定义titlebibmacro 以在句子大小写中打印title字段@article和任何@in*条目类型。采用在中找到的原始定义biblatex.def

\DeclareFieldFormat{sentencecase}{\MakeSentenceCase{#1}}

\renewbibmacro*{title}{%
  \ifthenelse{\iffieldundef{title}\AND\iffieldundef{subtitle}}
    {}
    {\ifthenelse{\ifentrytype{article}\OR\ifentrytype{inbook}%
      \OR\ifentrytype{incollection}\OR\ifentrytype{inproceedings}%
      \OR\ifentrytype{inreference}}
      {\printtext[title]{%
        \printfield[sentencecase]{title}%
        \setunit{\subtitlepunct}%
        \printfield[sentencecase]{subtitle}}}%
      {\printtext[title]{%
        \printfield[titlecase]{title}%
        \setunit{\subtitlepunct}%
        \printfield[titlecase]{subtitle}}}%
     \newunit}%
  \printfield{titleaddon}}

或者,我们可以直接识别类似书籍的条目,并将句子大小写应用于其他所有内容。这比较棘手,因为更多类型符合类似书籍的参考条件,并且这些来源的标题由多个宏打印。其中包括:、、、和biblatex.deftitle为了避免重新定义所有这些,您可以重新定义格式。booktitlemaintitlejournalperiodicalissuetitlecase

\DeclareFieldFormat{titlecase}{\MakeTitleCase{#1}}

\newrobustcmd{\MakeTitleCase}[1]{%
  \ifthenelse{\ifcurrentfield{booktitle}\OR\ifcurrentfield{booksubtitle}%
    \OR\ifcurrentfield{maintitle}\OR\ifcurrentfield{mainsubtitle}%
    \OR\ifcurrentfield{journaltitle}\OR\ifcurrentfield{journalsubtitle}%
    \OR\ifcurrentfield{issuetitle}\OR\ifcurrentfield{issuesubtitle}%
    \OR\ifentrytype{book}\OR\ifentrytype{mvbook}\OR\ifentrytype{bookinbook}%
    \OR\ifentrytype{booklet}\OR\ifentrytype{suppbook}%
    \OR\ifentrytype{collection}\OR\ifentrytype{mvcollection}%
    \OR\ifentrytype{suppcollection}\OR\ifentrytype{manual}%
    \OR\ifentrytype{periodical}\OR\ifentrytype{suppperiodical}%
    \OR\ifentrytype{proceedings}\OR\ifentrytype{mvproceedings}%
    \OR\ifentrytype{reference}\OR\ifentrytype{mvreference}%
    \OR\ifentrytype{report}\OR\ifentrytype{thesis}}
    {#1}
    {\MakeSentenceCase{#1}}}

编辑经过@moewe请注意,biblatex文档建议使用星号格式\MakeSentenceCase*而不是\MakeSentenceCase。带星号的宏会考虑条目的语言(如字段中所示langid,或假设当前语言),并且仅在适当的地方应用句子大小写(默认情况下仅适用于英语出版物)。

答案2

biblatex-ext引入了新的字段格式,以便更好地控制标题大小写。标准biblatex格式titlecase适用于所有标题类字段,biblatex-ext

  • titlecase:title
  • titlecase:booktitle
  • titlecase:maintitle
  • titlecase:maintitle
  • titlecase:journaltitle
  • titlecase:issuetitle

仅适用于其名称中的特定字段。通常,这些字段格式可以根据类型定义。请参阅第 21-22 页biblatex-ext文档。(当然biblatex-ext还是支持标准titlecase格式。)

如果你只想要标题用句子大小写引号括起来的条目标题,则使用

\documentclass[british]{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{babel}
\usepackage{csquotes}

\usepackage[style=ext-authoryear, backend=biber]{biblatex}

\DeclareFieldFormat
  [article,inbook,incollection,inproceedings,patent,thesis,unpublished]
  {titlecase:title}{\MakeSentenceCase*{#1}}

\addbibresource{biblatex-examples.bib}

\begin{document}
\nocite{springer,weinberg,doody,maron,pines}
\printbibliography
\end{document}

Weinberg, Steven (1967)。“轻子模型”。《物理评论快报》19,第 1264-1266 页。

相关内容