我在使模块化文档工作时遇到了一些麻烦。
这是我的文件目前的样子
./rootdoc.tex
./tex/childdoc.tex
./bib/bibliography.bib
这些文件看起来像...
./rootdoc
\documentclass{book}
%some packages
\usepackage{subfiles}
\usepackage[colorlinks=true]{hyperref}
\usepackage[backend=biber,style=numeric]{biblatex}
\addbibresource{bib/bibliography.bib}
\begin{document}
\subfile{tex/childdoc.tex}
\printbibliography[heading=bibintoc]
\end{document}
./tex/childdoc
\documentclass[../rootdoc.tex]{subfiles}
\begin{document}
\chapter{Sample Chapter}
some text that i have to cite\cite{ross}
\printbibliography
\end{document}
编译根文档时一切正常,我得到以下内容
但是当我编译 .\tex.childdoc 时我得到了
任何帮助将不胜感激。
答案1
这不是我的解决方案,但我想我会结合我在网站上找到的另外两个解决方案。
使用子文件时的参考书目 和 使用相对路径在子文件中嵌套子文件
像之前一样
./rootdoc.tex ./tex/childdoc.tex ./bib/bibliography.bib
在./rootdoc.tex
文件中
\documentclass{book}
\usepackage{subfiles}
\usepackage[colorlinks=true]{hyperref}
\providecommand{\main}{.}
\usepackage[backend=biber,style=numeric]{biblatex}
\addbibresource{\main/bib/bibliography.bib}
\makeatletter
\newrobustcmd*{\nobibliography}{%
\@ifnextchar[%]
{\blx@nobibliography}
{\blx@nobibliography[]}}
\def\blx@nobibliography[#1]{}
\appto{\skip@preamble}{\let\printbibliography\nobibliography}
\makeatother
\begin{document}
\subfile{./tex/childdoc.tex}
\printbibliography[heading=bibintoc]
\end{document}
并在./tex/childdoc.tex
文件中
\providecommand{\main}{..}
\documentclass[../rootdoc.tex]{subfiles}
\begin{document}
\chapter{Sample Chapter}
some text that i have to cite\cite{ross}
\printbibliography
\end{document}
现在.bib
引用了正确的文件,并且当编译子文件时,编译根文档时参考书目不会出现两次。
答案2
我也花了好几个小时来解决这个问题。我基本上只是想能够编译单个子文件,以便在写作过程中能够将单个章节发送给我的论文导师。
Quantifeye 提供的两个链接中的不同解决方案肯定更加灵活,但下面的解决方案非常简单并且适合我的工作流程:
.bib
在序言中调用时,只需使用文件的绝对路径即可\addbibresource{...}
,例如
\documentclass{book}
%some packages
\usepackage{subfiles}
\usepackage[colorlinks=true]{hyperref}
\usepackage[backend=biber,style=numeric]{biblatex}
%Use absolute paths to .bib-files for the subfiles to understand their location:
\addbibresource{/home/Username/Dropbox/Thesis/TeX_code/thesisReferences.bib}
\begin{document}
\subfile{tex/childdoc.tex}
\printbibliography[heading=bibintoc]
\end{document}
并在子文件中
\documentclass[../rootdoc.tex]{subfiles}
\begin{document}
\chapter{Sample Chapter}
some text that i have to cite\cite{ross}
%\printbibliography %Comment or un-comment depending on desired output
\end{document}
如果我想让我的主管看到参考文献,我当然会将其添加\printbibliography
到子文件中,但我主要关心的只是编译其他任何内容,而不会让我的引用看起来很奇怪或让我的编辑器向我抛出错误消息。
笔记:这个解决方案显然不是如果您处理共享文档或者想要在具有不同文件系统的更多机器上工作,那么这是最佳选择。
然而,这是一个非常简单的解决方案,并且对我和我的工作流程的要求来说效果很好。