我正在努力编写包含不同文字作者姓名的参考书目(biblatex、biber)。理想情况下,参考书目会将非拉丁字母视为拉丁字母,并对其进行相应排序(例如德意志联邦共和国作为陀思妥耶夫斯基)。相反,名字采用西里尔字母的作者似乎默认被放在参考书目的末尾。
我想我可以使用sorting=debug
它来根据输入键对参考书目进行排序。因为我使用陀思妥耶夫斯基代替德意志联邦共和国在输入键中,这部分解决了我的问题。但这样,又出现了另一个问题:带有变音符号的名称无法正确排序。在输入键中,我例如使用A代替A,这意味着塔赫特将被排序为塔赫特(见下文的 MWE)。由于变音符号是爱沙尼亚语字母表中的最后一个字母,因此这会产生很大的不同。
因此,MWE 中作者的默认顺序是:托尔金、塔赫特、德意志
使用sorting=debug
,我得到:托尔金, 塔特, 托尔金
但我真正想要的是:托尔金, 托尔金, 塔特
有什么好的办法可以修复这个问题吗?
这是MWE:
\documentclass[12pt]{report}
\usepackage{filecontents}
\begin{filecontents*}{\jobname.bib}
@book{Dostojevski2014,
title={Двойник},
author={Фёдор Михайлович Достоевский},
year={2014},
location = {Москва},
publisher={Aegitas},
langid={russian},
shortauthor = {Dostojevski},
}
@book{Taht2020,
title = {Taevas},
author = {Põhja Täht},
year = {2020},
langid = {estonian}
}
@book{Tolkien1937,
title = {The Hobbit},
author = {J. R. R. Tolkien},
year = {1937},
langid={english}
}
\end{filecontents*}
\usepackage[utf8]{inputenc}
\usepackage[T2A, T1]{fontenc}
\usepackage[russian, english, estonian]{babel}
\usepackage[bibencoding=auto, backend=biber, autolang = other, style=authoryear, sorting=debug, dashed=false, citestyle=authoryear-comp, maxcitenames=2]{biblatex}
\usepackage[babel]{csquotes}
\usepackage{xpatch, filecontents}
\xpatchbibmacro{date+extradate}{%
\printtext[parens]%
}{%
\setunit*{\space}%
\printtext%
}{}{}
\renewbibmacro*{begentry}{%
\ifnameundef{shortauthor}
{}
{\textbf{\printnames{shortauthor}%
\addspace{=}\space}}}
\bibliography{\jobname}
\DeclareFieldFormat*{title}{#1}
\xpretobibmacro{author}{\mkbibbold\bgroup}{}{}
\xapptobibmacro{author}{\egroup}{}{}
\xpretobibmacro{bbx:editor}{\mkbibbold\bgroup}{}{}
\xapptobibmacro{bbx:editor}{\egroup}{}{}
\begin{document}
Citing different authors (\cite{Dostojevski2014}, \cite{Tolkien1937}, \cite{Taht2020})
\printbibliography
\end{document}
答案1
在您使用的 MWE 中,sorting=debug,
它仅根据条目的键对条目进行排序。此排序方案不适用于正常使用,但它解释了为什么您会得到这样的结果。如果您删除sorting=debug,
(从而sorting=nyt,
从中获得style=authoryear,
),拉丁文字的结果将更好塔赫特后托尔金(因为它将遵循爱沙尼亚惯例:除非另有指示,否则biblatex
始终采用主文档语言中的排序规则)
西里尔文德意志联邦共和国但是,现在排在所有拉丁字母之后。
biblatex
可以选择按音译内容对字段进行排序(搜索\DeclareSortTranslit
在biblatex
文档中)目前,此功能适用于俄语和梵语 IAST。
因此添加
\DeclareSortTranslit{
\translit[russian]{setnames}{russian}{bgn/pcgn-standard}
}
或者
\DeclareSortTranslit{
\translit[russian]{setnames}{russian}{ala-lc}
}
根据你喜欢的罗马化方案,应该排序费多尔·米哈伊洛维奇·多斯托夫斯基在下面陀思妥耶夫斯基,费奥多尔·米哈伊洛维奇(bgn/pcgn-standard
) 或者费奥多尔·米哈伊洛维奇·陀思妥耶夫斯基(ala-lc
)。
\documentclass[12pt]{report}
\usepackage[utf8]{inputenc}
\usepackage[T2A, T1]{fontenc}
\usepackage[russian, english, estonian]{babel}
\usepackage[babel]{csquotes}
\usepackage[backend=biber, style=authoryear-comp, autolang = other, dashed=false]{biblatex}
\usepackage{xpatch}
\xpatchbibmacro{date+extradate}{%
\printtext[parens]%
}{%
\setunit*{\space}%
\printtext%
}{}{}
\renewbibmacro*{begentry}{%
\ifnameundef{shortauthor}
{}
{\textbf{\printnames{shortauthor}%
\addspace{=}\space}}}
\DeclareFieldFormat*{title}{#1}
\xpretobibmacro{author}{\mkbibbold\bgroup}{}{}
\xapptobibmacro{author}{\egroup}{}{}
\xpretobibmacro{bbx:editor}{\mkbibbold\bgroup}{}{}
\xapptobibmacro{bbx:editor}{\egroup}{}{}
\renewcommand*{\multicitedelim}{\addcomma\space}
\DeclareSortTranslit{
\translit[russian]{setnames}{russian}{bgn/pcgn-standard}
}
\begin{filecontents*}{\jobname.bib}
@book{Dostojevski2014,
title = {Двойник},
author = {Фёдор Михайлович Достоевский},
year = {2014},
location = {Москва},
publisher = {Aegitas},
langid = {russian},
shortauthor = {Dostojevski},
}
@book{Taht2020,
title = {Taevas},
author = {Põhja Täht},
year = {2020},
langid = {estonian}
}
@book{Tolkien1937,
title = {The Hobbit},
author = {J. R. R. Tolkien},
year = {1937},
langid = {english},
}
\end{filecontents*}
\addbibresource{\jobname.bib}
\begin{document}
Citing different authors \autocite{Dostojevski2014,Tolkien1937,Taht2020}
\printbibliography
\end{document}
如果这些罗马化方案都不能满足您的要求,您仍然可以使用字段强制手动排序sortname
(音译复制自爱沙尼亚语维基百科)。
@book{Dostojevski2014,
title = {Двойник},
author = {Фёдор Михайлович Достоевский},
year = {2014},
location = {Москва},
publisher = {Aegitas},
langid = {russian},
shortauthor = {Dostojevski},
sortname = {Fjodor Mihhailovitš Dostojevski},
}
平均能量损失
\documentclass[12pt]{report}
\usepackage[utf8]{inputenc}
\usepackage[T2A, T1]{fontenc}
\usepackage[russian, english, estonian]{babel}
\usepackage[babel]{csquotes}
\usepackage[backend=biber, style=authoryear-comp, autolang = other, dashed=false]{biblatex}
\usepackage{xpatch}
\xpatchbibmacro{date+extradate}{%
\printtext[parens]%
}{%
\setunit*{\space}%
\printtext%
}{}{}
\renewbibmacro*{begentry}{%
\ifnameundef{shortauthor}
{}
{\textbf{\printnames{shortauthor}%
\addspace{=}\space}}}
\DeclareFieldFormat*{title}{#1}
\xpretobibmacro{author}{\mkbibbold\bgroup}{}{}
\xapptobibmacro{author}{\egroup}{}{}
\xpretobibmacro{bbx:editor}{\mkbibbold\bgroup}{}{}
\xapptobibmacro{bbx:editor}{\egroup}{}{}
\renewcommand*{\multicitedelim}{\addcomma\space}
\begin{filecontents*}{\jobname.bib}
@book{Dostojevski2014,
title = {Двойник},
author = {Фёдор Михайлович Достоевский},
year = {2014},
location = {Москва},
publisher = {Aegitas},
langid = {russian},
shortauthor = {Dostojevski},
sortname = {Fjodor Mihhailovitš Dostojevski},
}
@book{Taht2020,
title = {Taevas},
author = {Põhja Täht},
year = {2020},
langid = {estonian}
}
@book{Tolkien1937,
title = {The Hobbit},
author = {J. R. R. Tolkien},
year = {1937},
langid = {english},
}
\end{filecontents*}
\addbibresource{\jobname.bib}
\begin{document}
Citing different authors \autocite{Dostojevski2014,Tolkien1937,Taht2020}
\printbibliography
\end{document}
您已经在字段中给出了罗马化shortauthor
。如果这对您来说已经足够了,并且您不需要全名进行排序,您可以通过将字段添加到排序模板来biblatex
开始考虑shortauthor
排序(通常不需要)。请注意,这当然会影响“正常”用途,shortauthor
例如
author = {{National Aeronautics and Space Administration}},
shortauthor = {NASA},
现在将归类为美国宇航局并不是国家航空和航天局。
\documentclass[12pt]{report}
\usepackage[utf8]{inputenc}
\usepackage[T2A, T1]{fontenc}
\usepackage[russian, english, estonian]{babel}
\usepackage[babel]{csquotes}
\usepackage[backend=biber, style=authoryear-comp, autolang = other, dashed=false]{biblatex}
\DeclareSortingTemplate{nyt}{
\sort{
\field{presort}
}
\sort[final]{
\field{sortkey}
}
\sort{
\field{sortname}
\field{shortauthor}
\field{author}
\field{shorteditor}
\field{editor}
\field{translator}
\field{sorttitle}
\field{title}
}
\sort{
\field{sortyear}
\field{year}
}
\sort{
\field{sorttitle}
\field{title}
}
\sort{
\field{volume}
\literal{0}
}
}
\usepackage{xpatch}
\xpatchbibmacro{date+extradate}{%
\printtext[parens]%
}{%
\setunit*{\space}%
\printtext%
}{}{}
\renewbibmacro*{begentry}{%
\ifnameundef{shortauthor}
{}
{\textbf{\printnames{shortauthor}%
\addspace{=}\space}}}
\DeclareFieldFormat*{title}{#1}
\xpretobibmacro{author}{\mkbibbold\bgroup}{}{}
\xapptobibmacro{author}{\egroup}{}{}
\xpretobibmacro{bbx:editor}{\mkbibbold\bgroup}{}{}
\xapptobibmacro{bbx:editor}{\egroup}{}{}
\renewcommand*{\multicitedelim}{\addcomma\space}
\begin{filecontents*}{\jobname.bib}
@book{Dostojevski2014,
title = {Двойник},
author = {Фёдор Михайлович Достоевский},
year = {2014},
location = {Москва},
publisher = {Aegitas},
langid = {russian},
shortauthor = {Dostojevski},
}
@book{Taht2020,
title = {Taevas},
author = {Põhja Täht},
year = {2020},
langid = {estonian}
}
@book{Tolkien1937,
title = {The Hobbit},
author = {J. R. R. Tolkien},
year = {1937},
langid = {english},
}
\end{filecontents*}
\addbibresource{\jobname.bib}
\begin{document}
Citing different authors \autocite{Dostojevski2014,Tolkien1937,Taht2020}
\printbibliography
\end{document}
这三种方法的结果都是