使用 Springer 类时svjour3
(可以获取这里),我偶然发现了一个问题\cite
。请看以下最小示例:
\documentclass{svjour3}
\usepackage{todonotes}
\usepackage{biblatex}
\addbibresource{references.bib}
\begin{document}
\cite{test1}
% \cite{test2}
\tableofcontents
\cite{test1}
\cite{test2}
\end{document}
您可以为此使用两个带有键test1
和test2
in 的任意 bib 条目。references.bib
编译此代码时,引用的两个部分均有效test1
,但引用test2
无效。以下任何操作均可修复此问题:
- 注释掉这个
todonotes
包, - 注释掉
\tableofcontents
,或者 - 使用
article
类而不是svjour3
。
\tableofcontents
我检查了in的定义svjour3
,即
\newcommand\tableofcontents{%
\section*{\contentsname}%
\@starttoc{toc}%
\addtocontents{toc}{\begingroup\protect\small}%
\AtEndDocument{\addtocontents{toc}{\endgroup}}%
}
确实,使用article
的这个定义\tableofcontents
也会失败。对这里发生的事情有什么见解吗?这是预期的行为还是 中的错误svjour3
?
答案1
biblatex
似乎是在往目录中注入东西。人们可能想知道为什么 Springer 选择这个定义
\newcommand\tableofcontents{%
\section*{\contentsname}%
\@starttoc{toc}%
\addtocontents{toc}{\begingroup\protect\small}%
\AtEndDocument{\addtocontents{toc}{\endgroup}}%
}
尤其是将\begingroup\small
和添加\endgroup
到 toc 文件中。
biblatex
使用时,我们可以看到文件\endgroup
中缺少.toc
。因此,基本上所有运行\cite
后的命令都像\tableofcontents
\begingroup
\cite{test1} etc
没有\endgroup
,我不知道为什么这会导致biblatex
它\cite
的信息不写入.aux
。
Springer 为什么不直接使用
\makeatletter
\renewcommand\tableofcontents{%
\section*{\contentsname}%
\begingroup
\small
\@starttoc{toc}%
\endgroup
}
\makeatother
而不是将这些信息注入到 中.toc
,而它(在我看来)不属于那里。上面的重新定义适用于biblatex
不过,你可能需要向 Springer 咨询他们是否支持biblatex
他们的制作。并非所有出版商都这样做。