使用 biblatex 获取 bib 文件中的条目数

使用 biblatex 获取 bib 文件中的条目数

我需要知道我的.bib文件中有多少个条目。

由于存在不同的参考文献并且出版物出现在各种参考文献中,因此使用某种计数器似乎是没有意义的。

在下面的例子中,我希望.bib文件中的四个出版条目的数值为“4”。

\documentclass{article}
\begin{filecontents}{\jobname.bib}
@article{A,
  author          = {A Author},
  keywords        = {A1},
}

@article{B,
  author          = {B Author},
  keywords        = {A2},
}

@article{C,
  author          = {C Author},
  keywords        = {A2,A3},
}

@article{D,
  author          = {D Author},
  keywords        = {A1,A3},
}

\end{filecontents}
\usepackage{bashful}
\usepackage[%
  style         = ext-numeric,
  backend       = biber,
  defernumbers  = true,
 ]{biblatex} 
\addbibresource{\jobname.bib}
\begin{document}
There are in total 
    XX 
publications. 

\newcommand\crcbib[1]{%
  \begin{refsection}
    \section{Project #1}
    \nocite{*}
    \printbibliography[%
      resetnumbers = true,
      heading = none,
      keyword = {#1},
    ]
  \end{refsection}
} 
\crcbib{A1}
\crcbib{A2}
\crcbib{A3}
\end{document}

在此处输入图片描述

答案1

您无法.bib从 LaTeX 计算文件中的任何内容,您只能计算实际进入.bbl文件的条目。(如果\nocite{*}已使用,您将从中获得所有条目.bib.bbl因此这不必太担心。但是,如果您有多个.bib文件,则无法按文件区分。有解决方法,但没有官方解决方案。)

由于您有多个 refsections,因此您不能只使用 为文件中的每个项目增加一个计数器.bbl\AtDataInput但您可以为之前从未见过的每个 entrykey 增加一个计数器。

\documentclass{article}

\usepackage[%
  style        = ext-numeric,
  backend      = biber,
  defernumbers = true,
 ]{biblatex} 

\newcounter{totalbibentries}
\newcommand*{\listcounted}{}

\makeatletter
\AtDataInput{%
  \xifinlist{\abx@field@entrykey}\listcounted
    {}
    {\stepcounter{totalbibentries}%
     \listxadd\listcounted{\abx@field@entrykey}}%
}
\makeatother

\begin{filecontents}{\jobname.bib}
@article{A,
  author          = {A Author},
  keywords        = {A1},
}
@article{B,
  author          = {B Author},
  keywords        = {A2},
}
@article{C,
  author          = {C Author},
  keywords        = {A2,A3},
}
@article{D,
  author          = {D Author},
  keywords        = {A1,A3},
}
\end{filecontents}
\addbibresource{\jobname.bib}

\begin{document}
There are in total 
    \thetotalbibentries\
publications. 

\newcommand\crcbib[1]{%
  \begin{refsection}
    \section{Project #1}
    \nocite{*}
    \printbibliography[%
      resetnumbers = true,
      heading = none,
      keyword = {#1},
    ]
  \end{refsection}
} 
\crcbib{A1}
\crcbib{A2}
\crcbib{A3}
\end{document}

总共有 4 篇出版物。


请注意,如果您的参考书目使用涉及条目克隆的功能(例如),这可能仍不会产生预期的输出。related在这种情况下,我们可能必须使用计数器来\iftoggle{blx@skipbib}跳过参考书目中将被跳过的条目

\AtDataInput{%
  \iftoggle{blx@skipbib}
    {}
    {\xifinlist{\abx@field@entrykey}\listcounted
      {}
      {\stepcounter{totalbibentries}%
       \listxadd\listcounted{\abx@field@entrykey}}}%
}

或者明确过滤克隆的条目

\AtDataInput{%
  \ifundef\abx@field@clonesourcekey
    {\xifinlist{\abx@field@entrykey}\listcounted
      {}
      {\stepcounter{totalbibentries}%
       \listxadd\listcounted{\abx@field@entrykey}}}
    {}%
}

我确信有人可以举出更多病态的例子。所以这完全取决于您的设置。

相关内容