处理子文件中的 .bib

处理子文件中的 .bib

我有一个与在使用子文件时的参考书目。我的.bib是引用main.tex。编译主文件时,一切都运行良好。但在处理子文件时,我遇到了两个问题(它们很可能是相关的):

  1. 我无法使用自动完成功能访问围兜
  2. 编译子文件时,它不会插入引用。

我尝试过包括

\bibliographystyle{plainnat}
\bibliography{mybib}

在子文件中,这也运行顺利。显然,编译时,bibs 包含在文档的每一章中main.tex。我尝试在中设置一个全局布尔值main.tex

\newboolean{printBibInSubfiles}
\setboolean{printBibInSubfiles}{false} 

并在子文件中:

\ifthenelse{\boolean{printBibInSubfiles}}
   {}
   {\bibliographystyle{plainnat} 
   \bibliography{../betterbib.bib}} 

由于某种原因,将布尔值设置为 后false,“参考书目”标题会打印在子文件和主文件中,但“参考书目”标题下不会输出任何引文。此外,仅编译子文件无法正常工作。

我的文档结构如下:

main.tex

\begin[document]
...
\subfile{sub/dataprocessing}
...
\bibliographystyle{plainnat}
\bibliography{mybib}
\end{document}

子文件:

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

经过所有这些解释:我唯一想要的是从子文件访问,.bib而无需在编译主文件时手动取消注释某些内容。有人愿意吗?

PS:显然,我也尝试了“使用子文件时的参考书目“但无法让它工作。我不知道这是否能解决我的问题,因为我没有\printbibliography线程开启器的问题。

答案1

对于后人,我遇到了同样的问题 - 答案来自'使用子文件时参考书目'对我来说不起作用,因为我没有使用biblatex并且没有\printbibliography命令。

我找到了一个很好的、可行的解决方案latex-community.org,略作修改*:

主要.tex:

\documentclass[...]{...}
\usepackage{natbib}
\usepackage{subfiles}
...
\providecommand{\main}{.}  % *Modification: define file location
\def\biblio{\bibliographystyle{plainnat}\bibliography{\main/bibliography_file}}  % *Modification: added `\main/` to specify relative file location.
\begin{document}
\def\biblio{}
...
\subfile{chapter_1}
\subfile{chapter_2}
...
\bibliographystyle{plainnat}
\bibliography{bibliography}
\end{document}

tex/sub.tex:

\providecommand{\main}{..}  % *Modification: redefine path location, must go before \documentclass
\documentclass[main]{subfiles}
\begin{document}
...
\biblio
\end{document}

*修改是为了使与子文件 ( ) 位于不同目录中的参考书目文件sub.tex能够工作。如果您的sub.tex文件与 位于同一目录中ms.texbibliography_file则不需要此操作。

答案2

另一个是为了后代。这是针对那些想要使用与 OP 相同的逻辑的情况。根据子文件包文档,子文件将获取除 \begin{document} 和 \end{document} 部分中的内容之外的所有内容。因此,将布尔值设置为 false,否则设置为 true 即可使其工作。在 ShareLatex 中,您可以通过将 .bib 文件留在项目的根文件夹中并在 main.tex 中引用它来实现这一点,如下所示:

主要.tex:

\usepackage[natbibapa]{apacite} % Any preferred package would work
\usepackage{ifthen}
\newboolean{printBibInSubfiles}
\setboolean{printBibInSubfiles}{true} 
\def\bib{\ifthenelse{\boolean{printBibInSubfiles}}
        {\bibliographystyle{apacite}\bibliography{ThesisRef}}
        {}
    }
...
\begin{document}
\setboolean{printBibInSubfiles}{false}
...

子文件_1.tex:

\documentclass[../my_dir/main.tex]{subfiles}
\begin{document}
...
\bib
\end{document}

答案3

通过在主文件中使用biblatex类似方法并在序言中添加 .bib 文件来解决这个问题。

\usepackage[backend=biber]{biblatex}
\addbibresource{bibliography_file.bib}

\begin{document}

\subfile{subfile_with_citations}
\printbibliography

\end{document}

答案4

在我的情况下,前面的答案似乎都无济于事,因为主文件在根文件夹中,子文件放在单独的子文件夹中。我一直收到未找到引用的错误(即使在使用时也是如此),所以我通过简单地在子文件夹中\subfix创建指向文件的符号链接来修复它。 有点脏,但不需要修改代码 :-).bib

相关内容