
В моей библиографии мне необходимо сокращать имена, сохраняя диграфы и триграфы.
- Имя «Джон» следует сокращать до «Дж».
- Клэр следует сокращать до Кл.
- Имя Чарльз следует сокращать до Ч.
- Кристину следует сокращать до 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
(Бруно или Клэр попадают в эту категорию).