向 arara 添加自定义扩展和指令

向 arara 添加自定义扩展和指令

这是一个更通用的版本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+

相关内容