17

In Ethiopian naming conventions, a person has a given name followed by their father's given name and their grandfather's given name. The person will generally be addressed by their own given name, even in formal settings. Thus, a professor named Kebede Daniel Demeke would be known professionally as Professor Kebede, not Professor Demeke. If I were to cite a book by Dr. Kebede, it's my understanding that the citation should say "(Kebede 2012)" and the bibliography entry should read "Kebede Daniel Demeke. 2012. An Important Book..."

I'm writing a report that will include a mixture of Ethiopian and non-Ethiopian sources. Is there a way to structure the entries in my Bibtex file so that the Ethiopian names are handled as described above, while the non-Ethiopian names are handed in the usual way (e.g., "(Smith 2012)"; "Smith, John Q. 2012. Another Important Book...")?

In case it's relevant, I'm using Biber and XeLaTeX.

Thanks for your help.

2

1 Answer 1

16

Starting with biblatex 3.8/Biber 2.8 you can do the following (updated for biblatex v3.20/Biber 2.20, see edit history for older versions).

Make the new name parts known to biblatex in a .dbx file (in the example below it is called ethiopian.dbx and created via filecontents, you don't need to do that, it just needs to be in a place where LaTeX can find it)

\DeclareDatamodelConstant[type=list]{nameparts}{prefix,family,suffix,given,patronymic,papponymic}

We add the two name parts patronymic for the father's name and papponymic for that of the grandfather.

Then we need to adjust sorting for Ethiopian names

\DeclareSortingNamekeyTemplate[ethiopian]{
  \keypart{
    \namepart{given}
  }
  \keypart{
    \namepart{patronymic}
  }
  \keypart{
    \namepart{papponymic}
  }
}

The rules for uniqueness and hashing can also be changed to include the patronymic and papponymic with the given name if needed to disambiguate.

\DeclareUniquenameTemplate[ethiopian]{
  \namepart[base=true]{given}
  \namepart[disambiguation=full]{patronymic}
  \namepart[disambiguation=full]{papponymic}
}

\DeclareNamehashTemplate[ethiopian]{
  \namepart[hashscope=full]{given}
  \namepart[hashscope=full]{patronymic}
  \namepart[hashscope=full]{papponymic}
}

The names are printed with name: macros

\newbibmacro*{name:ethiopian}[3]{%
  \usebibmacro{name:delim}{#1#2#3}%
  \usebibmacro{name:hook}{#1#2#3}%
  \mkbibcompleteeth{%
    \mkbibethgiven{#1}%
    \ifdefvoid{#2}{}{\bibnamedelimd\mkbibethpat{#2}\isdot}%
    \ifdefvoid{#3}{}{\bibnamedelimd\mkbibethpap{#3}\isdot}}}

\let\mkbibcompleteeth\mkbibcompletename
\let\mkbibethgiven\mkbibnamefamily
\let\mkbibethpat\mkbibnamegiven
\let\mkbibethpap\mkbibnamegiven

Using \ifsortingnamekeytemplatename and \ifuniquenametemplatename we can then branch the definitions of the name formats

\DeclareNameAlias{sortname}{family-given}

\DeclareNameFormat{given-family}{%
  \ifsortingnamekeytemplatename{ethiopian}
    {\usebibmacro{name:ethiopian}
       {\namepartgiven}
       {\namepartpatronymic}
       {\namepartpapponymic}}
    {\ifgiveninits
       {\usebibmacro{name:given-family}
         {\namepartfamily}
         {\namepartgiveni}
         {\namepartprefix}
         {\namepartsuffix}}
       {\usebibmacro{name:given-family}
         {\namepartfamily}
         {\namepartgiven}
         {\namepartprefix}
         {\namepartsuffix}}}%
  \usebibmacro{name:andothers}}

\DeclareNameFormat{family-given}{%
  \ifsortingnamekeytemplatename{ethiopian}
    {\usebibmacro{name:ethiopian}
       {\namepartgiven}
       {\namepartpatronymic}
       {\namepartpapponymic}}
    {\ifgiveninits
       {\usebibmacro{name:family-given}
         {\namepartfamily}
         {\namepartgiveni}
         {\namepartprefix}
         {\namepartsuffix}}
       {\usebibmacro{name:family-given}
         {\namepartfamily}
         {\namepartgiven}
         {\namepartprefix}
         {\namepartsuffix}}}%
  \usebibmacro{name:andothers}}

\DeclareNameFormat{labelname}{%
  \ifuniquenametemplatename{ethiopian}
    {\usebibmacro{labelname:ethiopian}}
    {\usebibmacro{labelname:western}}%
  \usebibmacro{name:andothers}}

\newbibmacro{labelname:ethiopian}{%
  \iffieldequalstr{uniquepart}{base}
    {\usebibmacro{name:ethiopian}
       {\namepartgiven}
       {\empty}
       {\empty}} 
    {\iffieldequalstr{uniquepart}{patronymic}
       {\usebibmacro{name:ethiopian}
          {\namepartgiven}
          {\namepartpatronymic}
          {\empty}}
       {\usebibmacro{name:ethiopian}
          {\namepartgiven}
          {\namepartpatronymic}
          {\namepartpapponymic}}}}

\newbibmacro{labelname:western}{%
  \ifcase\value{uniquename}%
    \usebibmacro{name:family}
      {\namepartfamily}
      {\namepartgiven}
      {\namepartprefix}
      {\namepartsuffix}%
  \or
    \ifuseprefix
      {\usebibmacro{name:given-family}
        {\namepartfamily}
        {\namepartgiveni}
        {\namepartprefix}
        {\namepartsuffixi}}
      {\usebibmacro{name:given-family}
        {\namepartfamily}
        {\namepartgiveni}
        {\namepartprefixi}
        {\namepartsuffixi}}%
  \or
    \usebibmacro{name:given-family}
      {\namepartfamily}
      {\namepartgiven}
      {\namepartprefix}
      {\namepartsuffix}%
  \fi}

In your .bib file you can give the name as follows

author  = {given=Kebede, patronymic=Daniel, papponymic=Demeke, nametemplates=ethiopian},

This is necessary because the traditional name rules of BibTeX can't parse the name correctly.

In total

\documentclass{article}

\begin{filecontents*}{ethiopian.dbx}
\DeclareDatamodelConstant[type=list]{nameparts}{prefix,family,suffix,given,patronymic,papponymic}
\end{filecontents*}

\begin{filecontents*}{\jobname.bib}
@book{kebede,
  author  = {given=Kebede, patronymic=Daniel, papponymic=Demeke, nametemplates=ethiopian},
  title   = {One},
  date    = {1983}
}
@book{two,
  author  = {given=Daniel, patronymic=Demeke, nametemplates=ethiopian},
  title   = {Two},
  date    = {1984}
}
@book{three,
  author  = {given=Daniel, patronymic=Kebede, nametemplates=ethiopian},
  title   = {Three},
  date    = {1985}
}
\end{filecontents*}

\usepackage[style=authoryear,datamodel=ethiopian]{biblatex}

\addbibresource{biblatex-examples.bib}
\addbibresource{\jobname.bib}

\DeclareSortingNamekeyTemplate[ethiopian]{
  \keypart{
    \namepart{given}
  }
  \keypart{
    \namepart{patronymic}
  }
  \keypart{
    \namepart{papponymic}
  }
}

\DeclareUniquenameTemplate[ethiopian]{
  \namepart[base=true]{given}
  \namepart[disambiguation=full]{patronymic}
  \namepart[disambiguation=full]{papponymic}
}

\DeclareNamehashTemplate[ethiopian]{
  \namepart[hashscope=full]{given}
  \namepart[hashscope=full]{patronymic}
  \namepart[hashscope=full]{papponymic}
}

\DeclareNameAlias{sortname}{family-given}

\DeclareNameFormat{given-family}{%
  \ifsortingnamekeytemplatename{ethiopian}
    {\usebibmacro{name:ethiopian}
       {\namepartgiven}
       {\namepartpatronymic}
       {\namepartpapponymic}}
    {\ifgiveninits
       {\usebibmacro{name:given-family}
         {\namepartfamily}
         {\namepartgiveni}
         {\namepartprefix}
         {\namepartsuffix}}
       {\usebibmacro{name:given-family}
         {\namepartfamily}
         {\namepartgiven}
         {\namepartprefix}
         {\namepartsuffix}}}%
  \usebibmacro{name:andothers}}

\DeclareNameFormat{family-given}{%
  \ifsortingnamekeytemplatename{ethiopian}
    {\usebibmacro{name:ethiopian}
       {\namepartgiven}
       {\namepartpatronymic}
       {\namepartpapponymic}}
    {\ifgiveninits
       {\usebibmacro{name:family-given}
         {\namepartfamily}
         {\namepartgiveni}
         {\namepartprefix}
         {\namepartsuffix}}
       {\usebibmacro{name:family-given}
         {\namepartfamily}
         {\namepartgiven}
         {\namepartprefix}
         {\namepartsuffix}}}%
  \usebibmacro{name:andothers}}

\DeclareNameFormat{labelname}{%
  \ifuniquenametemplatename{ethiopian}
    {\usebibmacro{labelname:ethiopian}}
    {\usebibmacro{labelname:western}}%
  \usebibmacro{name:andothers}}

\newbibmacro{labelname:ethiopian}{%
  \iffieldequalstr{uniquepart}{base}
    {\usebibmacro{name:ethiopian}
       {\namepartgiven}
       {\empty}
       {\empty}} 
    {\iffieldequalstr{uniquepart}{patronymic}
       {\usebibmacro{name:ethiopian}
          {\namepartgiven}
          {\namepartpatronymic}
          {\empty}}
       {\usebibmacro{name:ethiopian}
          {\namepartgiven}
          {\namepartpatronymic}
          {\namepartpapponymic}}}}

\newbibmacro{labelname:western}{%
  \ifcase\value{uniquename}%
    \usebibmacro{name:family}
      {\namepartfamily}
      {\namepartgiven}
      {\namepartprefix}
      {\namepartsuffix}%
  \or
    \ifuseprefix
      {\usebibmacro{name:given-family}
        {\namepartfamily}
        {\namepartgiveni}
        {\namepartprefix}
        {\namepartsuffixi}}
      {\usebibmacro{name:given-family}
        {\namepartfamily}
        {\namepartgiveni}
        {\namepartprefixi}
        {\namepartsuffixi}}%
  \or
    \usebibmacro{name:given-family}
      {\namepartfamily}
      {\namepartgiven}
      {\namepartprefix}
      {\namepartsuffix}%
  \fi}

\newbibmacro*{name:ethiopian}[3]{%
  \usebibmacro{name:delim}{#1#2#3}%
  \usebibmacro{name:hook}{#1#2#3}%
  \mkbibcompleteeth{%
    \mkbibethgiven{#1}%
    \ifdefvoid{#2}{}{\bibnamedelimd\mkbibethpat{#2}\isdot}%
    \ifdefvoid{#3}{}{\bibnamedelimd\mkbibethpap{#3}\isdot}}}

\let\mkbibcompleteeth\mkbibcompletename
\let\mkbibethgiven\mkbibnamefamily
\let\mkbibethpat\mkbibnamegiven
\let\mkbibethpap\mkbibnamegiven

\begin{document}
\textcite{sigfridsson,knuth:ct:a,knuth:ct:b,knuth:ct:c,cicero,geer}

\textcite{kebede}

\textcite{two}

\textcite{three}

\printbibliography
\end{document}

which yields

enter image description here

3
  • I get this error from biblatex 3.20: No namehash template called 'ethiopian'
    – bongbang
    Commented Jun 4 at 4:52
  • @bongbang Ah yes, a \DeclareNamehashTemplate is required now. Thanks for the heads up. Updated.
    – moewe
    Commented Jun 4 at 5:18
  • Thank you. I didn't know that this and similar customizations have already been incorporated into one big package example. Very thoughtful. Much appreciated.
    – bongbang
    Commented Jun 4 at 11:37

You must log in to answer this question.

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