从基础目录运行 LaTeX

从基础目录运行 LaTeX

我有一个与此处描述的问题非常相似的问题: 如何使用包含的 TeX 创建单独章节的 PDF?

我想从多个 TeX 文件(chap01.tex、chap02.tex 等)创建单独的 PDF 文件(chap01.pdf、chap02.pdf 等),这些文件都包含在我的 maintex.tex 文件中。但是,主要区别在于我的 main.tex 文件位于我的主要项目目录中(例如 /project),而文章文件位于子目录中(例如 /project/heft1-2019)。

\documentclass[a4paper]{report}
\usepackage[utf8]{inputenc} % Required for including letters with accents
\usepackage[T1]{fontenc} % Use 8-bit encoding that has 256 glyphs
\usepackage[ngerman]{babel}

\begin{document}
\include{heft1-2019/chap01}
\include{heft1-2019/chap02}
\include{heft1-2019/chap03}
\end{document}

我尝试了不同的解决方案,但对我来说最优雅的似乎是来自 egreg 的 bash 命令: https://tex.stackexchange.com/a/31366/192099

for i in chap*.tex; do j=${i%.tex}; pdflatex -jobname=the$j "\includeonly{$j}\input{maintex}"; done

如果所有 tex 文件都在同一个目录中,那么这个 bash 命令就可以很好地运行。

由于文章的 tex 文件位于子目录中,因此编译显然不起作用。

我如何重写 bash 命令,以便我可以从主项目目录运行它并在文章文件(chap01.tex、chap02.tex,...)所在的子目录(heft1-2019)中创建 PDF?

答案1

有两种方法:

从基础目录运行 LaTeX

% maintex.tex
\documentclass{report}

\begin{document}
\tableofcontents
\include{heft1-2019/chap01}
\include{heft1-2019/chap02}
\include{heft1-2019/chap03}
\end{document}
% heft1-2019/chap01.tex
\chapter{First chapter}

Foo bar.
% heft1-2019/chap02.tex
\chapter{Second chapter}

Baz.
% heft1-2019/chap03.tex
\chapter{Third chapter}

Quux.

从包含以下内容的目录运行 Bash 命令maintex.tex

for i in heft1-2019/chap*.tex; do j="${i%.tex}"; base="$(basename "$j")"; pdflatex -jobname="$base" "\includeonly{$j}\input{maintex}"; if [ -f "${base}.pdf" ]; then mv "${base}.pdf" heft1-2019; fi; done

当你想编译整个时:

pdflatex maintex.tex

使用此方法,包含的文件的路径是相对于包含的目录的maintex.tex

从子目录运行 LaTeX

% maintex.tex
\documentclass{report}

\begin{document}
\tableofcontents
\include{chap01}
\include{chap02}
\include{chap03}
\end{document}

heft1-2019/chap01.texheft1-2019/chap02.texheft1-2019/chap03.tex如上所述。 Bash 命令仍然从包含以下内容的目录运行maintex.tex(根据您的问题):

(cd heft1-2019 && for i in chap*.tex; do j="${i%.tex}"; pdflatex -jobname="the$j" "\includeonly{$j}\input{../maintex}"; done)

当你想编译整个时:

(cd heft1-2019 && pdflatex ../maintex.tex)

使用此方法,包含的文件的路径与子目录相关heft1-2019,因为 LaTeX 是从那里运行的。

相关内容