(如何)我可以将文件 somedir/file.tex 包含在文件 somedir/subdir/anotherfile.tex 中

(如何)我可以将文件 somedir/file.tex 包含在文件 somedir/subdir/anotherfile.tex 中

我知道可以使用somedir/subdir/anotherfile.tex来包含。反过来也可以吗?somedir/file.tex\include{subdir/file}

我知道的一个 Linux 解决方法是somedir/file.tex到 的符号链接somedir/subdir/file.tex

答案1

使用\include{../file}

..是 UNIX 的父目录,Tex 使用它。请参阅Kpathsea:路径搜索

后记

Lev Bishop 指出,这不允许您写入父目录,并且\include通常希望写入*.aux父目录中的文件。您可以通过设置 TEXMFOUTPUT 来解决缺少写入权限的问题:在 Unix 系统上,env TEXMFOUTPUT=.. latex mydoc将允许 Latex 在编译时写入(并覆盖)父目录或其任何子目录中的任何文件mydoc.tex

这比允许在 Tex 二进制文件具有权限的任何地方进行覆盖要安全一些,并且应该与 Texlive 和 Miktex 上的 Pdftex 一起使用(我不确定 Xetex 是否支持 TEXMFOUT)。

答案2

使用现代发行版,出于安全原因,您不能这样做:想法是 tex 输入文件应该只允许在目录层次结构的同一级别或更低级别写入文件,因为 tex 会很乐意覆盖预先存在的文件。阅读是可以的,但\input{../xyz}问题是这\include{../xyz}会导致写入文件../xyz.aux,这是不允许的。

正如您所说,一种解决方法是使用符号链接。另一种(不推荐)方法是停用安全功能:

  • 在 miktex 中:设置环境变量MIKTEX_ALLOWUNSAFEOUTPUTFILES=1
  • 在大多数其他 tex 发行版中,设置openout_any=a

最好的办法是避免需要包含父目录中的文件。无论如何,这都是好的,因为这样文件的结构就可以反映文档的逻辑结构。

相关内容