我需要知道我的.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}
请注意,如果您的参考书目使用涉及条目克隆的功能(例如),这可能仍不会产生预期的输出。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}}}
{}%
}
我确信有人可以举出更多病态的例子。所以这完全取决于您的设置。