调整Biblatex参考文献中URL与urldate的显示顺序
Biblatex APA样式调整urldate显示位置至URL之后
我使用Biblatex的APA样式管理参考文献,自定义了urlseen文本,但现在urldate(访问日期)显示在URL之前,需要把它调整到URL后面。查过其他示例,默认应该是URL在前、urldate在后,当前输出效果如下:
我的代码如下:
\documentclass[12pt]{article} \usepackage[ngerman]{babel} \usepackage[backend=biber, style=apa, sorting=nyvt, giveninits=true, maxbibnames=99, maxcitenames=2]{biblatex} \DeclareFieldFormat{urldate}{\mkbibparens{\bibstring{urlseen}\space#1}} \DefineBibliographyStrings{ngerman}{ %alles für Abrufdatum am urlseen = {Abrufdatum:} } \begin{filecontents}{references.bib} @online{bdew_allgemeine_2022, title = {Allgemeine Festlegungen zu den {EDIFACT}- und {XML}-Nachrichten}, url = {https://www.bundesnetzagentur.de/DE/}, author = {{BDEW}}, urldate = {2024-04-22}, date = {2022-08-01} } \end{filecontents} \addbibresource{references.bib} \begin{document} \nocite{bdew_allgemeine_2022} \newpage \raggedright \printbibliography[heading=bibintoc,title={Bibliography}] \end{document}
解决方案
问题根源是APA样式对@online类型条目的字段排版顺序定义,需要重新定义相关命令来调整URL和urldate的输出顺序:
1. 添加自定义排版命令
在导言区添加以下代码,重新定义online条目驱动和url+urldate宏:
% 重新定义online条目的整体排版逻辑,确保先输出URL \DeclareBibliographyDriver{online}{% \usebibmacro{bibindex}% \usebibmacro{begentry}% \usebibmacro{author/translator+others}% \setunit{\printdelim{nametitledelim}}\newblock \usebibmacro{title}% \newunit \printlist{language}% \newunit\newblock \usebibmacro{byauthor}% \newunit\newblock \usebibmacro{bytranslator+others}% \newunit\newblock \printfield{version}% \newunit \printfield{note}% \newunit\newblock \usebibmacro{date}% \newunit\newblock \iftoggle{bbx:eprint} {\usebibmacro{eprint}} {}% \newunit\newblock % 调用修改后的url+urldate宏 \usebibmacro{url+urldate}% \newunit\newblock \usebibmacro{addendum+pubstate}% \setunit{\bibpagerefpunct}\newblock \usebibmacro{pageref}% \newunit\newblock \iftoggle{bbx:related} {\usebibmacro{related:init}% \usebibmacro{related}} {}% \usebibmacro{finentry}} % 重新定义url+urldate宏,先输出URL再输出urldate \renewbibmacro*{url+urldate}{% \printfield{url}% \iffieldundef{urlyear} {} {\setunit*{\addspace}% \printurldate}}
2. 代码说明
- APA样式默认的
online驱动中,urldate会在URL之前输出,重新定义驱动后,我们调用了修改后的url+urldate宏。 - 修改后的
url+urldate宏会优先打印URL,再输出urldate,同时保留你之前自定义的urlseen文本格式。
3. 修改后的完整代码
\documentclass[12pt]{article} \usepackage[ngerman]{babel} \usepackage[backend=biber, style=apa, sorting=nyvt, giveninits=true, maxbibnames=99, maxcitenames=2]{biblatex} \DeclareFieldFormat{urldate}{\mkbibparens{\bibstring{urlseen}\space#1}} \DefineBibliographyStrings{ngerman}{ %alles für Abrufdatum am urlseen = {Abrufdatum:} } % 重新定义online条目的URL和urldate排版顺序 \DeclareBibliographyDriver{online}{% \usebibmacro{bibindex}% \usebibmacro{begentry}% \usebibmacro{author/translator+others}% \setunit{\printdelim{nametitledelim}}\newblock \usebibmacro{title}% \newunit \printlist{language}% \newunit\newblock \usebibmacro{byauthor}% \newunit\newblock \usebibmacro{bytranslator+others}% \newunit\newblock \printfield{version}% \newunit \printfield{note}% \newunit\newblock \usebibmacro{date}% \newunit\newblock \iftoggle{bbx:eprint} {\usebibmacro{eprint}} {}% \newunit\newblock % 先输出URL \usebibmacro{url+urldate}% \newunit\newblock \usebibmacro{addendum+pubstate}% \setunit{\bibpagerefpunct}\newblock \usebibmacro{pageref}% \newunit\newblock \iftoggle{bbx:related} {\usebibmacro{related:init}% \usebibmacro{related}} {}% \usebibmacro{finentry}} % 重新定义url+urldate宏,先输出URL再输出urldate \renewbibmacro*{url+urldate}{% \printfield{url}% \iffieldundef{urlyear} {} {\setunit*{\addspace}% \printurldate}} \begin{filecontents}{references.bib} @online{bdew_allgemeine_2022, title = {Allgemeine Festlegungen zu den {EDIFACT}- und {XML}-Nachrichten}, url = {https://www.bundesnetzagentur.de/DE/}, author = {{BDEW}}, urldate = {2024-04-22}, date = {2022-08-01} } \end{filecontents} \addbibresource{references.bib} \begin{document} \nocite{bdew_allgemeine_2022} \newpage \raggedright \printbibliography[heading=bibintoc,title={Bibliography}] \end{document}
内容的提问来源于stack exchange,提问作者Lennart Herrmann
相关产品推荐
相关产品推荐

