Iniciais de duas ou três letras em bibliografia com Biblatex

Iniciais de duas ou três letras em bibliografia com Biblatex

Na minha bibliografia, preciso abreviar os primeiros nomes mantendo dígrafos e trígrafos.

  • John deveria ser abreviado como J.
  • Clare deveria ser abreviada como Cl.
  • Charles deveria ser abreviado como Ch.
  • Christine deveria ser abreviada como Chr.
  • Philippe deveria ser abreviado como Ph.
  • etc.

A solução é modificar o primeiro nome nos dados bibliográficos de

Carlos

para

{\relaxe Charles}


O exemplo a seguir usa a \DeclareSourcemapmacro de personalização no Biblatex para mudar Charles, {\relax Ch}arlesmas estou procurando uma solução mais genérica que modifique automaticamente todos os primeiros nomes começando com duas ou três consoantes.

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

Resultado

Responder1

Um possível ponto de partida seria usar o código que Yves de Saint-Pern escreveu na auladireito-fr, que estou traduzindo abaixo.

EDITAR:As expressões regulares fornecidas aqui também capturam sobrenomes, o que pode causar problemas fora do Biblatex, por exemplo, em índices feitos com imakeidx. Uma tentativa de solução para este problema éfornecido aqui.

Você pode usá-lo em um biber.confarquivo ou incluí-lo em seu arquivo .bbx.

Algumas linguagens podem exigir padrões regex adicionais para nomes, mas são bastante simples de adicionar.

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

No que diz respeito às expressões regulares, não sou especialista, mas arriscaria que a expressão significasse isto:

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

Uma palavra ( \b) que começa com ( \S*significa: termina com qualquer número de caracteres que não sejam espaços): Chr(Chris) ou Ch(Charles) ou Th(Thomas) ou Ph(Philippe), ou qualquer combinação que comece com uma consoante (a [B-DF-HJ-NP-TV-XZparte é um conjunto de intervalos: letras B a D, F a H, J a N, P a T, V a X, Z) seguidas por lou r(Bruno ou Claire se enquadrariam nessa categoria).

informação relacionada