splitbib と natbib のエラー: 未定義の制御シーケンス

splitbib と natbib のエラー: 未定義の制御シーケンス

私は参考文献のスタイルに {natbib} パッケージを使用し、ドキュメントの末尾で参考文献をカテゴリに分割するために {splitbib} パッケージを使用しています。たとえば、すべての記事を 1 つのグループに、すべての書籍を別のグループになどです。

{splitbib} の作成者は、{natbib} パッケージを使用する場合は [export] 引数を使用するようにアドバイスしています。

すべて正常に動作しており、最終的な文書は希望どおりに作成されていますが、問題は LaTeX から「未定義の制御シーケンス \begin{thebibliography}」というエラー メッセージが表示されることです。

{natbib} パッケージを使用しない場合、エラーは発生しません。{natbib} パッケージを [export] 引数なしで使用すると、意味があります。{natbib} パッケージを [export] 引数付きで使用すると、動作しますが、エラー メッセージが表示されます。

これをどうすれば解決できますか?

ありがとう

以下に例を示します。

\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}

関連情報