如何为 knitr 编写 arara 规则

如何为 knitr 编写 arara 规则

我一直在尝试编写一条knitr通过调用的规则arara,但显然我似乎不知道自己在做什么。

arara手动的解释如何定义自定义规则。为此,必须在配置文件中包含要搜索自定义规则的路径。因此,我的araraconfig.yaml文件包括:

!config
paths:
- /path/to/custom/arara/rules

现在,由于knitr读取.Rnw文件,但默认情况下arara设置为仅处理.tex.dtx.ltx文件,因此也需要添加对.Rnw文件的支持。因此,我的araraconfig.yaml文件还包括:

filetypes:
- extension: tex
- extension: dtx
- extension: ltx
- extension: Rnw
  pattern: ^(\\s)*%\\s+ 

最后,我写了knitr.yaml(在/path/to/custom/arara/rules),内容如下:

!config
identifier: knitr
name: knitr
command: <arara> Rscript -e "library(knitr); knit('"@{getBasename(file)}".Rnw')"

因为knitr可以通过命令行调用Rscript -e "library(knitr); knit('myfile.Rnw')"

现在,假设我有以下 MWE myfile.Rnw

% arara: knitr
% arara: pdflatex
% arara: pdflatex

\documentclass{article}

\begin{document}

A graph about cars (Figure~\ref{fig:cars}).

<<cars, echo=FALSE, message=FALSE, fig.cap="Car graph", fig.lp="fig:">>=
library(ggplot2)
CarPlot <- ggplot() +
  stat_summary(data = mtcars,
               aes(x = factor(gear),
                   y = mpg
                   ),
               fun.y = "mean",
               geom = "bar"
               )
CarPlot
@

\end{document}

如果我arara myfile从命令行调用,我会得到:

我在“myfile.Rnw”中没有找到任何指令,因此没有执行任何操作。这是您真正想要的吗?

或者,如果我调用arara myfile.Rnw,我会得到:

很抱歉,文件“myfile.Rnw [.tex, .dtx, .ltx, .Rnw]”不存在。请注意,当您仅提供基本名称(即不带扩展名的文件名)或未知扩展名时,arara 将尝试按该顺序查找以预定义扩展名 [.tex, .dtx, .ltx, .Rnw] 结尾的文件。您可以通过配置文件覆盖顺序、搜索模式,甚至添加对新扩展名的支持。请参阅 arara 手册以了解有关此功能的更多信息。

后一条消息也是我在 TeXShop 中调用时收到的消息arara。由于我最终想在 TeXShop 中开发一个工作流程knitrarara所以我想要一个在调用knitr时有效的规则。arara myfile.Rnw

我不完全确定为什么指定扩展名在这里会有所不同,而且我也不确定为什么当未指定扩展名时,在文件中找不到任何指令,因为事实上,其中包含指令myfile.Rnw

因此,我想我的问题最终是如何编写一条在被调用时起作用arara的规则(knitrarara myfile.RnwIE,当使用文件扩展名调用命令时)。

(尽管对于根据文件扩展名是否指定而产生的不同行为的任何见解以及对于arara在前一种情况下无法找到指令的任何见解也将不胜感激。)


笔记:我认为一旦问题解决,% arara: pdflatex就会中断,因为的规则定义为,我认为返回文件扩展名以及文件名,所以我认为我需要编写一条新规则来调用使用。但是,一步一步来……knitrararapdflatex<arara> pdflatex @{action} @{draft} @{shell} @{synctex} @{options} "@{file}"@{file}pdflatex"@{getBasename(file)}"


更新:

Paulo 开始在聊天室帮我解决一些问题。(Paulo 的帮助开始于这里.) 在他的帮助下,取得了一些进展。

首先,似乎arara手册中有错误。文件^(\\s)*%\\s+中的araraconfig.yaml应该是^(\s)*%\s+

其次,规则似乎应该有一组参数,即使该集合为空。因此文件knitr.yaml应该是:

!config
identifier: knitr
name: knitr
command: <arara> Rscript -e "library(knitr); knit('"@{getBasename(file)}".Rnw')"
arguments: [] # note this addition

经过这些更改,呼叫arara myfile将起作用(有点)。

(请注意,调用arara myfile.Rnw会导致上述相同的错误。)

arara跑过去说:

Running knitr... SUCCESS

然而, .tex写入目录的文件,这应该是使用 处理文件的结果.Rnwknitr具体来说,如果从命令行调用Rscript -e "library(knitr); knit('myfile.Rnw')",结果就是一个.tex文件。但这次“成功”运行的结果arara什么都没有……

我不知道接下来该做什么。这是运行的日志文件arara --log myfile

07 May 2014 19:48:19.360 INFO  Arara - Welcome to arara!
07 May 2014 19:48:19.372 INFO  Arara - Processing file 'myfile.Rnw', please wait.
07 May 2014 19:48:19.373 INFO  DirectiveExtractor - Reading directives from myfile.Rnw.
07 May 2014 19:48:19.374 TRACE DirectiveExtractor - Directive found in line 1 with knitr.
07 May 2014 19:48:19.378 INFO  DirectiveParser - Parsing directives.
07 May 2014 19:48:19.381 INFO  TaskDeployer - Deploying tasks into commands.
07 May 2014 19:48:19.381 TRACE TaskDeployer - Task 'knitr' found in '/Users/adamliter/Dropbox/Local-texmf/arara/rules'.
07 May 2014 19:48:19.427 INFO  CommandTrigger - Ready to run commands.
07 May 2014 19:48:19.427 INFO  CommandTrigger - Running 'knitr'.
07 May 2014 19:48:19.427 TRACE CommandTrigger - Command: Rscript -e "library(knitr); knit('"myfile".Rnw')"
07 May 2014 19:48:19.628 TRACE CommandTrigger - Output logging:
07 May 2014 19:48:19.628 TRACE CommandTrigger - [1] "library(knitr); knit('myfile.Rnw')"

07 May 2014 19:48:19.629 INFO  CommandTrigger - 'knitr' was successfully executed.
07 May 2014 19:48:19.629 INFO  CommandTrigger - All commands were successfully executed.
07 May 2014 19:48:19.629 INFO  Arara - Done.

似乎或许仍有希望

而且,如果可能的话,我仍然希望有一个在arara myfile.Rnw被调用时能起作用的设置,而不仅仅是arara myfile

答案1

arara在目前的6.1.0 版本中,可以简单地

% arara: knitr: { quiet: 是 }

请参阅手册第 12 页arara

但也确实看到
向 arara 添加自定义扩展和指令问题

以及两个答案:一般一和一个 尤其是给 knitr

相关内容