我正在从一组子 .tex 文档中创建一个“主文档”,以便可以分别编译主文档和子文档。
IE
主要文档看起来是这样的:
\documentclass{report}
\usepackage{subfiles}
\begin{document}
\tableofcontents
\subfile{chapter01}
\subfile{chapter02}
\subfile{chapter03}
\end{document}
子文档如下所示:
\documentclass[main.tex]{subfiles}
\begin{document}
\chapter{chapter title}
Some interesting text here.
\section{section 01 title}
A section of text
\section{section 02 title }
another section of text
\end{document}
我想将这些文件放在具有以下结构的单独目录中:
(1) Parent Folder
(A) Main Document Folder
(B) Folder of Chapters
(i) Chapter 01 Folder
(ii) Chapter 02 Folder
(iii) Chapter 03 Folder
有没有办法在主文档序言中指定文件路径,以便在“章节文件夹”中的所有文件夹中搜索相应的文件?
提前致谢
答案1
我找到了一种简单的解决方案。我定义文件路径的目的是使这些文档能够轻松地从一台计算机移植到另一台计算机。
我发现我可以简单地使用
\newcommand{\DirectoryPath}{DirectoryPath}
在序言中,
\subfile{\DirectoryPath filedirectory/filename}
在主文件的主体中。这样,如果我将文件移动到新计算机,就可以轻松更新文件目录路径。
答案2
根据您编译文档的方式,您可以将TEXINPUTS
环境变量设置为类似于/path/to/main/directory//
双斜杠添加所有子目录的内容。
答案3
您可以使用texosquery
获得文件列表。这是一个 Java 应用程序,旨在使用 提供的接口在 TeX 的 shell escape 中使用texosquery.tex
。(texosquery.sty
只是一个输入通用 TeX 代码的小型包装包。)
如果要将其与 TeX 的限制模式一起使用,则需要设置文件texosquery.cfg
以允许它。但是,限制模式会禁止某些字符以防止恶意代码注入,因此在路径名包含空格的情况下,它可能无法在限制模式下工作。如果您有空格,正如您的问题似乎暗示的那样,那么您需要安全性较低的不受限制的模式。
您可以使用 查找所有子目录\TeXOSQuerySubDirList
。例如:
\documentclass{article}
\usepackage{etoolbox}
\usepackage{texosquery}
\TeXOSQuerySubDirList{\subdirlist}{,}{.}
\begin{document}
\ifdefempty\subdirlist
{Query Failed!}
{%
Subdirectories:
\newcommand{\handler}[1]{#1. }
\expandafter\forcsvlist\expandafter\handler\expandafter{\subdirlist}
}
\end{document}
此示例仅列出当前目录中的子目录名称 ( .
),这些子目录名称被获取并存储在以逗号分隔的列表中 ( \subdirlist
),其中:
\TeXOSQuerySubDirList{\subdirlist}{,}{.}
这不会降入子目录,只会显示列表每个元素的基本名称(而不是完整路径)。如果您想要按字母顺序排列的列表,则可以使用\TeXOSQuerySubDirListNameAsc
。
另一种可能性是分层搜索与特定正则表达式匹配的所有文件。例如,.+\.tex
匹配所有.tex
扩展名为的文件:
\documentclass{article}
\usepackage{etoolbox}
\usepackage{texosquery}
\TeXOSQueryWalk{\texfilelist}{,}{.+\string\.tex}{.}
\begin{document}
\ifdefempty\texfilelist
{Query Failed!}
{%
TeX files:
\newcommand{\handler}[1]{#1. }
\expandafter\forcsvlist\expandafter\handler\expandafter{\texfilelist}
}
\end{document}
在这种情况下,列表的每个元素都是相对路径。由于它是为在 TeX 中工作而设计的,因此/
用作目录分隔符。