在 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
相比,这也会影响连字符、逗号和引号规则。如果您只想让日期位于月份之前(无论是长日期还是短日期),则只需更改/语言中日期的打印方式即可。请注意,这将更改整个文档的日期格式,而不仅仅是参考书目。american
USenglish
american
USenglish
最简单的方法是将其插入到序言中:
\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
正确的格式。