Я использую 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}
Вот что получилось:
Обратите внимание на непоследовательную заглавную букву слова "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}