以下问题与这个问题,但这个重复的问题从来没有得到过一个具体的答案,而且它是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 文件的参考书目显示如下。
这个输出有两个问题。
langid
尽管我进行了指示,但结果并没有按照字段排序。这是为什么?即使按照字段排序
langid
,我使用的排序选项,即direction
,也只允许两种选择:ascending
、 和descending
。如果只langid
使用两个值,这已经足够了,就像我的简单示例一样。但如果有两个以上的值,比如english
、hebrew
和norwegian
,并且我希望hebrew
条目位于 和 之前,english
该怎么办norwegian
?
答案1
以下解决方案的灵感来自邮报moewe 链接到此评论我对 meowe 的代码进行了简化,并对其逻辑做了一些如下改动。
langid
moewe 的代码对由值 、 和 组成的值russian
集greek
施加了全序english
。 的书目条目langid
将russian
首先分组,然后是所有greek
条目,最后是所有english
条目。
相比之下,我的代码在集合上指定了偏序一切皆有可能 langid
值。将首先对 进行分组的书目条目languid
,gibberish
然后对所有其他条目进行分组。
该逻辑利用了这样一个事实:除非明确指定,否则书目条目的字段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
显示如下: