Biblatex:对参考书目中的西里尔字母和拉丁字母名称进行排序

Biblatex:对参考书目中的西里尔字母和拉丁字母名称进行排序

我正在努力编写包含不同文字作者姓名的参考书目(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}

这三种方法的结果都是

陀思妥耶夫斯基 > 托尔金 > 塔赫特

相关内容