7

I'm struggling with compiling a bibliography (biblatex, biber) which includes author names in different scripts. Ideally, the bibliography would treat non-latin letters like their latin equivalents and sort them accordingly (e.g. Достоевский as Dostojevski). Instead, it seems like authors with names in the cyrillic script get placed at the end of the bibliography by default.

I figured I could use sorting=debug which would sort the bibliography according to the entry key. As I use Dostojevski instead of Достоевский in the entry key, this partly fixes my problem. But this way, another problem occurs: names with umlauts are not sorted correctly. In the entry key, I e.g. use a instead of ä, so this means Täht would be sorted as Taht (see MWE below). As umlauts are the last letters of the Estonian alphabet, this makes for quite a difference.

So the default order for the authors in the MWE is: Tolkien, Täht, Достоевский

With sorting=debug, I get: Достоевский, Täht, Tolkien

But what I actually want is: Достоевский, Tolkien, Täht

Is there a neat way to fix this?

Here's the 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}
7
  • 1
    Completely unrelated to the question, but (\cite{Dostojevski2014}, \cite{Tolkien1937}, \cite{Taht2020}) can be replaced by \parencite{Dostojevski2014,Tolkien1937,Taht2020} (OK, that will give you semicolons between citations and not commas, but that can be changed with \renewcommand*{\multicitedelim}{\addcomma\space})
    – moewe
    May 26, 2020 at 15:36
  • 2
    This can be done - have a look at the transliteration support for Russian in the biblatex manual as this is explicitly meant for such a situation.
    – PLK
    May 26, 2020 at 15:57
  • @Davislor moewe's answer below provided several solutions to my problem, so I won't have to use sorting=debug any longer. Changing the entry key to taeht wouldn't have made a difference, though: Täht would have still preceded Tolkien.
    – Kuu
    May 26, 2020 at 20:07
  • @Kuu Okay, wrong collation order for Estonian.
    – Davislor
    May 26, 2020 at 20:59
  • it seems like authors with names in the cyrillic script get placed at the end of the bibliography by default -- I'm not sure what your background is, but as a user of the Cyrillic script (and a native Russian speaker), it's exactly the behaviour I'd expect. Cyrillic after Latin is the standard UX choice in my experience, so may I ask why you're trying to go against that?
    – Norrius
    May 26, 2020 at 21:15

1 Answer 1

8

In the MWE you are using sorting=debug, which sorts entries purely on their entry key. This sorting scheme is not intended for normal use, but it explains why you get the result you are getting. If you remove sorting=debug, (and thus get sorting=nyt, from style=authoryear,) the results for Latin script will be better with Täht after Tolkien (since it will follow Estonian conventions: unless directed otherwise biblatex always takes the collation rules from the main document language)

Tolkien > Täht > Dostojevski

The Cyrillic Достоевский, however, is now sorted after all the Latin letters.


biblatex has the option to sort fields by transliterated contents (search for \DeclareSortTranslit in the biblatex documentation). Currently this is available for Russian and Sanskrit IAST.

So adding

\DeclareSortTranslit{
  \translit[russian]{setnames}{russian}{bgn/pcgn-standard}
}

or

\DeclareSortTranslit{
  \translit[russian]{setnames}{russian}{ala-lc}
}

to your preamble depending on the romanisation scheme you prefer, should sort Фёдор Михайлович Достоевский under Dostoyevskiy, Fëdor Mikhaylovich (bgn/pcgn-standard) or Dostoevskiĭ, Fëdor Mikhaĭlovich (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}

If none of these romanisation schemes float your boat, you can still force a sorting manually with the sortname field (transliteration copied from Estonian Wikipedia).

@book{Dostojevski2014,
  title       = {Двойник},
  author      = {Фёдор Михайлович Достоевский},
  year        = {2014},
  location    = {Москва},
  publisher   = {Aegitas},
  langid      = {russian},
  shortauthor = {Dostojevski},
  sortname    = {Fjodor Mihhailovitš Dostojevski},
}

MWE

\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}

You already give a romanisation in the shortauthor field. If that is enough for you and you don't need the full name for sorting, you can tell biblatex to start considering shortauthor for sorting (which it normally doesn't) by adding the field to the sorting template. Note that this of course has an effect on 'normal' uses for shortauthor like

author      = {{National Aeronautics and Space Administration}},
shortauthor = {NASA},

which will now be sorted under NASA and not National Aeronautics and Space Administration.

\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}

The result for all three approaches is

Dostojevski > Tolkien > Täht

4
  • Thank you a lot, this was so much help! I thought there should be an easy way to fix this, but spent quite some time looking for it.
    – Kuu
    May 26, 2020 at 16:41
  • @Kuu Sorting letters from the same script is already non-trivial (contrary to what should happen in Estonian in German ä would traditionally sort as ae in names, but often simply as a in other words) and it gets much more complicated if you want to sort letters from a different script. While probably most languages with a Latin-based alphabet would agree that the (Russian) Cyrillic Д is D, things are far more tricky for say В (Germans would use "W", English speakers "V"). Saying the Latin-equivalent of Достоевский is Dostojevski commits you to a certain romanisation system. ...
    – moewe
    May 27, 2020 at 20:29
  • ... Sometimes that system is not the result of a simple one-to-one mapping of Cyrillic characters to Latin characters, but the result of traditions and exceptions. I have seen numerous variants of Чебышёв (from Chebychev to Tschebyschow) for example. Sometimes Russian people are known under the French romanisation of their name in German. I doubt a humble computer program like Biber can get all of this right automatically.
    – moewe
    May 27, 2020 at 20:35
  • Yes, I'm aware that there is lots of differences, each language having their own traditions in regard to sorting letters and transliteration. I chose to go with the sortname option and except for having to add the transliterations manually, it really is the "easy" fix for my problem that I was looking for (easy as in convenient, easy to implement).
    – Kuu
    May 28, 2020 at 7:16

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .