是否可以自动生成引用的排名?

是否可以自动生成引用的排名?

我想知道我引用最多的论文或书籍。那么,是否可以自动生成引用的排名?(即自动计算所有参考文献被引用的次数,然后生成有序列表)?我知道我可以使用编辑器来查找特定参考文献被引用的次数,但我需要对所有引用都这样做,这非常痛苦。

我目前正在使用包natbibcitep引用。我正在使用一个自定义文档类,我认为它是从书籍类继承而来的。

答案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}

收藏全文:3,文章全文:2,杂项全文:1


请注意,我只是重新定义\citation,并没有尝试附加\entrykeycitecount到原始定义。这通常不是问题,因为 LaTeX 内核、标准类和natbib\citation定义为不执行任何操作,但您可能应该检查这是否与您使用的任何其他内容发生冲突。

相关内容