使 \input 路径工作,无论 latex 从何处运行

使 \input 路径工作,无论 latex 从何处运行

在目录中/user/,我有一个文件header.tex

在文件中/user/dir/main.tex,我使用\input{../header.tex}

当我pdflatex main.tex从运行时/user/dir,一切都正常。但如果我pdflatex dir/main.tex从运行/user,就会出现File ../header.tex not found错误。

是否可以input根据pdflatex运行的文件进行定义(此处/user/dir/main.tex),以便pdflatex无论从哪个文件夹运行它都可以工作?

答案1

这个答案是根据 David Carlisle 的评论阐述的,希望对某人有所帮助。由于\input无法以这种方式进行更改,因此基本上有两种策略:

  • 现在让 latex 全局了解文件,最好通过添加到header.tex~/texmf/tex/latex/<username>添加到变量TEXINPUTS。有关更多详细信息,请参阅这个答案就我而言,我希望我的文件独立于一个目录中(对于git),因此我选择了第二个选项。

  • 编写一个脚本,进入每个目录,然后运行pdflatex等等。这是我使用的选项。

首先,我生成所有文件的列表tex并将其存储在listOfTeX.txt(从父目录运行):

find . -type f \( -iname "$.tex" \) >> listOfTeX.txt

然后,

while read FILE; do 
    printf "\n ----> $FILE\n"; # prints the file path and name
    DIR=$(dirname "$FILE");    # extracts the directory
    cd $DIR;                   # goes to that directory
    texfot pdflatex $(basename "$FILE") | grep "error";  # run pdflatex
    cd ../;                 # goes back to the parent directory (in my case)
done < listOfTeX.txt

该行的解释texfot pdflatex $(basename "$FILE") | grep "error";texfot用于减少输出pdflatex,请参阅egreg 的回答。然后我使用grep "error"仅显示错误。这样可以直接找到有问题的文件和路径。当然要根据您的需要进行调整( 也一样cd ../)。

相关内容