我一直在尝试编写一条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 中开发一个工作流程knitr
,arara
所以我想要一个在调用knitr
时有效的规则。arara myfile.Rnw
我不完全确定为什么指定扩展名在这里会有所不同,而且我也不确定为什么当未指定扩展名时,在文件中找不到任何指令,因为事实上,其中包含指令myfile.Rnw
。
因此,我想我的问题最终是如何编写一条在被调用时起作用arara
的规则(knitr
arara myfile.Rnw
IE,当使用文件扩展名调用命令时)。
(尽管对于根据文件扩展名是否指定而产生的不同行为的任何见解以及对于arara
在前一种情况下无法找到指令的任何见解也将不胜感激。)
笔记:我认为一旦问题解决,% arara: pdflatex
就会中断,因为的规则定义为,我认为返回文件扩展名以及文件名,所以我认为我需要编写一条新规则来调用使用。但是,一步一步来……knitr
arara
pdflatex
<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
写入目录的文件,这应该是使用 处理文件的结果.Rnw
。knitr
具体来说,如果从命令行调用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
。