URL 字段仅适用于 biblatex 中的某些参考类型

URL 字段仅适用于 biblatex 中的某些参考类型

我将其用作biblatex参考文献。我的bib文件包含许多从不同来源导入的参考文献。并非所有参考文献都有条目url,其中一些是假的。我现在喜欢默认隐藏条目,url但仅将它们用于特定参考类型,例如@manual

目前我使用:

\usepackage[
    style=numeric-comp,
    sorting=none,
    doi=false,
    isbn=false,
    url=true,
    eprint=false,
    maxnames=99
]{biblatex}

是否可以url=false笼统地说,但类似于manual={url=true}?我喜欢避免进入我的大bib文件并注释掉所有其他url条目。

答案1

\documentclass{article}

\usepackage{biblatex}

\AtEveryBibitem{%
  \ifentrytype{manual}{%
  }{%
    \clearfield{url}%
    \clearfield{urldate}%
  }%
}

\usepackage{filecontents}

\begin{filecontents}{\jobname.bib}
@manual{A01,
  author = {Author, A.},
  year = {2001},
  title = {Alpha},
  url = {tex.stackexchange.com},
}
@misc{B02,
  author = {Buthor, B.},
  year = {2002},
  title = {Bravo},
  url = {tex.stackexchange.com},
}
\end{filecontents}

\addbibresource{\jobname.bib}

\nocite{*}

\begin{document}

\printbibliography

\end{document}

在此处输入图片描述

答案2

我想提供另一种解决方案。您可以使用命令\DeclareFieldFormat。这样,您可以简单地添加新的条目类型,或者您可以为不同的条目类型设置特殊格式。

该命令\DeclareFieldFormat有一个星型版本,它为每个条目类型设置定义。在下一步中,您可以使用可选参数为一个或多个条目类型定义特殊设置。

\documentclass{article}

\usepackage{biblatex}

\DeclareFieldFormat*{url}{}
\DeclareFieldFormat[manual]{url}{\mkbibacro{URL}\addcolon\space\url{#1}}
\DeclareFieldFormat*{urldate}{}
\DeclareFieldFormat[manual]{urldate}{\mkbibparens{\bibstring{urlseen}\space#1}}
\usepackage{filecontents}

\begin{filecontents}{\jobname.bib}
@manual{A01,
  author = {Author, A.},
  year = {2001},
  title = {Alpha},
  url = {tex.stackexchange.com},
  urldate={2012-04-19}
}
@misc{B02,
  author = {Buthor, B.},
  year = {2002},
  title = {Bravo},
  url = {tex.stackexchange.com},
  urldate={2012-04-19}
}
\end{filecontents}

\addbibresource{\jobname.bib}

\nocite{*}

\begin{document}

\printbibliography

\end{document}

@lockstep:我希望可以采用你的例子。

在此处输入图片描述

答案3

如果您使用 biber,另一种方法是在 biblatex 看到任何数据之前执行此操作。将其放入您的 biber.conf 中:

<?xml version="1.0" encoding="UTF-8"?>
<config>
  <sourcemap>
    <maps datatype="bibtex" map_overwrite="1">
      <map>
        <per_type>MANUAL</per_type>
        <map_step map_field_set="URL" map_field_target="URL"/>
      </map>
      <map>
        <map_step map_field_set="URL" map_null="1"/>
      </map>
    </maps>
  </sourcemap>
</config>

您也可以只使用一个map子句并列出要从中删除 URL 的所有条目类型,每个条目类型占一行per_entrytype

答案4

基于@PLK 的回答,这里有一个示例biber.conf,它有选择地从指定的条目类型中删除 URL,而不是有选择地保留它们。

请注意,条目类型不区分大小写。

<?xml version="1.0" encoding="UTF-8"?>
<config>
  <sourcemap>
    <maps datatype="bibtex" map_overwrite="1">
      <map>
        <!-- Hide urls in listed types -->
        <per_type>InProceedings</per_type>
        <per_type>Book</per_type>
        <per_type>Conference</per_type>
        <per_type>InCollection</per_type>
        <per_type>Article</per_type>
        <map_step map_field_set="URL" map_null="1"/>
        <map_step map_field_set="UrlDate" map_null="1"/>
      </map>
    </maps>
  </sourcemap>
</config>

相关内容