并尝试过:
\documentclass{report}
\usepackage{biblatex}
\addbibresource{biblatex-examples.bib}
\renewbibmacro*{pages+year}{%
\printlist{pages}%
\iflistundef{year}
{\setunit*{\addcomma\space}}
{\setunit*{\addcolon\space}}%
\printlist{year}
\newunit}
\begin{document}
Bla \cite{aksin}
\printbibliography
\end{document}
但那没用。还有其他建议吗?
答案1
CTAN 上有几种自定义样式可以将日期移至末尾。biblatex-ieee
的style=ieee
,biblatex-nature
'style=nature
沙biblatex-phys
'style=phys
浮现在脑海中。也许其中一个已经接近你想要的了。
如果您想修改标准样式,您可以修改驱动程序或尝试绕过此操作。无论如何,重新定义宏都pages+year
无济于事,因为这个宏不存在,这意味着它根本没用。
由于修改驱动程序通常需要更多代码,因此我将演示一种解决方法。但如果我要按照自己的风格编写,我可能会修改驱动程序。
首先,我们禁用正常的日期打印宏,然后在打印页码的宏中插入新的日期打印宏。不过,并非所有条目类型都有页面,因此您可能最终会删除一些日期。下面的代码有一个原始检查来避免这种情况。
\documentclass{article}
\usepackage[style=numeric]{biblatex}
\addbibresource{biblatex-examples.bib}
\newtoggle{bbx:datemissing}
\renewbibmacro*{date}{\toggletrue{bbx:datemissing}%
}
\renewbibmacro*{issue+date}{%
\toggletrue{bbx:datemissing}%
\iffieldundef{issue}
{}
{\printtext[parens]{%
\printfield{issue}}}%
\newunit}
\newbibmacro*{date:print}{%
\togglefalse{bbx:datemissing}%
\printdate}
\renewbibmacro*{chapter+pages}{%
\printfield{chapter}%
\setunit{\bibpagespunct}%
\printfield{pages}%
\newunit
\usebibmacro{date:print}%
\newunit}
\renewbibmacro*{note+pages}{%
\printfield{note}%
\setunit{\bibpagespunct}%
\printfield{pages}%
\newunit
\usebibmacro{date:print}%
\newunit}
\renewbibmacro*{addendum+pubstate}{%
\iftoggle{bbx:datemissing}
{\usebibmacro{date:print}}
{}%
\printfield{addendum}%
\newunit\newblock
\printfield{pubstate}}
\begin{document}
Bla \cite{aksin}
\printbibliography
\end{document}
答案2
moewe 的解决方案很棒,但它有一个(可能不是故意的)副作用,就是把 放在url
前面date
。这是我的替代解决方案,它不会这样做,即文章引用中的字段将按journal
, pages
, year
,的顺序排列url
。
\renewbibmacro*{issue+date}{}% % Remove date
\renewbibmacro*{note+pages}{% % Add date after pages
\printfield{note}%
\setunit{\bibpagespunct}%
\printfield{pages}%
\setunit{\addcomma\addspace}% % NEW
\usebibmacro{date}% % NEW
\newunit}
本质上,我已经从宏中删除了日期issue+date
(有点奇怪,但它仅由article
和periodical
类使用,所以我不在乎),并将其添加到note+pages
宏中(仅由使用article
)。