编译器自动创建指定的输出目录

编译器自动创建指定的输出目录

我希望这样处理我的项目,每次我编译一个.tex文件时,编译器总是将输出放在.pdf名为的目录中output(如果不存在则创建它)。

这是一个示例终端会话,--output-directory如果不存在指定的目录,则选项无法创建指定的目录。

$ tex --output-directory=output
This is TeX, Version 3.1415926 (TeX Live 2010)
**\relax
! I can't write on file `texput.log'.
(Press Enter to retry, or Control-D to exit; default file extension is `.log')
Please type another transcript file name: 

在 TeXShop 中,我如何指定要执行的命令?

在此处输入图片描述

答案1

在 pdftex 命令前插入

mkdir -p output

如果目录不存在,TeX 本身不会创建该目录

答案2

Herbert 的解决方案将导致每次发出命令时都会创建目录pdflatex。它只能在命令行中使用,不能在 TeXShop 本身中使用。

我个人会使用 TeXShop 的“引擎”脚本来实现这一点,这样基本的 pdflatex 命令保持不变,并且您可以有选择地决定特定文档是否进入输出文件夹。

为此,请编写以下 shell 脚本:

#!/bin/bash
PATH= $PATH:/usr/texbin:/usr/local/bin
mkdir -p output
pdflatex --output-directory=output --file-line-error --shell-escape --synctex=1 "$1"

将其保存为~/Library/TeXShop/Engines/pdflatex-output.engine并使其可执行:

chmod +x ~/Library/TeXShop/Engines/pdflatex-output.engine

如果您重新启动 TeXShop,您现在将拥有一个新的引擎“pdflatex-output”,它可以在源窗口的 Typeset 按钮旁边的下拉菜单中使用。

你可以选择它作为排版引擎,或者你也可以

% !TEX TS-program = pdflatex-output

作为源文件的第一行,系统将自动选择该引擎。(您可以手动插入该行,也可以使用“宏”菜单中的“程序宏”选择它。)

此解决方案为您提供了灵活性,使您可以仅在需要使用输出目录时才使用它。

更新

上述解决方案的一个问题是 TeXShop 无法再找到结果.pdf文件,因为它假定结果文件与源文件位于同一目录中。正如您在评论中同意的那样,将所有辅助文件( 、、等)放在输出目录中,并将文件保留在与源文件相同的文件夹中.tex是可以接受的.aux.toc.bbl.pdf.tex。以下是另一个脚本由 Marcus Whybrew 用 Python 编写,它的作用正是如此。

但是,您不应该遵循那里的安装说明(我不推荐这样做),而应该使用此脚本作为引擎,就像bash上面的更简单的脚本一样。

相关内容