`\AbbreviateFirstname` в библиотеке приводит к зависанию компиляции

`\AbbreviateFirstname` в библиотеке приводит к зависанию компиляции

Пакет librarianразбирает bibfiles без запуска bibtex или biber. Однако в случае, если один из них установлен \AbbreviateFirstnameи имя в bibfile состоит только из одного слова, компиляция зависает.

Минимальный (не)рабочий пример:

\documentclass{article}

\usepackage{librarian}
\AbbreviateFirstname

\begin{filecontents}{bar.bib}
@article{foo1,
 author ={Anton Nonym},
 title  ={A title},
 journal={Top Journal},
 number ={42},
 year   ={2000}
}
@article{foo2,
 author ={Batman},
 title  ={Yet Another Title},
 journal={Flop Journal},
 number ={23},
 year   ={1999}
}
\end{filecontents}


\begin{document}

A paper by
\Cite{foo1}{foo}{\ReadName{\Firstname\ \Lastname}}{??} % works always
and
\Cite{foo2}{foo}{\ReadName{\Firstname\ \Lastname}}{??}.% hangs for \AbbreviateFirstname

\BibFile{bar.bib}
\end{document}

Если я закомментирую \AbbreviateFirstnameвторое \Cite, MWE работает.Свторая ссылкаи \AbbreviateFirstname, компиляция 1 не заканчивается (во втором запуске). Только после отмены вручную я получаю сообщение:

! Interruption.
\lb@temp ->\lb@eoe 
                   \spacefactor 1000.
l.28 ...{foo}{\ReadName{\Firstname \Lastname}}{??}

Что можно сделать, чтобы получить корректную компиляцию (например, с пустым \Firstname) или хотя бы сообщение об ошибке, не изменяя bib-файл?

1 Выполнено с помощью TeX Live 2022, latex, pdflatex или lualatex

решение1

Что-то вроде этого, возможно

\documentclass{article}

\usepackage{librarian,etoolbox}
\AbbreviateFirstname
\makeatletter
\def\lb@@loopovernames#1#2#3#4{%
  \iflb@abbreviate
    \def\Firstname{}%
    \ifblank{#1}{}{\lb@abbreviate#1 lb@end }% add test for emptyness
  \else
    \def\Firstname{#1}%
  \fi
  \def\Von{#2}\def\Lastname{#3}\def\Junior{#4}%
  \lb@makerefname
  }
\makeatother
\begin{filecontents}{bar.bib}
@article{foo1,
 author ={Anton Nonym},
 title  ={A title},
 journal={Top Journal},
 number ={42},
 year   ={2000}
}
@article{foo2,
 author ={Batman},
 title  ={Yet Another Title},
 journal={Flop Journal},
 number ={23},
 year   ={1999}
}
\end{filecontents}


\begin{document}

A paper by
\Cite{foo1}{foo}{\ReadName{\Firstname\ \Lastname}}{??} % works always
and
\Cite{foo2}{foo}{\ReadName{\ifdefempty\Firstname{}{\Firstname\ }\Lastname}}{??}.% hangs for \AbbreviateFirstname

\BibFile{bar.bib}
\end{document}

введите описание изображения здесь

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