嵌套文件如何推断其路径?第一部分:从根到叶

嵌套文件如何推断其路径?第一部分:从根到叶

我已经设置了以下文件树。

. [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 在对相关文章的评论

相关内容