
En mi bibliografía, necesito abreviar los nombres manteniendo dígrafos y trígrafos.
- John debería abreviarse como J.
- Clare debería abreviarse como Cl.
- Charles debería abreviarse como Ch.
- Christine debería abreviarse como Chr.
- Philippe debería abreviarse como Ph.
- etc.
La solución es modificar el nombre en los datos bibliográficos de
Charles
a
{\relajarse Ch}arles
El siguiente ejemplo utiliza la \DeclareSourcemap
macro de personalización en Biblatex para cambiar Charles
, {\relax Ch}arles
pero estoy buscando una solución más genérica que modifique automáticamente todos los nombres que comiencen con dos o tres consonantes.
\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}
Respuesta1
Un posible punto de partida sería utilizar el código que Yves de Saint-Pern escribió en clase.derecho-fr, que estoy traduciendo a continuación.
EDITAR :Las expresiones regulares proporcionadas aquí también capturan los apellidos, lo que puede causar problemas fuera de Biblatex, por ejemplo en índices hechos con
imakeidx
. Una solución tentativa a este problema esproporcionado aquí.
Puedes usarlo en un biber.conf
archivo o incluirlo en tu .bbx
.
Algunos idiomas pueden requerir patrones de expresiones regulares adicionales para los nombres, pero son bastante sencillos de agregar.
\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
}}}%
En lo que respecta a las expresiones regulares, no soy un experto pero me atrevería a decir que la expresión significa esto:
\b(Chr|Ch|Th|Ph|[B-DF-HJ-NP-TV-XZ](l|r))(\S*,)
Una palabra ( \b
) que comienza con ( \S*
significa: termina con cualquier número de caracteres que no sean espacios): Chr
(Chris) o Ch
(Charles) o Th
(Thomas) o Ph
(Philippe), o cualquier combinación que comience con una consonante (la [B-DF-HJ-NP-TV-XZ
parte es una conjunto de rangos: letras B a D, F a H, J a N, P a T, V a X, Z) seguido de l
o r
(Bruno o Claire entrarían en esa categoría).