使用 biblatex 格式化日期“日月年”

使用 biblatex 格式化日期“日月年”

在 biblatex 中,“日月年”格式的正确方法是什么?

鉴于此文档:

\documentclass{article}
\usepackage[backend=biber,dateabbrev=false]{biblatex}

\begin{filecontents}{references.bib}
@book{Book,
  title = {This is a Title},
  author = {Author, Some},
  location = {The City},
  publisher = {Publisher},
  date = 2005,
  month = feb,
  day = 14,
}
\end{filecontents}
\addbibresource{references.bib}

\begin{document}
Citing \cite{Book}.
\printbibliography
\end{document}

参考书目如下:
[1] 某位作者。这是标题。The City:出版社,2005 年 2 月 14 日。

但是,我想要:
[1] 某位作者。这是一个标题。城市:出版社,2005 年 2 月 14 日。

我可以不摆弄 就做到这一点吗\printdate
手册提到日期格式是特定于语言的,但我确实想继续使用美式英语,只是在参考书目中使用“日月年”样式。

答案1

啊,语言的用途australian。它的日期格式是正确的,因此您可以通过以下方式将其作为辅助语言加载babel,然后将参考书目包装在otherlanguage环境中:

示例输出

\documentclass{article}

\usepackage[australian,american]{babel}

\usepackage[backend=biber,dateabbrev=false]{biblatex}

\begin{filecontents}{references.bib}
@book{Book,
  title = {This is a Title},
  author = {Author, Some},
  location = {The City},
  publisher = {Publisher},
  date = 2005,
  month = feb,
  day = 14,
}
\end{filecontents}
\addbibresource{references.bib}

\begin{document}
\today

Citing \cite{Book}.

\begin{otherlanguage}{australian}
\printbibliography
\end{otherlanguage}

\end{document}

答案2

正如手册所述:

biblatex 包总是将 [english] 视为 american 的别名。最好使用 american 和 british 语言标识符

你可以使用类似的东西:

\documentclass{article}
\usepackage[british]{babel}
\usepackage[backend=biber,dateabbrev=false]{biblatex}
\begin{filecontents}{references.bib}
@book{Book,
title = {This is a Title},
author = {Author, Some},
location = {The City},
publisher = {Publisher},
date = 2005,
month = feb,
day = 14,
}
\end{filecontents}

\addbibresource{references.bib}
\begin{document}
\today
Citing \cite{Book}.
\printbibliography
\end{document}

或者

\documentclass{article}

\usepackage[british]{babel}
\usepackage[babel=other,backend=biber,dateabbrev=false]{biblatex}
\begin{filecontents}{references.bib}
@book{Book,
  title = {This is a Title},
  author = {Author, Some},
  location = {The City},
  publisher = {Publisher},
  hyphenation = {british}
  date = 2005,
  month = feb,
  day = 14,
}
\end{filecontents}
\addbibresource{references.bib}
\begin{document}
\today
Citing \cite{Book}.
\printbibliography
\end{document}

在此处输入图片描述

答案3

使用,但与(别名)australian相比,这也会影响连字符、逗号和引号规则。如果您只想让日期位于月份之前(无论是长日期还是短日期),则只需更改/语言中日期的打印方式即可。请注意,这将更改整个文档的日期格式,而不仅仅是参考书目。americanUSenglishamericanUSenglish

最简单的方法是将其插入到序言中:

\DefineBibliographyExtras{USenglish}{%

  % d-m-y format for long dates
  \protected\def\mkbibdatelong#1#2#3{%
    \iffieldundef{#3}
      {}
      {\stripzeros{\thefield{#3}}%
       \iffieldundef{#2}{}{\nobreakspace}}%
    \iffieldundef{#2}
      {}
      {\mkbibmonth{\thefield{#2}}%
       \iffieldundef{#1}{}{\space}}%
    \iffieldbibstring{#1}{\bibstring{\thefield{#1}}}{\stripzeros{\thefield{#1}}}}%

  % d-m-y format for short dates
  \protected\def\mkbibdateshort#1#2#3{%
    \iffieldundef{#3}
      {}
      {\mkdatezeros{\thefield{#3}}%
       \iffieldundef{#2}{}{/}}%
    \iffieldundef{#2}
      {}
      {\mkdatezeros{\thefield{#2}}%
       \iffieldundef{#1}{}{/}}%
    \iffieldbibstring{#1}{\bibstring{\thefield{#1}}}{\mkdatezeros{\thefield{#1}}}}%
}

我使用别名 编写了代码USenglish,但american如果您愿意,也可以将其替换为 。它们是同一风格的两个名称。不过,您需要确保它是调用 时使用的相同别名\usepackage{babel}。(如果您更改 的属性USenglish,请不要指望更改会转移到american!)

更优雅的解决方案是制作一个 .lbx 文件,使其更加井然有序,并使这种风格在未来的文档中更容易访问。代码仅在开头和结尾处有所不同。您需要\ProvidesFile在顶部和\endinput底部添加。然后添加两个\Inherit...命令并将任何命令更改\Define...Declare...命令。

\ProvidesFile{USenglish-dmy.lbx}[USenglish localization with d-m-y format for dates]

\InheritBibliographyExtras{USenglish}
\DeclareBibliographyExtras{%

  % d-m-y format for long dates
  \protected\def\mkbibdatelong#1#2#3{%
    \iffieldundef{#3}
      {}
      {\stripzeros{\thefield{#3}}%
       \iffieldundef{#2}{}{\nobreakspace}}%
    \iffieldundef{#2}
      {}
      {\mkbibmonth{\thefield{#2}}%
       \iffieldundef{#1}{}{\space}}%
    \iffieldbibstring{#1}{\bibstring{\thefield{#1}}}{\stripzeros{\thefield{#1}}}}%

  % d-m-y format for short dates
  \protected\def\mkbibdateshort#1#2#3{%
    \iffieldundef{#3}
      {}
      {\mkdatezeros{\thefield{#3}}%
       \iffieldundef{#2}{}{/}}%
    \iffieldundef{#2}
      {}
      {\mkdatezeros{\thefield{#2}}%
       \iffieldundef{#1}{}{/}}%
    \iffieldbibstring{#1}{\bibstring{\thefield{#1}}}{\mkdatezeros{\thefield{#1}}}}%
}

\InheritBibliographyStrings{USenglish}
\endinput

将其另存为USenglish-dmy.lbx,然后在您的序言中添加以下内容:\DeclareLanguageMapping{USenglish}{USenglish-dmy}。就是这样!现在所有日期都应在月份之前显示日期,并且不会影响任何其他内容(例如连字符或引号样式)。

感谢 moewe这个答案这帮助我找到了这个解决方案。

答案4

对于用户来说,polyglossia相关信息可以在本网站的其他地方找到,但我很难找到它,因此我在这里添加了它以链接到相关答案:

由于一个多语症中的缺陷无法以可用的方式设置语言变体biblatex。因此\selectlanguage[variant=australian,ordinalmonthday=false]{english}\today生成“2018 年 5 月 24 日”,但\printbibliography仍将呈现美国风格的日期(“2018 年 5 月 24 日”)。

但现在可以 \DeclareLanguageMapping{english}{australian}使用biblatex正确的格式。

相关内容