Я определил пользовательский формат сноски "имя + год + заголовок", но по какой-то причине есть начальный пробел перед надстрочным индексом. Откуда это взялось?
Команда выглядит так:
\DeclareNameFormat{lastnameonly}{\namepartfamily}
\DeclareCiteCommand{\myfootcite}{}{%
\footnote{%
\printnames[lastnameonly]{author} (\printfield{year}), \printfield{title}
}
}{}{}
Выход:
МВЭ:
\documentclass{article}
\usepackage[backend=biber]{biblatex}
\bibliography{references.bib}
\begin{filecontents}{references.bib}
@article{smith01,
author = {Smith, John},
year = {2001},
title = {Article title}
}
\end{filecontents}
%% Custom command giving a mysterious space
\DeclareNameFormat{lastnameonly}{\namepartfamily}
\DeclareCiteCommand{\myfootcite}{}{%
\footnote{%
\printnames[lastnameonly]{author} (\printfield{year}), \printfield{title}
}
}{}{}
\begin{document}
There is a space \myfootcite{smith01}
\end{document}
решение1
проще всего добавить \unskip
в начало определения \myfootcite
:
%% Custom command giving a mysterious space
\DeclareNameFormat{lastnameonly}{\namepartfamily}
\DeclareCiteCommand{\myfootcite}{}{%
\unskip
\footnote{%
\printnames[lastnameonly]{author} (\printfield{year}), \printfield{title}% <--
}% <--
}{}{}
это приводит к удалению пробела, который непосредственно предшествует вставке команды при ее применении.
Обратным этому является \ignorespaces
, который, как говорится, будет игнорировать любые пробелы, которые следуют сразу за командой, включающей его в конце.
Эти две команды оправдывают себя, когда неосторожный ввод включает пробелы в начале или конце некоторой строки, которая должна использоваться в позиции, где «чистый» интервал имеет значение, например, в верхнем колонтитуле или перед сноской, как показано в приведенном здесь примере.
также имелись ложные пробелы, удаленные с помощью %
в местах, отмеченных знаком <--
.