我有三个 .bib 文件,其中将我的简历书目分为“期刊”、“会议”和“论文”。我按照以下方法针对这三种类型计算每个 .bib 文件的条目数量:
\newtotcounter{no_journals}
\AtEveryBibitem{
\ifkeyword{journal}{\stepcounter{no_journals}}{}%
}
\defbibheading{journals}{International Journals}
\addbibresource[label=journals]{journals}
...然后我将结果打印在特定部分,如下所示:
\begin{refsection}[journals.bib]
\nocite{*}
\begin{refcontext}
\printbibliography
\end{refcontext}
\end{refsection}
\begin{itemize}
\item Number of International Journals: \total{no_journals}\
\end{itemize}
对于我的长篇简历,它运行良好;但是对于简历,我只想列出期刊、会议和论文的总数,而不打印完整的参考书目。为此,我有以下命令:
\begin{refsection}[journals.bib]
\nocite{*}
\begin{refcontext}
\printbibliography
\end{refcontext}
\end{refsection}
\begin{itemize}
\item International Journals: \total{no_journals}\, International Conferences: \total{no_conferences}\, Thesis Conducted: \total{no_thesis}\
\end{itemize}
正如您在命令本身中看到的,如果我没有对每种类型(期刊,会议和论文)调用“ \printbibliography”,则参考书目文件中的条目将不被计算。
- 有没有什么方法可以让我不用调用“\printbibliography”来计算它们?
- 如果除了强制调用“\printbibliography”之外没有其他选择,我可以让它不打印参考书目吗?就像“试运行”方法一样?
答案1
要执行某些代码而不打印它,您可以在 中执行它\setbox
,这会将结果存储在使用的框中,因此\setbox0
将结果存储在框寄存器 0(这是一个临时使用的临时寄存器)中。它还需要我们选择的框类型,\vbox
因为这允许的内容比\hbox
其内容更多。因此,要在\printbibliography
不排版的情况下使用它,您可以使用:
\setbox0\vbox{\printbibliography}
答案2
如果条目是\nocite
'd 或\cite
'd,你可以\AtDataInput
使用\AtEveryBibitem
\documentclass{article}
\usepackage{biblatex}
\addbibresource{biblatex-examples.bib}
\newcounter{no_journals}
\newcounter{no_conferences}
\newcounter{no_thesis}
\AtDataInput{%
\ifentrytype{article}
{\stepcounter{no_journals}}
{\ifentrytype{inproceedings}
{\stepcounter{no_conferences}}
{\ifentrytype{thesis}
{\stepcounter{no_thesis}}
{}}}}
\begin{document}
\nocite{sigfridsson,worman,baez/article,geer}
journals: \arabic{no_journals}, theses: \arabic{no_thesis}
\end{document}
\AtDataInput
在读取文件.bbl
时,对 中的每个条目每个 refsection 执行一次。对 中打印的每个项目都执行一次。.bbl
\AtEveryBibitem
\printbibliography