AUCTeX -output-directory + 将 *.pdf 复制到工作目录

AUCTeX -output-directory + 将 *.pdf 复制到工作目录

第一部分:

有人可以给我举个例子说明如何配置 AUCTeX 以使用该-output-directory选项吗?

我尝试过-output-directory="/tmp"在不同位置以多种方式插入,但不起作用——使用两个连字符,使用一个连字符,使用双引号,使用单引号,不使用任何引号,在之前%t,在之后%t,在结束单引号之前,......

这是我的文件latexmk中工作目录的通用代码:init.el

(自定义变量
 '(TeX-command-list(quote(("LaTeX" "%`%l%(mode)%' %t" TeX-run-TeX nil(latex-mode):help "运行 LaTeX"))))

第二部分 — — 额外加分

然后,我想更进一步,使用以下示例将 PDF 复制回工作目录。我在使用 TeX Live 的 OSX 上,因此-aux-directory不支持。

配置latexmk以便它使用的命令pdflatex执行普通pdflatex命令,然后将输出文件复制到您想要的位置。您可以latexmk使用-output-directory选项调用。

latexmk配置文件中的一个适当行是

$pdflatex .= ' && cp "%D" "%R.pdf"';

您还可以让它显示有关复制输出文件的消息:

$pdflatex .= ' && (cp "%D" "%R.pdf"; echo 将输出文件从当前目录中的 "%D" 复制到 "%R.pdf")';

(注意:第二条建议应该全部放在一行上。)

然后你可以latexmk通过以下方式调用:

latexmk-outdir=/tmp

-output-directory对于那些对OSX 机器上的 synctex 选项感兴趣的人,请添加下面答案中-synctex=1提出的代码行:T. Verron

;; use Skim as default pdf viewer
;; Skim's displayline is used for forward search (from .tex to .pdf)
;; option -b highlights the current line; option -g opens Skim in the background

(setq TeX-PDF-mode t)

(setq TeX-view-program-selection '((output-pdf "Skim")))

(setq TeX-view-program-list
    '(("Skim" "/Applications/Skim.app/Contents/SharedSupport/displayline -b -g %n /tmp/%o %b")))

(server-start); start emacs in server mode so that skim can talk to it

也可以看看https://stackoverflow.com/questions/7899845/emacs-synctex-skim-how-to-correctly-set-up-syncronization-none-of-the-exi


编辑:以下stackoverflow链接包含使用 Emacs 的替代方法,start-process运行latexmk并将 .pdf 文件复制回工作目录(将辅助文件保留在/tmp文件夹中)——如果 latexmk 编译成功,则打开 Skim(带前向同步)——如果 latexmk 编译生成错误,则显示错误缓冲区。 https://stackoverflow.com/questions/18705774/if-latexmk-finishes-okay-then-show-pdf-else-display-errors

答案1

如果你非常想使用 AUCTeX:

(add-hook 'LaTeX-mode-hook (lambda ()
                 (push 
                  '("Latex_outdir" "%`pdflatex --output-directory=/tmp %(mode)%' %t" 
                TeX-run-TeX nil (latex-mode doctex-mode) 
                :help "Run pdflatex with output in /tmp")
                  TeX-command-list)))

您在上一条评论中链接到的问题仍未得到解答,并且会导致此设置出现严重问题:AUCTeX 将无法找到您的辅助文件,从而推断出编译步骤的下一步。

我建议您使用latexmk整个过程来代替:

(add-hook 'LaTeX-mode-hook (lambda ()
                 (push 
                  '("Make" "latexmk -outdir=/tmp %t" TeX-run-TeX nil t
                :help "Make pdf output using latexmk.")
                  TeX-command-list)))

Latexmk 知道该选项outdir,并且会自动在此目录中搜索辅助文件。

无论哪种方式,请注意以下几点(来自man latexmk):

通常,为输出文件指定的目录是当前工作目录的子目录。但是,如果您指定其他目录,例如“/tmp/foo”或“../output”,请注意这可能会导致问题,例如,makeindex 或 bibtex。这是因为这些程序的现代版本在默认情况下,当它们发现被要求写入似乎不是当前工作目录或其子目录之一的目录中的文件时,它们将拒绝工作。这是整个 TeX 系统的安全措施的一部分,旨在防止恶意或错误的 TeX 文档错误地干扰用户的文件。如果对于 $out_dir 或 $aux_dir 您确实需要指定绝对路径名(例如“/tmp/foo”)或包含更高级别目录的路径(例如“../output”),那么您需要禁用安全措施(并承担任何风险)。可以通过临时将操作系统的环境变量 openout_any 设置为“a”(如“all”)来实现,以覆盖默认的“paranoid”设置。

此设置的另一个潜在问题是,您的所有文档将共享同一个临时目录,因此您需要确保它们都有不同的名称。

对于您的cp步骤,您可以在其中使用此行.latexmkrc

$pdflatex .= ' && cp -v %Z/%D %D';

请注意,其中大部分都未经测试,如果没有用,请告诉我。

答案2

至于 cp 步骤,在 Ubuntu 13.10 上,我使用 latexmkrc 文件中的这一行就可以了:$pdflatex = 'xelatex %O %S && cp %D %R.pdf';

我的完整 latexmkrc 文件如下:

$pdf_mode = "1";
$out_dir = "out";
$pdflatex = 'xelatex %O %S && cp %D %R.pdf';

相关内容