Biblatex:将 doi-url 转换为 doi 字段

Biblatex:将 doi-url 转换为 doi 字段

我使用 biblatex,并希望我的参考书目仅包含 DOI 字段(只要有 DOI 信息可用)。这涉及两件事:

  1. 每当存在 DOI 字段时,Biblatex 都必须抑制 URL 字段。这可以通过序言中的以下代码来实现。(这是 Joseph Wright 的答案的简化版本这里)。

    \renewbibmacro*{doi+eprint+url}{%
      \iftoggle{bbx:doi}
        {\printfield{doi}}
        {}%
    \newunit\newblock
      \iftoggle{bbx:eprint}
        {\usebibmacro{eprint}}
        {}%
    \newunit\newblock
      \iftoggle{bbx:url}
            {%
          \iffieldundef{doi}
    {\usebibmacro{url+urldate}}
            {%
              \clearfield{url}%  
            }%
        }
        {}} 
    

    因此,每次 bibtex 文件中出现 DOI 字段时,URL 字段就会被清除。

  2. 我的 bibtex 文件从以下位置导出佐特罗。不幸的是,Zotero 尚未为所有条目类型提供 DOI 字段,因此我经常将 DOI 信息输入到 URL 字段中,例如http://dx.doi.org/10.1145/1364782.1364794。所以我的问题是:是否可以让 biblatex 从 URL 字段中获取 DOI 信息,将其存储到 DOI 字段中,然后仅将其写入参考书目?

    我猜必须修改\usebibmacro{url+urldate}条件:首先,检查 URL 字段是否包含“dx.doi.org/”(理想情况下应该允许使用 http 和 https)。如果包含,则取出“dx.doi.org/”后面的所有内容,将其复制到 DOI 字段(带有\restorefield?)中,然后\printfield{doi}。如果不包含,即如果它不是 DOI-URL,则\usebibmacro{url+urldate}

那可能吗?

答案1

如果biber用作后端,则可以使用该\DeclareSourcemap设施来更改字段。

对于当前的情况,解决方案是使用以下代码重新映射url具有初始部分的条目:dx.doi.org

\DeclareSourcemap{
  \maps[datatype=bibtex]{
    \map{
      \step[ % copies url to doi field if it starts with http://dx.doi.org/
        fieldsource=url,
        match=\regexp{http://dx.doi.org/(.+)},
        fieldtarget=doi,
      ]
    \step[ % removes http://dx.doi.org/ string from doi field
      fieldsource=doi,
      match=\regexp{http://dx.doi.org/(.+)},
      replace=\regexp{$1}
    ]
    }
  \map{ % removes url + urldate field from all entries that have a doi field
   \step[fieldsource=doi, final]
   \step[fieldset=url, null]
   \step[fieldset=urldate, null]
   }
 }
}

里面的实际值\regexp是可以调整的。

第一步,我们doi为每个url与正则表达式匹配的条目创建一个字段,novel 字段具有该字段的值url。第二步,我们删除 doi“命名空间”。

在第二个\map序列中,如果存在 doi 字段,则清除 url 和 urldate 字段,以模仿原始问题第一部分中的行为。

相关内容