我希望这样处理我的项目,每次我编译一个.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
上面的更简单的脚本一样。