按引用数对 (biblatex)-keys 列表进行排序

按引用数对 (biblatex)-keys 列表进行排序

由于这是一个相当具体的问题,并且代替了 MWE 一些背景:

我正在开发 tufte-book 类的个性化版本。在此过程中,我现在认为我需要一种方法来按其数字的顺序对 biblatex 键列表进行排序。这是因为我扩展了 cite 命令。(注意:tufte-book 在 vanilla 版本中使用 bibtex,我将其更改为带有 biber 后端的 biblatex,以防万一)

在 tufte-book 中,当你调用时,\cite{key1,key2,..}真正被调用的是

% Normal \cite behavior
\newcounter{@tufte@num@bibkeys}%
\newcommand{\@tufte@normal@cite}[2][0pt]{%
  \hiddencite{#2}
  % Snag the last bibentry in the list for later comparison
  \let\@temp@last@bibkey\@empty%
  \@for\@temp@bibkey:=#2\do{\let\@temp@last@bibkey\@temp@bibkey}%
  \marginnote[#1]{%
    % Loop through all the bibentries, separating them with semicolons and spaces
    \normalsize\normalfont\@tufte@citation@font%
    \setcounter{@tufte@num@bibkeys}{0}%
    \@for\@temp@bibkeyx:=#2\do{%
      \ifthenelse{\equal{\@temp@last@bibkey}{\@temp@bibkeyx}}%
        {\ifthenelse{\equal{\value{@tufte@num@bibkeys}}{0}}{}{and\ }%
         \@tufte@trim@spaces\@temp@bibkeyx% trim spaces around bibkey
         \hiddencite{\@temp@bibkeyx}\bibentry{\@temp@bibkeyx}}%
        {\@tufte@trim@spaces\@temp@bibkeyx% trim spaces around bibkey
         \hiddencite{\@temp@bibkeyx}\bibentry{\@temp@bibkeyx};\ }%
      \stepcounter{@tufte@num@bibkeys}%
    }%
  }%
}

这已经包括了我的一些修改(目标是将完整的引文作为边注而不是脚注,并显示引文编号,见下图)。Hiddencite 只是我存储的原始引文,因为它是从 tufte-book 更改的。但是,它的效果不如原始的 cite 命令,因为列表 ( #2) 没有排序。

这是一个示例结果来展示我的问题 引文

生成于

some citations\cite{Tufte2001,Tufte1990,Tufte1997,Tufte2006}
same citations in different ordering \cite{Tufte2001,Tufte2006,Tufte1990,Tufte1997}

我的目标是找到一种方法,使两个调用都生成相同的输出(在正文和边注中)

现在真正的问题是:我如何对我拥有的引用键列表进行排序?我想要将参数转换key1,key3,key2,key4key1,key2,key3,key4。(假设这是正确的顺序)。

我确实尝试研究 natbib 和 biblatex 包如何处理这个问题,但坦率地说,我无法理解代码。

最后的评论:有人问我如何实现这种行为,这不是我的想法(就我个人而言,最后给出一个简单的参考书目就足够了)

答案1

评论中的 moewe 是对的,只需使用 biblatex 即可轻松实现

 \usepackage[
  style=numeric-comp,
  backend=biber,
  sorting=none
  ]{biblatex}

\addbibresource{sample-handout.bib}
\let\truecite\cite
\DeclareCiteCommand{\footcite}[\marginnote]%
  {\usebibmacro{prenote}}
{\truecite{\thefield{entrykey}} \printnames{author},\
\printfield{title},\printfield{year}}
  {\multicitedelim}
  {\usebibmacro{postnote}}
\renewcommand{\cite}[1]{\truecite{#1}\footcite{#1}}

我将单独处理侧注中的引用(按照评论中的建议移至答案)

相关内容