我一直在尝试使用我在 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
文件,而不是\input
ting 它们。
仅当您绝对需要包含完整的 LaTeX 文档本身的文件时,该subfiles
包才需要跳过子序言。