(相对) 路径如何与子文件包一起工作?

(相对) 路径如何与子文件包一起工作?

我试图理解如何将(相对)路径与包一起使用subfiles。特别是,我不清楚我通常会包含在\include、、\input\includegraphics中的内容\bibliography应该如何包含在子文件中。

  1. \include子文件是否使用或\input或添加具有相对于子文件目录的路径的内容是否重要\import,或者它是否因为内部而做同样的事情subfile处理而做同样的事情?包文档注意,它\import用于解决独立编译不在“主文件”目录中的子文件的问题,其中包含\usepackage{subfiles}

有时,将子文件及其图像和补充文件一起放入其自己的目录中是可取的。现在的困难是,这些附加文件必须根据主文件或子文件的排版方式通过不同的路径进行寻址。从 1.3 版开始,子文件包使用导入包来处理此问题。

  1. 对于主文件中的每次使用\subfile,我是否需要先更改\graphicspath,我是否需要先更改以确保图形路径设置为包含相应子文件的目录?在文档第 5 页底部的示例中,不需要更改图形路径,尽管这个帖子表明这是必需的,从而造成混乱。

  2. 虽然我有一个项目范围的 .bib 文件,每个子文件都使用它来生成引文和参考书目,但如果我想要(a)在编译主文件时得到一个总体参考书目,并且(b)在编译给定的子文件时只得到与特定子文件有关的条目,我是否需要以某种方式指定 .bib 文件相对于每个子文件的路径?这个帖子似乎接近回答这个问题,但不清楚其具体如何运作。

答案1

为了缓解一些困惑:2020 年之前的大多数帖子都提到了旧版本的软件包subfiles,这需要做更多的工作。较近期帖子中的信息可能比较旧帖子中的信息更可靠。

包含、输入和使用子文件包导入

“子文件是否使用 \include 或 \input 或 \import 来添加具有相对于子文件目录的路径的内容是否重要,或者它是否因为内部子文件处理而执行相同的操作?”

是的,这很重要,这些命令的作用不同。告诉 LaTeX用文件的内容\input替换命令;如果此文件引用其他文件,则路径信息将相对于包含该命令的文件进行解释,即使该文件位于另一个目录中。在这方面是相似的,但做了一些额外的事情。但是, 会注意修改输入和图形路径,以便解释导入文件中的任何、、和语句中给出的路径\input\input\include\import\input\include\includegraphics\import\subfile相对的到导入的文件。\subfile本质上是一个\import命令,但另外跳过了导入文件的前言。因此,\import和的理念\subfile是,导入/子文件文件中的任何路径信息都与此文件相关,无论其他哪个文档使用该文件。

带有子文件包的图形路径

“我是否需要先更改 \graphicspath 以确保图形路径设置为包含相应子文件的目录?”

不,这是件小事\import\subfile要小心处理。

如何使用项目范围的 bibfile

以下示例假设您使用经典 BibTeX 和以下项目结构:

main.tex
allrefs.bib
part1/details.tex

主要.tex:

\documentclass{article}
\bibliographystyle{plain}
\usepackage{subfiles}
\begin{document}
This is the main file, citing~\cite{a}, but also~\cite{b}.
\subfile{part1/details}
\bibliography{allrefs}
\end{document}

allrefs.bib:

@Article{a,
  author =  {Morris, B.},
  title =   {Whipping the whip},
  journal = {JWCS},
  year =    {2022}
}
@Article{b,
  author =  {Henk, V.},
  title =   {Hipping the hop},
  journal = {JWCS},
  year =    {2022}
}

第 1 部分/详细信息.tex:

\documentclass[../main]{subfiles}
\begin{document}
\section{The details}
This is a subfile, but can also be processed as a main file.
It sites~\cite{b}.
\ifSubfilesClassLoaded{%
  \bibliography{../allrefs}% <<< path relative to this file
}{}
\end{document}

在主目录中,你可以main.tex使用以下命令进行排版

pdflatex main; bibtex main; pdflatex main; pdflatex main

而子文件可以用

cd part1; pdflatex details; bibtex details; pdflatex details; pdflatex details

由此得出文档main.pdf(左)和part1/details.pdf(右)。 在此处输入图片描述

