Несколько лет назад,вопросбыл опубликован пост о том, как следует вводить почетное обращение «сэр» в author
поле библиографической записи. (Отступление: я полагаю, что запрос также актуален для использования почетного обращения «дама». Второе отступление: я не думаю, что это хорошая идея указывать почетные обращения «сэр» и «дама» в поле author
. Однако, давайте продолжим.)
Например, рассмотрим случай Sir Isaac Newton
. Если просто написать
author = "Sir Isaac Newton",
и кто-то использует стиль библиографии, который обрезает данные имена, то в итоге получается или S. I. Newton
. Newton, S. I.
Нехорошо! По соглашению, «сэр» и «дама» должныникогдабыть сокращенным. В то время я предоставилотвечатькоторый применяет следующее «исправление» к author
полю:
author = "{\relax Sir I}saac Newton",
Это исправление отлично работает с BibTeX. Оно также работает, biblatex
если BibTeX используется как бэкэнд или если заданные имена усекаются (с помощью такой опции, как giveninits=true
). Однако, как мне недавно указали в комментарии, есть проблема, если (a) biber
используется как бэкэнди(б) опция giveninits=false
установлена, т.е. если заданы именанетусекается. Рассмотрим вывод простого двухзаписного MWE (код размещен ниже; поля автора — author = "{\relax Sir I}saac Newton",
и author = "Zoe Zerlina Zwicky",
, соответственно.):
Обратите внимание на пробел непосредственно перед "Сэр". MWE был скомпилирован с MacTeX2017, biblatex
3.7 и biber
2.7. Кстати, вот два given
поля, созданные biber
(скопированы и вставлены из \jobname.bbl
):
given={{\relax\bibnamedelimb Sir\bibnamedelimb I}saac},
given={Zoe\bibnamedelima Zerlina},
Обратите внимание, что biber
вставлено \bibnamedelimb
между \relax
и Sir
. Наличие этого макроса отвечает за вставку нежелательного пробела.
Вопрос: Есть ли опция, которую можно/нужно установить, чтобы исключить либо первый экземпляр, \bibnamedelimb
либо всю строку \relax\bibnamedelimb
из given
поля? Или это ошибка в biber
(которая в конечном итоге будет исправлена)?
\RequirePackage{filecontents}
\begin{filecontents*}{mybib.bib}
@misc{SIN, author = "{\relax Sir I}saac Newton", title = "Opticks", year = 1730, note = "Fourth edition"}
@misc{ZZZ, author = "Zoe Zerlina Zwicky", title = "Thoughts", year = 3001}
\end{filecontents*}
\documentclass{article}
\usepackage[giveninits=false,backend=biber]{biblatex}
\addbibresource{mybib.bib}
\begin{document}
\nocite{*}
\printbibliography
\end{document}
решение1
С Biber вы можете использовать «расширенный формат имени». Там вы можете явно указать сокращенную форму части имени, если вам не нравится формат по умолчанию.
Вы бы использовали
author = {family={Newton}, given={Sir Isaac}, given-i={Sir I}},
И получил бы
Сэр Исаак Ньютон
полностью или
Сэр И. Ньютон
в сокращенном виде.
\RequirePackage{filecontents}
\begin{filecontents*}{\jobname.bib}
@misc{IsaacNewton,
author = {family={Newton}, given={Sir Isaac}, given-i={Sir I}},
title = {Opticks},
year = 1730,
edition = {4},
}
@misc{xyz,
author = {Zoe Zwicky},
title = {Thoughts},
year = 3001,
}
\end{filecontents*}
\documentclass{article}
\usepackage[giveninits=true,backend=biber]{biblatex}
\addbibresource{\jobname.bib}
\begin{document}
\nocite{*}
\printbibliography
\end{document}
решение2
Подсказано комментариями @moewe нижеотличный ответ-- и особенно намеком на то, как biber
обрабатывается материал в так называемых "группах фигурных скобок" (любой материал, заключенный в дополнительную пару фигурных скобок) -- я придумал другое рабочее решение. Оно не такое основательное, как то, что дал @moewe, но оно довольно простое, в том смысле, что оно требует использования всего одной дополнительной группы фигурных скобок, чтобы помочь biber
выяснить, какой компонент имени является полным именем. В частности, все, что нужно сделать, это заменить
author = "{\relax Sir I}saac Newton",
с
author = "{{\relax Sir I}saac} Newton",
С дополнительной группой скобок biber
не доходит до вставки \bibnamedelimb
директивы между \relax
and Sir
или между "Sir" и начальной "I". В результате вставляются обычные межсловные пробелы. Полагаю, это могло бы вызвать новую проблему, если бы по какой-то причине \bibnamedelimb
было установлено на что-то существенно отличное от \space
; к счастью, в данном случае это, похоже, не так.
Полная версия MWE:
\RequirePackage{filecontents}
\begin{filecontents*}{mybib.bib}
@misc{SIN0,
author = "{\relax Sir I}saac Newton",
title = "Opticks", note = "Not correct"
}
@misc{SIN1,
author = {family={Newton}, given={Sir Isaac}, given-i={Sir I}},
title = {Opticks}, note = "Correct"
}
@misc{SIN2,
author = "{{\relax Sir I}saac} Newton",
title = "Opticks", note = "Also correct"
}
\end{filecontents*}
\documentclass{article}
\usepackage[giveninits=false,backend=biber]{biblatex}
\addbibresource{mybib.bib}
\begin{document}
\nocite{*}
\printbibliography
\end{document}