Subfiles、Apacite 和 Babel 包的组合导致 LaTeX 错误

Subfiles、Apacite 和 Babel 包的组合导致 LaTeX 错误

对于我的学士论文,我想将各章写在单独的文件中,并能够单独编译它们。为了合并它们,我使用软件包subfiles。对于引用,我必须通过软件包使用 Apa 样式apacite

正如已经讨论过的使用 apacite 包与子文件包或独立包会导致 LaTeX 错误:只能在序言中使用apacite并且subfiles不能很好地结合在一起。为了解决这个问题,我使用了发布的解决方案:

\usepackage{etoolbox}
\makeatletter
\patchcmd{\nocite}{\ifx\@onlypreamble\document}{\iftrue}{}{}
\makeatother

这很好,但我希望我的参考文献列表是英文的(而不是标准的法文apacite)。通常,我使用babel包来纠正这个问题,但使用subfiles包会导致以下错误:

! LaTeX Error: Can be used only in preamble.
l.4 \cite{test}

有谁知道如何解决这一问题?

我使用的代码:

主文本

\documentclass{article}
\usepackage{subfiles}
\usepackage{apacite}
\usepackage[english]{babel} % works fine without babel
\usepackage{etoolbox}
\makeatletter
\patchcmd{\nocite}{\ifx\@onlypreamble\document}{\iftrue}{}{}
\makeatother

\begin{document}
\subfile{chapter1}

% Bibliography:
\newpage
\bibliographystyle{apacite} 
\bibliography{../ref/references} 

\end{document}

第一章.tex:

\documentclass[./main.tex]{subfiles}
\begin{document}
text
\cite{test}
\end{document}

答案1

设置\errorcontextlines=\maxdimen有助于揭示正在发生的事情。

babel\nocite保存了中的旧定义\org@nocite,因此可以:

  1. \nocite加载前修补babel,或
  2. 补丁\org@nocite也一样,加载后babel

第一个可能是更好的解决方案:

\documentclass{article}
\errorcontextlines=\maxdimen
\usepackage{subfiles}
\usepackage{etoolbox}
\usepackage{apacite}
\makeatletter
\patchcmd{\nocite}{\ifx\@onlypreamble\document}{\iftrue}{}{}
\makeatother
\usepackage[english]{babel} % works fine without babel

\begin{document}
\subfile{94989-chapter1}

% Bibliography:
\newpage
\bibliographystyle{apacite} 
\bibliography{../ref/references} 

\end{document}

相关内容