最近在整理算法竞赛的模板,每个章节的tex文件独立放在每一个章节的文件夹里,文件中需要插入的代码放在本章节文件夹的代码文件夹下,在多层级相对路径调用的时候出现了一些问题,这里记录一下解决方案。
首先,我的目录结构是这样的:
宿主文件 algo-template.tex
通过 \subfile{chapters/graph/graph.tex}
的方式引用 graph.tex
,然后 graph.tex
通过 \lstinputlisting{code/JSK-A1958.cc}
的方式引用JSK-A1958.cc
,在编译的时候,graph.tex
可以正常编译,但是algo-template.tex
不能编译,报错的理由是在algo-template.tex
文件目录下找不到 code/JSK-A1958.cc
这个文件;当把\lstinputlisting{code/JSK-A1958.cc}
里的路径改成 chapters/graph/code/JSK-A1958.cc
之后,宿主文件可以编译,但是 graph.tex
又编译不了了。
事实上,宿主文件和单个章节文件可以同时可编译的,我参考了stackexchange 的这篇帖子:subfiles inside a subfile using relative paths。大概是我们需要用 \providecommand{\main}{../..}
这样的命令来配合相对路径使用,具体地,在algo-template.tex
中我们如此操作
1 2 3 |
\providecommand{\main}{.} ··· \subfile{chapters/graph/graph.tex} |
而在graph.tex
中我们这样写:
1 2 3 4 |
\providecommand{\main}{../..} \documentclass[\main/algo-template.tex]{subfiles} ··· \lstinputlisting[style={CppStyle}]{\main/chapters/graph/code/JSK-A1958.cc} |
这样主文件中\main
就表示当前目录,章节文件中表示上面两级,这样就都可以编译了。
需要特别注意的是章节文件中 \providecommand{\main}{../..}
一定要写在文档类那句话的前面。
说点什么