我已经设置了以下文件树。
. [D] (working directory)
Test.tex [F]
SubFolder [D]
SubTest.tex [F]
SubSubFolder [D]
SubSubTest.tex [F]
我希望每个文件打印其相对于工作目录的路径,以便生成的 PDF 文件pdflatex Test
将显示:
[]
[SubFolder/]
[SubFolder/SubSubFolder/]
第一次尝试
使用该currfile
包。
Test.tex
\documentclass{article} \usepackage{currfile} \input{SubFolder/SubTest} \newcommand{\Dir}{\currfiledir} \begin{document} [\Dir]\par [\SubDir]\par [\SubSubDir] \end{document}
SubTest.tex
\usepackage{currfile} \input{SubSubFolder/SubSubTest} \newcommand{\SubDir}{\currfiledir}
SubSubTest.tex
\usepackage{currfile} \newcommand{\SubSubDir}{\currfiledir}
这并没有产生预期的结果。编译失败,并显示以下错误消息:
! LaTeX Error: File `SubSubFolder/SubSubTest.tex' not found.
Type X to quit or <RETURN> to proceed,
or enter new name. (Default extension: tex)
Enter file name:
! Emergency stop.
<read *>
l.2 \input{SubSubFolder/SubSubTest}
^^M
End of file on the terminal!
第二次尝试
添加import
包。(这个想法的灵感来自这个答案。
Test.tex
\documentclass{article} \usepackage{currfile} \usepackage{import} \import{SubFolder}{SubTest} \newcommand{\Dir}{\currfiledir} \begin{document} [\Dir]\par [\SubDir]\par [\SubSubDir] \end{document}
SubTest.tex
\usepackage{currfile} \usepackage{import} \import{SubSubFolder}{SubSubTest} \newcommand{\SubDir}{\currfiledir}
SubSubTest.tex
像之前一样。
这次编译成功完成,但生成的PDF文件显示与预期不同,即:
[]
[]
[]
单独测试导入包
相比之下,通过像以下代码中那样删除包currfile
,编译成功完成,并实现了预期结果。然而,这并没有真正解决问题,因为路径现在是硬编码的,而不是自动推断的。然而,它表明包import
能够正确导航文件树。
Test.tex
\documentclass{article} \usepackage{import} \import{SubFolder}{SubTest} \newcommand{\Dir}{\hspace{0pt}} \begin{document} [\Dir]\par [\SubDir]\par [\SubSubDir] \end{document}
SubTest.tex
\usepackage{import} \import{SubSubFolder}{SubSubTest} \newcommand{\SubDir}{SubFolder/}
SubSubTest.tex
\newcommand{\SubSubDir}{SubFolder/SubSubFolder/}
答案1
\newcommand
关键是替换第二次尝试中的by调用\let
,得到以下代码。这将生成一个显示结果非常接近所需结果的 PDF 文件:
[]
[SubFolder/]
[SubFolder//SubSubFolder/]
感谢用户 202729 在我的原始帖子的评论中一步步提出的建议,我找到了这个解决方案。
可以看出,子子文件夹的路径在两个文件夹名称之间呈现为两个正斜杠,而不是单个正斜杠。要获得单个正斜杠,请将\import
代码中的所有 替换为\subimport
。这个想法是 user202729 在对相关文章的评论。