使用 Biblatex 和 Moderncv 进行反向编号

使用 Biblatex 和 Moderncv 进行反向编号

这个问题是对先前的问题。我正在使用 ModernCV 和 Biblatex 制作我的简历。我使用给出的解决方案创建了一份出版物列表,按类型和年份排序。

我的问题是,如何在不改变其他任何内容的情况下,反转出版物的编号(最高的在前)。存在解决方案如何从多个.bib 文件执行此操作,如果不可能的话,我可能会考虑该选项,但可以继续使用单个 bib 文件的选项是理想的。

答案1

如果您只是希望反转编号(而不是顺序),那么您可以使用以下方法:

在此处输入图片描述

\documentclass{moderncv}
\usepackage{biblatex,refcount}

\makeatletter
% https://tex.stackexchange.com/q/66829/5764
\newcounter{numbibentries}
\renewbibmacro*{finentry}{\stepcounter{numbibentries}\finentry}
% https://tex.stackexchange.com/q/123805/5764
\defbibenvironment{bibliography}
  {\list
     {\printtext[labelnumberwidth]{% label format from numeric.bbx
        \printfield{prefixnumber}%
        \number\numexpr\getrefnumber{num-bib-entries}-\abx@field@labelnumber+1\relax}}
     {\setlength{\topsep}{0pt}% layout parameters from moderncvstyleclassic.sty
      \setlength{\labelwidth}{\hintscolumnwidth}%
      \setlength{\labelsep}{\separatorcolumnwidth}%
      \leftmargin\labelwidth%
      \advance\leftmargin\labelsep}%
      \sloppy\clubpenalty4000\widowpenalty4000}
  {\endlist}
  {\item}
\AtEndDocument{% Add reference at end of document to remember number of bib-entries.
  \edef\@currentlabel{\thenumbibentries}\label{num-bib-entries}}
\makeatother

\moderncvstyle{classic}
\moderncvcolor{blue}
\firstname{John}
\familyname{Doe}

\addbibresource{biblatex-examples.bib}
\begin{document}
\makecvtitle
\nocite{companion,knuth:ct:a,knuth:ct:b}
\printbibliography[title={Publications}]
\end{document}

这个想法是\bibitem点击每个“ ”来计算引用数。一旦全部计算完毕,我们\label在文档末尾插入一个(使用\AtEndDocument)。此标签被检索并用于计算(得益于可扩展\getrefnumberrefcount) 来反转编号。


对于每个文档的多个参考书目,您可以\citesinthissection{<num>}按以下定义使用:

\documentclass{moderncv}
\usepackage[defernumbers=true]{biblatex}

\makeatletter
\newcommand{\citesinthissection}[1]{\xdef\@totalcites{#1}}
% https://tex.stackexchange.com/q/123805/5764
\defbibenvironment{bibliography}
  {\list
     {\printtext[labelnumberwidth]{% label format from numeric.bbx
        \printfield{prefixnumber}%
        \number\numexpr\@totalcites-\abx@field@labelnumber+1\relax}}
     {\setlength{\topsep}{0pt}% layout parameters from moderncvstyleclassic.sty
      \setlength{\labelwidth}{\hintscolumnwidth}%
      \setlength{\labelsep}{\separatorcolumnwidth}%
      \leftmargin\labelwidth%
      \advance\leftmargin\labelsep}%
      \sloppy\clubpenalty4000\widowpenalty4000}
  {\endlist}
  {\item}
\makeatother

\moderncvstyle{classic}
\moderncvcolor{blue}
\firstname{John}
\familyname{Doe}

\addbibresource{biblatex-examples.bib}
\begin{document}
\makecvtitle
\nocite{companion,knuth:ct:a,knuth:ct:b}
\citesinthissection{3}% There are 3 cites in this section
\printbibliography[notkeyword=primary,title={Publications}]
\nocite{aristotle:anima,aristotle:physics}
\citesinthissection{2}% There are 2 cites in this section
\printbibliography[keyword=primary,resetnumbers=true,title={Other Publications}]
\end{document}

记住,每当您向参考书目添加元素时,都要更新项目数。从第二个开始使用defernumbers=true全局选项和选项。您可能需要使用/ options 之类的选项,以便在每个参考书目部分中准确打印您想要的内容。resetnumbers=true\printbibliographykeywordnotkeyword

相关内容