Неожиданное взаимодействие между словом biber и особой формой компонента имени в «полном» имени автора

Неожиданное взаимодействие между словом biber и особой формой компонента имени в «полном» имени автора

Несколько лет назад,вопросбыл опубликован пост о том, как следует вводить почетное обращение «сэр» в 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, biblatex3.7 и biber2.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директивы между \relaxand 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}

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