正如标题所示,我希望能够选择 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
等。首选项项目还可用于向命令添加标志。biber
pbibtex
在 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,但还是有一点帮助。