biblatex 和 DOI、URL 和 Eprint 的新行

biblatex 和 DOI、URL 和 Eprint 的新行

我一直在研究 biblatex,由于我厌倦了损坏的 DOI、URL 和其他电子版链接,我想使用 biblatex 样式来为这些字段实现换行。我从文件开始standard.bbx,在文章样式中,我替换了

\newunit\newblock
\usebibmacro{doi+eprint+url}

经过

\newline
\usebibmacro{doi+eprint+url}

这是错误的,因为最终参考书目中的 DOI 行开头添加了一个点 (.),并且即使 doi 字段为空,也会添加一个新行。有办法解决这个问题吗?

然后,我想更进一步,为 DOI、URL、EPRINT 各添加一行新行,然后类似这样:

\newline
\usebibmacro{doi}
\newline
\usebibmacro{url}
\newline
\usebibmacro{eprint}

通过替换\newbibmacro*{doi+eprint+url}\newbibmacro*{doi}\newbibmacro*{eprint}\newbibmacro*{url}复制粘贴 的最后几行standard.bbx)以及通过替换\usebibmacro{doi+eprint+url}上面的行,但不幸的是,它不起作用。我很乐意听取您的意见。

答案1

\setunit是 的替代方案\newunit,允许您设置标点符号来代替\newunitpunct(通常是句号加空格)。\newunit和 的真正妙处\setunit在于您无需担心生成过多的标点符号,尤其是在缺少某些字段时。

下面的代码定义了一个新的书目宏bbx:parunit。它发出\setunit仅在书目中生成换行符的命令。使用选项设置backref=truebbx:parunit还会在第一个换行符之前立即打印反向引用。编辑应用于通用书目宏,biblatex.def以便该解决方案适用于大多数样式。

\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{csquotes}
\usepackage[american]{babel}
\usepackage[colorlinks]{hyperref}
\usepackage[style=verbose,backref=true]{biblatex}

\newbibmacro*{bbx:parunit}{%
  \ifbibliography
    {\setunit{\bibpagerefpunct}\newblock
     \usebibmacro{pageref}%
     \clearlist{pageref}%
     \setunit{\adddot\par\nobreak}}
    {}}

\renewbibmacro*{doi+eprint+url}{%
  \usebibmacro{bbx:parunit}% Added
  \iftoggle{bbx:doi}
    {\printfield{doi}}
    {}%
  \iftoggle{bbx:eprint}
    {\usebibmacro{eprint}}
    {}%
  \iftoggle{bbx:url}
    {\usebibmacro{url+urldate}}
    {}}

\renewbibmacro*{eprint}{%
  \usebibmacro{bbx:parunit}% Added
  \iffieldundef{eprinttype}
    {\printfield{eprint}}
    {\printfield[eprint:\strfield{eprinttype}]{eprint}}}

\renewbibmacro*{url+urldate}{%
  \usebibmacro{bbx:parunit}% Added
  \printfield{url}%
  \iffieldundef{urlyear}
    {}
    {\setunit*{\addspace}%
     \printtext[urldate]{\printurldate}}}

\addbibresource{biblatex-examples.bib}

\begin{document}
\null\vfill\noindent
Filler text.\footcite{bertram,kastenholz,ctan,itzhaki}
\printbibliography
\end{document}

在此处输入图片描述

答案2

您不能直接将其包含\newline.bbx文件中,因为它是“文本”,并且不会在biblatex跟踪器中定位。相反,您需要使用\printtext

\printtext{\newline}%
\usebibmacro{doi}%
\printtext{\newline}%
\usebibmacro{url}%
\printtext{\newline}%
\usebibmacro{eprint}%

我可能会让它更复杂一点,并有条件\iffieldundef地包含这些新行

\iffieldundef{doi}
  {}
  {%
    \printtext{\newline}%
    \usebibmacro{doi}%
  }%

相关内容