答案2

我曾经subfiles写过一个相当广泛的作品集,它由八个章节、一个包含附加文献的附录和一个包含大量外部 PDF 的档案组成。所有这些都是作为主文件的子文件创建的。我目前正在使用相同的设置将该作品集重新制作成一本书。作品集和书籍均基于Legrand 的公共模板,可以在其他网站The Orange Book上找到。Overleaf

使用Orange Book一个structure.tex文件来定义要创建的书籍的大量布局。它本质上是preamble主文件的。使用命令将该文件加载到主文件中\input{structure.tex}。由于文件bibliographic environment中也包含,因此structure.tex主文档的前几行如下所示:

\documentclass[11pt,fleqn]{book} 

\input{structure.tex} % Insert the commands.tex file which contains the majority of the structure behind the template
\addbibresource{hb_specialist_new.bib} % BiblateX bibliography file
\input{appendix/woordenlijst}

\usepackage{subfiles}

如您所见,我将三个单独的文件加载到我的主要 tex 文件中。最后一个文件woordenlijst包含glossery本书所有章节中使用的条目。bibliography源文件以通常的方式加载。structure.texhb_specialist_new.bib文件都位于与main.tex文件相同的目录中。该woordenlijst.tex文件位于名为附录

章节位于主文件夹的子文件夹中,其图表位于其文件夹的子文件夹中。因此相对于主文件夹有两个文件夹深度。文件夹结构简而言之如下:

Parent folder containing the `main.tex`, `structure.tex` and `hb_specialist_new.bib` files
|_ figures folder that contain images for chapter heading and main file
|_ appendox folder containing `woordenlijst.tex`
|_ domein1 folder containing `chapter_one.tex`
   |_ figures1 folder containing the figures used in chapter one
|_ domein2 folder containing `chapter_two.tex`
   |_ figures2 folder containing the figures used in chapter two
|_ etc.

main.tex文件加载章节文件使用以下行(这里给出前两章):

%----------------------------------------------------------------------------------------
%   CHAPTER 1
%----------------------------------------------------------------------------------------

\chapterimage{lancaster1.jpg} % Chapter heading image

\subfile{domein1/zien_weten}

%----------------------------------------------------------------------------------------
%   CHAPTER 2
%----------------------------------------------------------------------------------------

\subfile{domein2/zien_begrijp}

由于Orange Book模板在章节标题中使用了图片,因此本例中包含了该文件,以显示如何在章节文件中使用相对路径。使用包时,该图像文件必须包含在章节文件的标题中subfiles。使用包时,import您可以删除该图像加载行。

\documentclass[../hbspec_main_mhc]{subfiles}

\chapterimage{../figures/lancaster1.jpg} % Chapter heading image

\begin{document}

\chapter{Weten en begrijpen}\index{Weten en begrijpen}
\label{chp:weten}

如您所见,图像标题的路径由其相对路径给出。在章节文件中,使用以下行加载图形:

{\includegraphics[width=0.95\linewidth]{figures1/Emotional-Intelligence-Competencies.png}}

请记住文件夹图1域1(第一章)文件夹。编译时,这些图像从各自的路径加载。

总结一下您的问题:

  1. 如何将另一个文件包含到子文件只要你保持路径完整性在您的文件夹和子文件夹中。
  2. \graphicspath当您在 中使用相对路径结构时,无需更改\includegraphics。但是如果您愿意,您提到的问题中的两个答案都非常有用。
  3. 只要你bibliography.bib前言主文件的所有子文件都可以访问该文件,并且将为主文件中的所有子文件创建参考书目。

笔记我目前使用包import里面的主文本文件。从 切换到subfiles相当import容易,只需更改加载章节文件。主文件现在包含以下几行来加载第一章:

%----------------------------------------------------------------------------------------
%   CHAPTER 1
%----------------------------------------------------------------------------------------

\chapterimage{lancaster1.jpg} % Chapter heading image

\subimport{domein1}{zien_weten}

在第一章的标题中前言行不再需要,因此章节文件的第一行内容如下:

\chapter{Weten en begrijpen}\index{Weten en begrijpen}
\label{chp:weten}

相关内容