![使用变音符号对字符进行排序](https://linux22.com/image/373316/%E4%BD%BF%E7%94%A8%E5%8F%98%E9%9F%B3%E7%AC%A6%E5%8F%B7%E5%AF%B9%E5%AD%97%E7%AC%A6%E8%BF%9B%E8%A1%8C%E6%8E%92%E5%BA%8F.png)
有没有一种简单的方法可以让 BibLaTeX 将“ä”排序为“ae”,将“ö”排序为“oe”,将“ü”排序为“ue”?
以下是一个例子:
\documentclass{article}
\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@article{sturm, author = {Sturm}}
@article{stutzel, author = {Stützel}}
\end{filecontents}
\usepackage{biblatex}
\addbibresource{\jobname.bib}
\begin{document}
\nocite{*}
\printbibliography
\end{document}
Sturm 出现在 Stützel 之前,而我想要的是相反的情况。我知道我可以使用类似 的字段来处理这个问题sortkey
,但我希望有一个更自动化的解决方案,可以添加到我自己的自定义样式中。
此外,如果可以根据字段有条件地完成此操作,那就太好了langid
(我认为这应该是德语的默认行为),但这可能太过雄心勃勃,无论条目的语言如何,我都对这种方法感到满意。
答案1
biblatex
您可以通过以下选项加载来指定这种排序样式sortlocale=de_DE_phonebook
:
\usepackage[sortlocale=de_DE_phonebook]{biblatex}
不过,我不确定是否可以使用语言环境针对每个条目执行此操作。您可以使用源映射来执行此操作,但这似乎是个坏主意。
答案2
最好使用与 David 的回答中相同的全局方案对所有条目进行排序。使用不同的排序规则可能会让读者感到非常困惑(您不应该指望他们知道所有被引作者母语的排序怪癖),这在简短列表中可能不会很明显,因为不同的排序规则只会影响非单词首字母,但如果两个“Ü”在参考书目中被排序在不同的末尾,因为一个是德语,一个是爱沙尼亚语,那么这可能会非常令人困惑。
但理论上,您可以限制变音符号转换为德语条目(如字段中标记的那样langid
)。对于这些条目,我们自己进行“ä”->“ae”等转换,并将结果存储在字段中sortname
。
\documentclass{article}
\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@book{sturm, author = {Sturm}}
@book{stutzel, author = {Stützel}, langid={ngerman}}
@book{basel, author = {Basel}}
@book{bassel, author = {Baßer}, langid={ngerman}}
@book{basta, author = {Basta}}
@book{oesel, author = {Ösel}, langid={ngerman}}
@book{pinguino, author = {Pingüino}}
@book{pingufin, author = {Pingufin}}
@book{pinguzzo, author = {Pinguzzo}}
\end{filecontents}
\usepackage{biblatex}
\addbibresource{\jobname.bib}
\DeclareSourcemap{
\maps[datatype=bibtex]{
\map[foreach={author,editor,translator}]{
\step[fieldsource=langid, match=\regexp{\A(n)?((swiss)?german|austrian)\Z}, final]
\step[fieldsource=\regexp{$MAPLOOP},
match=\regexp{(([aouAOU]\x{0308})|\x{00df})},
final]
\step[fieldset=sortname, origfieldval, final]
\step[fieldsource=sortname, match=\regexp{(a|o|u|A|O|U)\x{0308}}, replace={$1e}]
\step[fieldsource=sortname, match=\regexp{\x{00df}}, replace={ss}]
}
}
}
\begin{document}
\nocite{*}
\printbibliography
\end{document}
注意巴塞尔的“ß”被排序为“ss”,因此它最终排在巴斯塔。施图策尔的“ü”被排序为“ue”,因此它排在前面斯特姆。企鹅是西班牙语,没有被触及,因此它排在企鹅人(而不是之前,好像它被转换成平格诺)。