splitbib 和 natbib 錯誤:未定義的控制序列

splitbib 和 natbib 錯誤:未定義的控制序列

我使用 {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}

相關內容