我使用 {natbib} 包来处理参考书目样式,并使用 {splitbib} 包将我的参考书目在文档末尾分成几类,例如:所有文章分为一组,所有书籍分为另一组。
{splitbib} 的作者建议在使用 {natbib} 包时使用 [export] 参数。
一切正常,我得到了我想要的最终文档,但问题是我收到来自 LaTeX 的错误消息:“未定义的控制序列 \begin{thebibliography}”
如果我不使用 {natbib} 包,则不会出现任何错误。如果我使用不带 [export] 参数的 {natbib} 包,则值得。如果我使用带有 [export] 参数的 {natbib} 包,则可以正常工作,但会出现错误消息。
我该如何解决这个问题?
谢谢
以下是一个例子:
\documentclass[a4paper,12pt]{book}
\usepackage[comma,longnamesfirst]{natbib}
\bibliographystyle{plainnat}
\usepackage[export]{splitbib}
\begin{category}{Articles}
\SBentries{Article1,Article2}
\end{category}
\begin{category}{Books}
\SBentries{Book1,Book2}
\end{category}
\usepackage{filecontents}
\begin{filecontents}{bibliography.bib}
@article{Article1,
author={Jhon Doe},
title={Blabla},
journal={Blabla},
year={2019},
volume={145},
number={4},
pages={1-25}
}
@book{Book2,
author={Fabrice Doe},
title={Blabla4},
journal={Blabla4},
year={2016},
volume={142},
pages={4-22}
}
\end{filecontents}
\begin{document}
I want to cite Article1~\cite{Article1} and then Book2~\cite{Book2}.
\bibliography{bibliography}
\end{document}
答案1
未定义的命令不是 \begin{bibliography} 但是\SBlongestlabel
:
! Undefined control sequence.
\thebibliography ...\expandafter {\SBlongestlabel
} \immediate \write \NMSB@...
l.1 \begin{thebibliography}{2}
这显然是软件包中的一个错误,但作者的意图并不完全清楚。
下面的补丁可以起作用:
\documentclass[a4paper,12pt]{book}
\usepackage[comma,longnamesfirst]{natbib}
\bibliographystyle{plainnat}
\usepackage[export]{splitbib}
\begin{category}{Articles}
\SBentries{Article1,Article2}
\end{category}
\begin{category}{Books}
\SBentries{Book1,Book2}
\end{category}
\usepackage{filecontents}
\begin{filecontents}{bibliography.bib}
@article{Article1,
author={Jhon Doe},
title={Blabla},
journal={Blabla},
year={2019},
volume={145},
number={4},
pages={1-25}
}
@book{Book2,
author={Fabrice Doe},
title={Blabla4},
journal={Blabla4},
year={2016},
volume={142},
pages={4-22}
}
\end{filecontents}
\makeatletter
\usepackage{xpatch}
\xpatchcmd\thebibliography
{\expandafter\NMSB@tok\expandafter{\SBlongestlabel}}
{\@ifundefined{SBlongestlabel}{\NMSB@tok{}}{\expandafter\NMSB@tok\expandafter{\SBlongestlabel}}}
{}{\fail}
\makeatother
\begin{document}
I want to cite Article1~\cite{Article1} and then Book2~\cite{Book2}.
\bibliography{bibliography}
\end{document}