在 TeXShop 中,是否有指令根据每个文档选择 biber 或 BibTeX?

在 TeXShop 中,是否有指令根据每个文档选择 biber 或 BibTeX?

正如标题所示,我希望能够选择 TeXShop 在文档中使用 biber 还是 BibTeX,而不是使用命令行或更改 TeXShop 首选项中的默认值。

对于 TeX 引擎来说,这很容易;例如,你可以将以下内容放在 TeX 文件顶部附近

% !TEX TS-program = pdflatex

告诉 TeXShop 使用 pdflatex 进行编译,而不管首选项中的默认值如何。是否存在针对参考书目传递者的此类指令?我希望能够为此点击+ + B。Latexmk 提供了执行此操作的功能,但我想手动进行编译。

最后说明

解决方案涉及一个 shell 脚本。我做了这个可在 GitHub 上获取,因此请随意使用并改进它。

答案1

我通过一种略显黑客的方式解决了这个问题。首先,我写了一个名为的脚本,TeXShopBib.sh如下所示

#!/bin/sh

filestem=${1%.*}
bibtype=`head -n20 "${filestem}.tex" | sed -n 's/\%[ ]*![ ]*BIB[ ]*TS-program[ ]*=[ ]*\([a-z]*\)/\1/p'`

if [ -z $bibtype ]; then
    echo "No option detected in TeX file. Defaulting to BibTeX."
    bibtype="bibtex"
else
    echo "Option $bibtype detected in TeX file."
fi

eval $bibtype $filestem

并将其放置在 TeXShop 可以找到的地方(/usr/texbin我的情况只是为了快速测试)。确保脚本的可执行位已设置。如果您已保存脚本,/usr/texbin则需要发出命令:

sudo chmod +x /usr/texbin/TeXShopBib.sh 

然后我简单地改变了偏好设置,选择这个脚本作为 BibTeX 引擎。

在此处输入图片描述

如果 TeX 文件有如下一行

% !BIB TS-program = biber

或者

% !BIB TS-program = bibtex

在前 20 行中,它会计算出其余部分并与 TeXShop 控制台正常工作,类似于 TeXShop 处理 TeX 引擎的方式。当文件中未检测到任何内容时,此脚本粗略地默认为 BibTeX tex,但对于我的目的而言,它并不比必要的更复杂。如果对此感兴趣,那么我可以让它更强大。

答案2

从 3.21 版本开始,提供了此功能(正是根据此请求!)。

来自发行说明

下一个功能是 Alan Munn 大约一年前要求的。抱歉这么晚才发布。与此同时,Mark Everitt 编写了一个巧妙的脚本来提供此功能。该脚本提供的功能现已内置于 TeXShop 中。

TeXShop 排版菜单中的命令 BibTeX 可运行 BibTeX;请注意,此命令有键盘快捷键。在日本,人们使用不同的程序,因此 Yusuke Terada 在引擎选项卡下的 TeXShop 首选项中提供了一个项目,用于选择选择此菜单项时要运行的程序。例如,,,bibtex等。首选项项目还可用于向命令添加标志。biberpbibtex

在 TeXShop 3.21 中,可以使用以下语法逐个文件选择 BibTeX 引擎

% !BIB TS-program = 

替代语法

% !BIB program = 

也将被接受。等号后面的项目给出程序的名称(例如biber)和任何所需的标志。此行应写在源文件的前二十行内。

% !BIB TS-program =行优先。如果没有该行,则首选项将确定运行哪个命令。

因此,您需要做的就是更新您的 TeXShop 副本(它应该要求您这样做)。

答案3

不幸的是没有。这将是一个非常有用的东西,但它目前不存在。在 MacOS 邮件列表上的 TeX 上有一些关于它的讨论,但在开发方面没有任何进展。

这是一种比较 hack 的解决方法:

  • 制造biber引擎
  • 在文件顶部输入:

    %# !TEX TS-program = biber
    % !TEX TS-program = pdflatex (or whatever regular engine the file uses)

当您想要biber在文件上运行时,#从第一行删除并按+ T;由于biber引擎是第一行,因此它将首先运行。

这不像使用++自动运行引擎那么方便B,但还是有一点帮助。

相关内容