我定义了自定义名称 + 年份 + 标题脚注格式,但不知为何上标前有一个前导空格。这是怎么回事?
该命令如下所示:
\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
,正如它所说,它将忽略在末尾包含该命令的命令后紧接着的任何空格。
当不小心输入的某些字符串的开头或结尾包含空格时,这两个命令就会发挥作用,而这些字符串将用在需要“干净”间距的位置,比如运行头或脚注前面,如此处的示例所示。
%
在标有 的位置还存在虚假空格,用 删除<--
。