当设置不同的输出目录时使用 TeXShop 预览窗口

当设置不同的输出目录时使用 TeXShop 预览窗口

在 TeXShop 中,在“首选项”->“引擎”下,我通过添加 修改了 LaTeX 命令-output-dir=/tmp。我的所有辅助文件和最终输出文件都位于此目录中,而不是我的源文件所在的目录中。这就是我想要的,目前它可以正常工作。

但是,当 output-dir 设置为任意值时,输出 pdf 不会在成功排版后在 TeXShop Preview 窗口中打开。我可以使用另一个 pdf 查看器从 /tmp 手动打开 pdf。此外,窗口-> 源<=>预览菜单项不执行任何操作。

有没有办法结合不同的输出目录来恢复自动预览功能?

答案1

让我进一步解释一下我上述评论中建议的解决方案。在 TeXShop 中,您可以选择在按下Typeset。一个“引擎”基本上是一个调用标准 TeX 命令的 shell 脚本,有时甚至更多(请参阅 TeXShop 帮助面板或这个帖子例如)。在您的案例中,修改 TeXShop 首选项中的 pdfTeX 命令会更改标准 LaTeX 引擎。由于您的修改,TeXShop 无法在排版后自动打开 PDF 预览。恢复此行为的一种方法是编写一个新引擎。

为此,您只需创建一个包含以下代码的 shell 脚本

#!/bin/bash
pdflatex --output-dir=/tmp "$1"
open -a TeXShop /tmp/$(echo $1 | sed 's/\(.*\)\..*/\1\.pdf/')

确保执行位处于活动状态(chmod +x),将扩展名更改为.engine并将脚本移动到~/Library/TeXShop/Engines文件夹。启动 TeXShop 并在按钮旁边的弹出菜单中选择新引擎Typeset,然后按Typeset

可能有更优雅的解决方案,但是这个有效。

答案2

我的解决方案是使用latexmklatexmkrc引擎。然后我将目录中的以下文件与我的源 ( .tex) 文件一起使用。(您也可以将其添加到全局~/latexmkrc文件中。):

# latexmk Init File; -*-perl-*-
$pdf_mode = 1;
$out_dir = '_build';
mkdir $out_dir;
$pdflatex = 'pdflatex --synctex=1 %O %S; cp %D .';

这将首先确保$out_dir(在此处设置为_build)存在,然后将pdflatex使用标志调用--output-directory=_buildlatexmk执行此操作)。最后,在每次调用之后pdflatex,生成的.pdf文件(由%D将被复制到当前目录,覆盖本地文件,触发TeXShop的预览器重新加载文件。(正如原始海报所提到的,创建符号链接是不够的。)

我发现将生成的 pdf 文件复制出_build目录的行为很有用,因为我通常想保留它,即使删除所有辅助文件(只需通过删除目录即可完成_build)。

通过添加以下评论

% !TEX TS-program = pdflatexmk

在来源顶部(.tex,你可以确保TeXShoppdflatexmk将默认使用引擎。

这种方法的优点是,通过分发文件latexmkrc.tex文件一起分发,对于使用TeXShop– 即使他们忘记选择pdflatexmk引擎。

* 如果满足以下条件,此方法将“有效”TeXShop安装在 3.07 或更高版本。否则,您将需要(让您的同事)将非活动pdflatexmk.engine文件复制到活动引擎目录(注意:~/Library/是文件夹Library中的文件夹$HOME,而不是系统/Library文件夹):

cp ~/Library/TeXShop/Engines/Inactive/Latexmk/pdflatexmk.engine ~/Library/TeXShop/Engines/

也可以看看

答案3

在之前的回答中,我发现platexmkrc需要一个文件名(这里的字符“p”很重要),这样一切都可以按预期运行。Herbert SchulzTexShop在文件中解释了这个细节(TexShop/Engines/Inactive/Latexmk/Latexmk For TeXShop.pdf[电子邮件保护]),也引用于回答。

我发现,因为latexmk -commands响应了To run pdflatex, I use 'pdflatex -synctex=1 -halt-on-error %O %S; cp %D .',但 TeXShop 完全忽略了 中的这一行latexmkrc(尽管它解释了其他行,创建了一个新目录并将文件放入 中定义的目录$out_dir = '_build';latexmkrc)。因此我现在有两个文件,一个latexmkrc和一个platexmkrc

我跑

  • Latexmk, John Collins, 19 Jan. 2017. Version 4.52c
  • pdfTeX 3.14159265-2.6-1.40.18 (TeX Live 2017)
  • TeXShop Version 3.62 (3.62)

(这是我的第一篇帖子,因此我无法编辑/评论)

相关内容