Набор полной цитаты, название которой заканчивается словом в скобках

Набор полной цитаты, название которой заканчивается словом в скобках

Я использую Biblatex и мне нужно набрать полные цитаты в тексте документа, поэтому я использую\longfullciteкоманда Моэве. Хотя он работает правильно большую часть времени, у него возникают проблемы с записями Biber/BibTeX, где последнее слово поля заключено в фигурные скобки (для принудительного использования заглавных букв). В этих случаях \longfullciteможет некорректно использовать заглавные буквы для следующего слова. Возьмем следующий пример:

\documentclass{article}

\usepackage{biblatex}
\makeatletter
\newcommand{\tempmaxup}[1]{\def\blx@maxcitenames{\blx@maxbibnames}#1}
\makeatother
\DeclareCiteCommand{\longfullcite}[\tempmaxup]
  {\usebibmacro{prenote}}
  {\usedriver
     {\DeclareNameAlias{sortname}{default}}
     {\thefield{entrytype}}}
  {\multicitedelim}
  {\usebibmacro{postnote}}

\usepackage{filecontents}

\begin{filecontents}{test.bib}
@inproceedings{blow2015,
  author       = {Blow, Joe},
  title        = {{GNU} loves me},
  year         = 2015,
  booktitle    = {Proceedings of Some Conference},
}

@inproceedings{blow2016,
  author       = {Blow, Joe},
  title        = {I love {GNU}},
  year         = 2016,
  booktitle    = {Proceedings of Some Conference},
}
\end{filecontents}

\addbibresource{test.bib}

\begin{document}
\nocite{*}
\noindent
\longfullcite{blow2015}\\
\longfullcite{blow2016}
\printbibliography
\end{document}

Вот что получилось:

вывод приведенного выше документа, показывающий, что первый \longfullcite правильно делает заглавной буквой «In», но второй — нет

Обратите внимание на непоследовательную заглавную букву слова "In", полученную двумя \longfullciteкомандами. Напротив, цитаты, выданные \printbibliographyправильно заглавными буквами "In" для обеих записей.

Что является причиной этого несоответствия и как его исправить или обойти (предпочтительно изменив определение, \longfullciteа не .bibфайл)?

решение1

Это известная проблема (https://github.com/plk/biblatex/issues/295) и влияет на все цитаты в тексте, хотя, вероятно, это действительно видно только с чем-то вроде \fullcite-like. К сожалению, шансы на правильное решение довольно малы. biblatexТрекер пунктуации сильно изменяет существующие пробельные коэффициенты, но это может иметь нежелательные побочные эффекты для текста вне цитат.

Вам придется добавить \@после заглавных букв в конце заголовка. Но вы можете сделать это автоматически в формате, если хотите

\DeclareFieldFormat{title}{\mkbibemph{#1\@}}
\DeclareFieldFormat
  [article,inbook,incollection,inproceedings,patent,thesis,unpublished]
  {title}{\mkbibquote{#1\isdot\@}}
\DeclareFieldFormat
  [suppbook,suppcollection,suppperiodical]
  {title}{#1\@}

решение2

Грязный хак:

Вставьте что-то невидимое без ширины. Я уверен, что это может вызвать проблемы, просто пока не знаю, какие именно :)

\documentclass{article}

\usepackage{biblatex}
\makeatletter
\newcommand{\tempmaxup}[1]{\def\blx@maxcitenames{\blx@maxbibnames}#1}
\makeatother
\DeclareCiteCommand{\longfullcite}[\tempmaxup]
  {\usebibmacro{prenote}}
  {\usedriver
     {\DeclareNameAlias{sortname}{default}}
     {\thefield{entrytype}}}
  {\multicitedelim}
  {\usebibmacro{postnote}}

\usepackage{filecontents}

\begin{filecontents}{test.bib}
@inproceedings{blow2015,
  author       = {Blow, Joe},
  title        = {{GNU} loves me},
  year         = 2015,
  booktitle    = {Proceedings of Some Conference},
}

@inproceedings{blow2016,
  author       = {Blow, Joe},
  title        = {I love {GNU}\mbox{}},
  year         = 2016,
  booktitle    = {Proceedings of Some Conference},
}
\end{filecontents}

\addbibresource{test.bib}

\begin{document}
\nocite{*}
\noindent
\longfullcite{blow2015}\\
\longfullcite{blow2016}
\printbibliography
\end{document}

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