Biblatex 清除特定类别条目的 URL 字段

Biblatex 清除特定类别条目的 URL 字段

您能帮我处理 biblatex 条目吗?我想...

  1. 为在线和离线条目打印单独的书目
  2. 条目@online@misc带有 url 字段的条目都应归入“在线”类别。所有其他条目都应归入“离线”类别。
  3. 我不想显示离线条目的url和。urldate

我尝试合并以下网页中的答案:

何时使用\AtEveryCitekey?何时使用\AtEveryBibitem?我可以发出多个\AtEvery***命令吗?还是一个命令会取代另一个命令?

以下是我的最小(非完整)工作示例。我总是可以让分类或清除字段正常工作,但不能同时工作:

\documentclass{article}
\usepackage{biblatex}

\DeclareBibliographyCategory{online}
\DeclareBibliographyCategory{offline}
\AtEveryCitekey{%
    \ifboolexpr{% 
        test {\ifentrytype{online}}
        or
        ( test {\ifentrytype{misc}}
          and not test {\iffieldundef{url}}
        )
    }
    { \addtocategory{online}{\thefield{entrykey}}\clearfield{url}\clearfield{urldate} }
    { \addtocategory{offline}{\thefield{entrykey}} }
}


\usepackage{filecontents}

\begin{filecontents}{\jobname.bib}
@article{c1,
      author         = "Authors1",
      title          = "{Title of article}",
      collaboration  = "Collaboration",
      year           = "2012",
      url            = "http://www.sciencedirect.com/",
      urldate        = "2012-07-12",
}
@online{c2,
      author         = "Authors2",
      title          = "{Title of website}",
      year           = "2011",
      url            = "http://www.gmx.at/",
      urldate        = "2012-06-10",
}
@misc{c3,
      author         = "Authors3",
      title          = "{Title of video}",
      year           = "2012",
      howpublished   = "Youtube video",
      url            = "http://youtube.com/watch/123",
      urldate        = "2012-06-06",      
}
\end{filecontents}

\addbibresource{\jobname.bib}

\begin{document}

\cite{c1,c2,c3}

\printbibliography[category=offline,title={Offline Articles}]

\printbibliography[category=online,title={Online Articles}]

\end{document}

答案1

最好使用 biber 的顺序源映射功能来完成此操作,该功能允许您在处理数据时以流的形式修改数据,而无需实际更改源文件:

\documentclass{article}
\usepackage{biblatex}
\addbibresource{test.bib}

\DeclareSourcemap{
  \maps[datatype=bibtex, overwrite=true]{
    \map{
      \step[fieldset=keywords, fieldvalue=offline]
    }
    \map{
      \pertype{online}
      \step[fieldset=keywords, fieldvalue=online]
    }
    \map{
      \pertype{misc}
      \step[fieldsource=url, final]
      \step[fieldset=keywords, fieldvalue=online]
    }
    \map{
      \step[fieldsource=keywords, match=offline, final]
      \step[fieldset=url, null]
    }
  }
}

\begin{document}
\cite{c1,c2,c3}
\printbibliography[keyword=offline,title={Offline Articles}]
\printbibliography[keyword=online,title={Online Articles}]
\end{document}
  • 首先为条目设置默认关键字“离线”
  • 然后用“在线”覆盖此内容(如果条目是)@online@misc使用 URL 字段
  • 如果关键字字段仍处于“离线”状态,则删除 URL 字段
  • 根据关键词打印两个书目

分体围兜

相关内容