Двух- или трехбуквенные инициалы в библиографии с Biblatex

Двух- или трехбуквенные инициалы в библиографии с Biblatex

В моей библиографии мне необходимо сокращать имена, сохраняя диграфы и триграфы.

  • Имя «Джон» следует сокращать до «Дж».
  • Клэр следует сокращать до Кл.
  • Имя Чарльз следует сокращать до Ч.
  • Кристину следует сокращать до Chr.
  • Филиппа следует сокращать до Ph.
  • и т. д.

Решение состоит в том, чтобы изменить имя в библиографических данных с

Чарльз

к

{\relax Чарльз}


В следующем примере для изменения используется макрос \DeclareSourcemapнастройки в Biblatex, но я ищу более универсальное решение, которое автоматически изменяло бы все имена, начинающиеся с двух или трех согласных.Charles{\relax Ch}arles

\documentclass{article}
\usepackage{filecontents}
 \begin{filecontents}{\jobname.bib}
  @book{Book1,
  author = {Doe, Charles},
  title  = {An Important Book},
  publisher = {Publisher},
  date = {2012},
}
@book{Book2,
  author = {Doe, Charlotte},
  title  = {Another Important Book},
  publisher = {Publisher},
  date = {2014},
}
@book{Book3,
  author = {Smith, Theodore},
  title  = {A very Important Book},
  publisher = {Publisher},
  date = {2016},
}
\end{filecontents}
\usepackage[style=verbose,firstinits=true, backend=biber]{biblatex}
\DeclareSourcemap{
 \maps[datatype=bibtex]{
    \map{
    \step[fieldsource=author, 
            match={Charles},
            replace=\regexp{\{\\relax \x20Ch\}arles}]
  }
 }
}
\addbibresource{\jobname.bib}
\begin{document}

\cite{Book1}

\cite{Book2}

\cite{Book3}

\end{document}

Результат

решение1

Возможной отправной точкой может стать использование кода, который Ив де Сен-Перн написал в классе.право-fr, который я перевожу ниже.

РЕДАКТИРОВАТЬ :Регулярные выражения, представленные здесь, также улавливают фамилии, что может вызвать проблемы за пределами Biblatex, например, в индексах, созданных с помощью imakeidx. Предварительное решение этой проблемы:предоставлено здесь.

Вы можете использовать его в biber.confфайле или включить в свой .bbx.

В некоторых языках могут потребоваться дополнительные шаблоны регулярных выражений для имен, но их довольно просто добавить.

\DeclareStyleSourcemap{%
  \maps[datatype=bibtex]{%
    \map{%
        % Author field
      \step[fieldsource=author,%
        match={\regexp{\b(Chr|Ch|Th|Ph|[B-DF-HJ-NP-TV-XZ](l|r))(\S*,)}},%
        replace={\regexp{\{$1\}$3}}]% Protect last names (first last)
      \step[fieldsource=author,%
        match={\regexp{([^,]\s)\b(Chr|Ch|Th|Ph|[B-DF-HJ-NP-TV-XZ](l|r))}},%
        replace={\regexp{$1\{$2\}}}]% Protect last names (last, first)
      \step[fieldsource=author,%
        match={\regexp{\b(Chr|Ch|Th|Ph|[B-DF-HJ-NP-TV-XZ](l|r))([^\}])}},%
        replace={\regexp{\{\\relax\{\}$1\}$3}}]% Insert \relax after abbreviating
      % Editor field
      \step[fieldsource=editor,%
        match={\regexp{\b(Chr|Ch|Th|Ph|[B-DF-HJ-NP-TV-XZ](l|r))(\S*,)}},%
        replace={\regexp{\{$1\}$3}}]% Protect last names (first last)
      \step[fieldsource=editor,%
        match={\regexp{([^,]\s)\b(Chr|Ch|Th|Ph|[B-DF-HJ-NP-TV-XZ](l|r))}},%
        replace={\regexp{$1\{$2\}}}]% Protect last names (last, first)
      \step[fieldsource=editor,%
        match={\regexp{\b(Chr|Ch|Th|Ph|[B-DF-HJ-NP-TV-XZ](l|r))([^\}])}},%
        replace={\regexp{\{\\relax\{\}$1\}$3}}]% Insert \relax after abbreviating
}}}%

Что касается регулярных выражений, я не эксперт, но рискну предположить, что это выражение означает следующее:

\b(Chr|Ch|Th|Ph|[B-DF-HJ-NP-TV-XZ](l|r))(\S*,)

Слово ( \b), начинающееся с ( \S*означает: заканчивается любым количеством символов, не являющихся пробелами): Chr(Крис) или Ch(Чарльз) или Th(Томас) или Ph(Филипп), или любая комбинация, которая начинается с согласной (часть [B-DF-HJ-NP-TV-XZпредставляет собой набор диапазонов: буквы от B до D, от F до H, от J до N, от P до T, от V до X, Z), за которой следует lили r(Бруно или Клэр попадают в эту категорию).

Связанный контент