至少在某些领域,学校年份通常用斜线表示,例如“1987/1988”。但是,Biblatex 在日期字段中使用斜线来表示范围,例如 date={1987/1988} → “1987–1988”。有没有办法在相关情况下获得“1987/1988”,同时保持范围的“1987–1988”格式?例如,@thesis 可以使用“/”,否则可以使用“–”。或者以某种方式使 date={1987\addslash1988} 等不会引发错误?
梅威瑟:
\documentclass{article}
\usepackage[style=authoryear]{biblatex}
\begin{filecontents}{\jobname.bib}
@thesis{JohnThesis,
author = {John Author},
title = {A thesis},
date = {2007/2008},
}
@thesis{JaneThesis,
author = {Jane Author},
title = {A thesis},
date = {2007\addslash2008},
}
\end{filecontents}
\addbibresource{\jobname.bib}
\begin{document}
\nocite{*}
\printbibliography
\end{document}
结果:
答案1
您暗示您的格式选择仅与类相关@thesis
。那么问题就变成了:
如何做到这一点
biblatex
标记用斜线表示日期范围 当且仅当该课程是@thesis
;否则使用默认短划线?
有一个恰当的方法是使用内置的相应命令biblatex
。从文档 3.12.3:
\bibdaterangesep
:用于日期范围的特定语言分隔符。默认为\textendash
除以下日期格式外,所有日期格式的默认分隔符为ymd默认为\slash
。
我们想要定义\bibdaterangesep
有条件地定义:如果该类是@thesis
,它应该实现为\slash
,否则它默认为\textendash
。
请注意,文档建议通过将更改包装在\DefineBibliographyExtras{english}{...}
(或您的相关语言)中来重新定义此命令。这是因为\bibdaterangesep
和朋友是特定于语言的格式化命令。
以下是 MWE,略作修改以显示@thesis
与其他类别之间的差异:
\documentclass{article}
\usepackage[style=authoryear]{biblatex}
\begin{filecontents}{\jobname.bib}
@thesis{JohnThesis,
author = {John Author},
title = {A thesis},
date = {2007/2008},
}
@article{JaneArticle,
author = {Jane Author},
title = {Not a thesis},
date = {2007/2008},
journaltitle = {Dates and Punctuation Studies},
}
\end{filecontents}
\addbibresource{\jobname.bib}
\DefineBibliographyExtras{english}{%
\renewcommand*{\bibdaterangesep}{%
\ifentrytype{thesis}
{\slash} % if @thesis, \slash
{\textendash}}} % otherwise, keep the default
\begin{document}
\nocite{*}
\printbibliography
\end{document}
答案2
一个快速的解决方案是使用字段year
而不是date
,因为第一个接受斜杠:
\documentclass{article}
\usepackage[style=authoryear]{biblatex}
\begin{filecontents}{\jobname.bib}
@thesis{JohnThesis,
author = {John Author},
title = {A thesis},
date = {2007/2008},
}
@thesis{JaneThesis,
author = {Jane Author},
title = {A thesis},
year = {2007/2008},
}
\end{filecontents}
\addbibresource{\jobname.bib}
\begin{document}
\nocite{*}
\printbibliography
\end{document}
给出:
笔记:这可能会导致一些条目排序不正确,但大多数情况下效果很好。