Texmaker 中带有子文件包的参考书目

Texmaker 中带有子文件包的参考书目

我一直在尝试使用我在 Texmaker 的 Overleaf 中开发的模板来完成我的论文。我想使用子文件包,这样我就可以单独编译我​​的(最终)大型文档的各个部分,同时我还希望在编译子文件或编译主文件时打印参考书目(使用 biblatex 生成)以供引用。

我使用子文件文档中的示例在 Overleaf 中实现了这一点 https://mirror.apps.cam.ac.uk/pub/tex-archive/macros/latex/contrib/subfiles/subfiles.pdf 在第 3.3 节中,有条件地执行命令。

据我了解,使用该包时,调用:

\documentclass[../main]{子文件}

子文件的开头允许它引用 main.tex 文件,并从该文件中提取序言。然而,当我编译子文件时,Texmaker 返回一个错误,指示它找不到参考书目的 .bib。我的项目的目录结构如下:

  • 模板.sty
  • 主文本
  • 论文集
  • /sections/section1.tex

template.sty 中将参考书目的路径设置为 /addbibresource{./thesis.bib}。在 Overleaf 中,此方法没有问题,但在 Texmaker 中,我认为在编译子文件时,它无法查看正确的目录。如果我将 thesis.bib 移动到 /sections/ 文件夹,问题就解决了,但这会在编译 main.tex 时导致问题。为什么会出现此问题?我该如何解决?提前致谢。

编辑-添加代码

这是 template.sty:

\ProvidesPackage{template}
%~~~~~~~~~~~~~~~~~~Bibliography stuff~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
\usepackage[backend=biber,style=ieee,citestyle=ieee,sorting=none,isbn=false,url=false]{biblatex}
\addbibresource{./thesis.bib}
%---------------------------------------------------------------------------------

%~~~~~~~~~~~~~~~~~Acronyms and Nomenclature Definitions~~~~~~~~~~~~~~~~~~~~~~~~~~~
\usepackage{longtable}
\usepackage[automake=immediate]{glossaries} 
% nomenclature:
\newglossaryentry{test}{
    name = $t$ ,
    description = test variable,
    }

\makeglossaries
%---------------------------------------------------------------------------------

这是main.tex:

\documentclass[12pt,twoside]{report}
\usepackage{import}
\usepackage{template}
\usepackage{subfiles}

\begin{document}

\printglossary[title=Nomenclature]

\chapter{Introduction}
\subfile{./sections/section1-2}

\printbibliography

\end{document}

这是 thesis.bib:

@phdthesis{Huang1998,
author = {Huang, Chen-Fen},
school = {National Sun Yat-Sen University},
title = {{Acoustic Wave Scattering from Rough Sea Surface and Seabed}},
year = {1998}
}

这是 section1-2.tex,位于 /sections/ 文件夹中:

\documentclass[../main]{subfiles}
\begin{document}
\section{Another section}

Test citation \cite{Huang1998}.

Test glossary \gls{test}.

\ifSubfilesClassLoaded{%
    \printbibliography%
}{}
\end{document}

包含词汇表,因为它是我正在运行的编译器配方的一部分:lualatex -> biber -> makeglossaries -> lualatex -> lualatex

希望这清楚,再次感谢。

答案1

在中template.sty,将行替换\addbibresource{./thesis.bib}

\addbibresource{\subfix{thesis.bib}}

这在文档的第 3.2 节中有解释subfiles

该命令\subfix由 定义subfiles.sty,因此您必须先加载此包,例如通过main.tex将前导码中的命令重新排序为

\usepackage{subfiles}
\usepackage{template}

注意:使用语句和注释符号来编译文档的部分内容可能会更容易\input。使用如下主文件

\documentclass{report}
\usepackage{template}
\begin{document}
\input{frontmatter}
\input{chapters/chapter1}
%\input{chapters/chapter2}
%\input{chapters/chapter3}
\printbibliography
\end{document}

通过注释和取消注释\input语句,可以轻松控制文档的哪些部分需要排版。如果您有真的大型文档,您可以在下一级重复此结构chapters/chapter1

%\input{chapters/sections1/section1_1}
\input{chapters/sections1/section1_2}
%\input{chapters/sections1/section1_3}

使用这种方法,只有主文件包含前言,所有路径都是相对于主文件的。如果要保留相对于子目录的路径,可以使用包import\import文件,而不是\inputting 它们。

仅当您绝对需要包含完整的 LaTeX 文档本身的文件时,该subfiles包才需要跳过子序言。

相关内容