如何按照 bib 文件中的字段所示按语言对 biblatex 书目进行排序?

如何按照 bib 文件中的字段所示按语言对 biblatex 书目进行排序?

以下问题与这个问题,但这个重复的问题从来没有得到过一个具体的答案,而且它是11年前就被提出并回答过的。


以下 LaTeX 文档已保存在 中~/Test.tex

\documentclass{article}
\usepackage{biblatex}
\addbibresource{TestBib.bib}
\begin{document}
First English citation~\cite{einstein}.
First Gibberish citation~\cite{vierstein}.
Second English citation~\cite{zweistein}.
Second Gibberish citation~\cite{fuenfstein}.
Third English citation~\cite{dreistein}. 
Third Gibberish citation~\cite{sechsstein}.
\printbibliography
\end{document}

以下 BibTex 列表已保存在 中~/TestBib.bib

@book{einstein,
   author = "Albert Einstein",
   title = "First In, First Out",
   year = 1900,
   langid = english
}
@book{zweistein,
   author = "Balbert Zweistein",
   title = "Always the Bridegroom, Never the Bride",
   year = 1950,
   langid = english
}
@book{dreistein,
   author = "Calbert Dreistein",
   title = "Three Is Company",
   year = 2000,
   langid = english
}
@book{vierstein,
   author = "Calbert Einstein",
   title = "First In, First Out (Gibberish Edition)",
   year = 1900,
   langid = gibberish
}
@book{fuenfstein,
   author = "Albert Zweistein",
   title = "Always the Bridegroom, Never the Bride (Gibberish Edition)",
   year = 1950,
   langid = gibberish
}
@book{sechsstein,
   author = "Balbert Dreistein",
   title = "Three Is Company (Gibberish Edition)",
   year = 2000,
   langid = gibberish
}

然后在终端中执行以下四个命令。

\> cd ~  
\> lualatex Test  
\> biber Test  
\> lualatex Test

所有执行均成功完成,最后文件~/Test.pdf已存在。在 PDF 查看器中打开时,文件显示如下。(屏幕截图中仅捕获了显示的相关部分。)

一篇附有双语参考书目的简单文章

我该如何设置,以便按以下方式对参考书目进行排序:将“langid是”的条目gibberish列在english“是”的条目之前?(每个语言组都应按照正常顺序排序,似乎是:姓氏、名字、头衔。)

一次尝试

下列的Ulrike Fischer 的建议我尝试定义如下的排序模板。

\documentclass{article}
\usepackage[sorting=sample]{biblatex}
\DeclareSortingTemplate{sample}{ \sort[direction=descending]{ \field{langid} } }
\addbibresource{TestBib.bib}
\begin{document}
First English citation~\cite{einstein}.
First Gibberish citation~\cite{vierstein}.
Second English citation~\cite{zweistein}.
Second Gibberish citation~\cite{fuenfstein}.
Third English citation~\cite{dreistein}. 
Third Gibberish citation~\cite{sechsstein}.
\printbibliography
\end{document}

生成的 PDF 文件的参考书目显示如下。

声明排序模板

这个输出有两个问题。

  1. langid尽管我进行了指示,但结果并没有按照字段排序。这是为什么?

  2. 即使按照字段排序langid,我使用的排序选项,即direction,也只允许两种选择:ascending、 和descending。如果只langid使用两个值,这已经足够了,就像我的简单示例一样。但如果有两个以上的值,比如englishhebrewnorwegian,并且我希望hebrew条目位于 和 之前,english该怎么办norwegian

答案1

以下解决方案的灵感来自邮报moewe 链接到此评论我对 meowe 的代码进行了简化,并对其逻辑做了一些如下改动。

langidmoewe 的代码对由值 、 和 组成的值russiangreek施加了全序english。 的书目条目langidrussian首先分组,然后是所有greek条目,最后是所有english条目。

相比之下,我的代码在集合上指定了偏序一切皆有可能 langid值。将首先对 进行分组的书目条目languidgibberish然后对所有其他条目进行分组。

该逻辑利用了这样一个事实:除非明确指定,否则书目条目的字段preorder会自动设置为mm,如 2022 年 7 月 12 日手册 v.3.18b 第 3.6 节“排序选项”第二段所述biblatex

\documentclass{article}
\usepackage{biblatex}
\DeclareSourcemap {
   \maps {
      \map {
         \step [
            fieldsource=langid,
            match=gibberish,
            fieldset=presort,
            fieldvalue=a
         ]
      }
   }
}
\addbibresource{TestBib.bib}
\begin{document}
\cite{a}\cite{b}\cite{c}
\printbibliography
\end{document}

当以下 BibTeX 列表保存在~/TestBib.bib

@book{a,
   author = {a},
   title = {a},
   year = {0},
   langid = {english}
}
@book{b,
   author = {b},
   title = {b},
   year = {0},
   langid = {gibberish}
}
@book{c,
   author = {c},
   title = {c},
   year = {0},
   langid = {jibberish}
}

执行后生成的 PDF 文件

\> cd ~  
\> lualatex Test  
\> biber Test  
\> lualatex Test

显示如下:

书目条目的开头会首先出现“胡言乱语”的内容。

相关内容