这是一个更通用的版本Adam Liter 的问题关于 设立arara
规则knitr
.
基本问题是这样的:
如何才能启用对定制扩展和指令的支持
araraconfig.yaml
?
如果不是文档明显有漏洞的话,答案会很简单。问题是,使用手册中建模的语法在arara
运行时会导致以下错误:
I didn't find any directives in 'myfile.XXX', and so didn't do anything. Is that what you really wanted?
您尝试启用的扩展在哪里XXX
。Adam 的问题包含一个完整记录的错误示例knitr
。
答案1
解决方案包括Adam Liter 的问题据我目前所知,我曾负责处理我所关心的案件。
我发布了我用来启用mp
扩展支持的方法,希望这种方法能够更普遍地发挥作用和/或帮助隔离 Adam 仍然遇到的问题。在与 Adam 讨论后,我们决定最好发布一个新的通用问题,而不是在回答knitr
特定问题时包含更通用的答案。(我无法测试这knitr
一点。)实际上,这里的解决方案都是 Adam 努力的结果。我很幸运地发现它与我的配置完美兼容,并且适用于metapost
。
可能相关的背景信息:我正在使用带有 TeX Live 2013 的 GNU/Linux。(我们不知道它是否适合我,因为我使用 Linux 还是因为我担心metapost
。)
这是我的araraconfig.yaml
:
!config
paths:
- <arara> @{userhome}/.arara/rules
filetypes:
- extension: tex
- extension: mp
pattern: ^(\s)*%\s+
- extension: dat
pattern: ^(\s)*%\s+
- extension: dtx
- extension: ltx
- extension: sk
pattern: ^(\s)*[%#]\s+
# vim: set nospell:
重要提示:正如 Adam 文档所述,您需要\s
文档中指定的位置\\s
。 (我假设这\s
意味着“空格”之类的东西,尽管手册并没有真正解释这一点。由于正则表达式的语法各不相同,这有点令人沮丧。)
这是我使用的规则metapost
。规则如下.arara/rules/mpost.yaml
:
!config
# metapost rule for arara
identifier: mpost
name: metapost
command: <arara> mpost @{action} @{options} "@{file}"
arguments:
- identifier: action
flag: <arara> -interaction=@{parameters.action}
- identifier: options
flag: <arara> @{parameters.options}
# vim: set nospell:
然后,我在源文件中添加以下指令行mp
:
% arara: mpost
这使我能够运行
arara figs.mp
或者
arara figs
并arara
做了正确的事情。无论哪种方式,我都会得到“成功”并figs.1
产生结果。(这是本例中的预期结果,转换为 PDF 显示结果也包含我所期望的内容。)
答案2
(如果这作为评论会更好,请原谅。我的声誉不足以发表评论。)
以下规则在仅使用基本文件名调用时似乎效果很好。也可以使用arara
单个规则将 Rnw 源一直编译为 PDF,见下文。
!config
identifier: knitr
name: knitr
command: <arara> RScript -e "library(knitr); knit('"@{source}"', output='"@{target}"')"
arguments:
- identifier: source
flag: <arara> "@{parameters.source}"
default: <arara> "@{getBasename(file)}".Rnw
- identifier: target
flag: <arara> "@{parameters.target}"
default: <arara> "@{getBasename(file)}".tex
不幸的是,我无法解决原始问题调用我的源 Rnw 文件时arara
。在这种情况下,arara
会抱怨找不到文件。这是上述规则的问题,因为我想arara
再次调用以将 .tex 文件编译为 PDF。指令
% arara: knitr
仍作为 .tex 文件的第 1 行存在。因此,后续调用实际上arara
在来源 Rnw文件,而不是预期的内容。(我不确定为什么,因为我的配置文件中最后列出了 Rnw 扩展,如下所示。)当然,可以手动编辑指令,但这很笨拙且不方便。
所以我们仍然需要一个解决方案。这里有一个简单的解决方法。此规则首先调用knitr
,然后xelatex
调用引擎。
!config
identifier: knitr
name: knitr
commands:
- <arara> RScript -e "library(knitr); knit('"@{source}"', output='"@{target}"')"
- <arara> xelatex "@{target}"
arguments:
- identifier: source
flag: <arara> "@{parameters.source}"
default: <arara> "@{getBasename(file)}".Rnw
- identifier: target
flag: <arara> "@{parameters.target}"
default: <arara> "@{getBasename(file)}".tex
这是我使用此规则的配置文件。
!config
paths:
- <arara> /path/to/my/knitr/rule
filetypes:
- extension: tex
- extension: dtx
- extension: ltx
- extension: Rnw
pattern: ^(\s)*%\s+