我想知道我引用最多的论文或书籍。那么,是否可以自动生成引用的排名?(即自动计算所有参考文献被引用的次数,然后生成有序列表)?我知道我可以使用编辑器来查找特定参考文献被引用的次数,但我需要对所有引用都这样做,这非常痛苦。
我目前正在使用包natbib
并citep
引用。我正在使用一个自定义文档类,我认为它是从书籍类继承而来的。
答案1
每个命令都会将\cite
表单的引用请求写入文件。因此,如果您想要了解某个条目被引用的频率,您可以重新定义以计算该数据。只需抓住列表循环并增加与您找到的每个键相关联的计数器即可。\citation{<key_1>,...,<key_n>}
.aux
\citation
这是一个expl3
解决方案,它最后还根据引用次数对引用的条目键进行排序。
\documentclass[british]{book}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{babel}
\usepackage{natbib}
\usepackage{expl3}
\usepackage{xparse}
\ExplSyntaxOn
\seq_new:N \l__nbro_citedkeys_seq
\cs_new_protected:Npn \__nbro_count_entrykey:n #1
{
\seq_if_in:NnF \l__nbro_citedkeys_seq {#1}
{
\seq_gput_right:Nn \l__nbro_citedkeys_seq {#1}
\int_new:c {l__nbro_citecounter_#1}
}
\int_gincr:c {l__nbro_citecounter_#1}
}
\NewDocumentCommand \entrykeycitecount { >{ \SplitList{,}}m }
{
\ProcessList {#1} { \__nbro_count_entrykey:n }
}
\cs_new_protected:Npn \__nbro_sort_by_citecount:N #1
{
\seq_sort:Nn #1
{
\int_compare:nNnTF
{ \int_use:c {l__nbro_citecounter_##1} }
>
{ \int_use:c {l__nbro_citecounter_##2} }
{ \sort_return_same: }
{ \sort_return_swapped: }
}
}
\cs_generate_variant:Nn \int_to_arabic:n { v }
\cs_new:Npn \__nbro_print_entrykey_citecount:n #1
{
#1:~\int_to_arabic:v {l__nbro_citecounter_#1} \par
}
\NewDocumentCommand \printcitecounts {}
{
\__nbro_sort_by_citecount:N \l__nbro_citedkeys_seq
\seq_map_function:NN \l__nbro_citedkeys_seq \__nbro_print_entrykey_citecount:n
}
\ExplSyntaxOff
\renewcommand{\citation}[1]{%
\entrykeycitecount{#1}}
\begin{document}
\printcitecounts
\citep{article-full,incollection-full,misc-full}
\citep{incollection-full}
\citep{article-full}
\citep{incollection-full}
\bibliographystyle{plainnat}
\bibliography{xampl}
\end{document}
请注意,我只是重新定义\citation
,并没有尝试附加\entrykeycitecount
到原始定义。这通常不是问题,因为 LaTeX 内核、标准类和natbib
已\citation
定义为不执行任何操作,但您可能应该检查这是否与您使用的任何其他内容发生冲突。