![处理子文件中的 .bib](https://linux22.com/image/379709/%E5%A4%84%E7%90%86%E5%AD%90%E6%96%87%E4%BB%B6%E4%B8%AD%E7%9A%84%20.bib.png)
我有一个与在使用子文件时的参考书目。我的.bib
是引用main.tex
。编译主文件时,一切都运行良好。但在处理子文件时,我遇到了两个问题(它们很可能是相关的):
- 我无法使用自动完成功能访问围兜
- 编译子文件时,它不会插入引用。
我尝试过包括
\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.tex
,bibliography_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