考虑以下 LaTeX 文档,该文档以 Arara 脚本开头,该脚本由分布在 5 行中的单个指令组成。
% arara: halt if
% arara: --> exists(toFile('arara.file.temp'))
% arara: --> && (writeToFile('arara.var.doesTempExist', 't', false) || true)
% arara: --> ||
% arara: --> writeToFile('arara.var.doesTempExist', 'f', false)
\documentclass{article}
\begin{document}
Hello, world!
\end{document}
该脚本的目的是检查名为的文件是否arara.file.temp
存在。如果存在,则应将字符串t
写入文件arara.var.doesTempExist
。如果不存在,则应将字符串f
写入同一文件。
该指令halt
在 Arara 用户指南 (v. 4.0) 的第 113 页中进行了描述,该方法exists
在第 61 页中进行了描述,该方法toFile
在第 59 页中进行了描述,该方法writeToFile
在第 66 页中进行了描述(请注意,它返回布尔值并且永远不会引发异常)。
当我通过从命令行执行来运行该脚本arara test2
(该文档位于名为的文件中test2.tex
)时,报告了以下错误消息。
For whatever reason, I could not compile the expression in the
provided conditional. This part is quite tricky, since it
involves aspects of the underlying expression language. I will do
my best to help you in any way I can. There are more details
available on this exception:
DETAILS ---------------------------------------------------------
[Error: null pointer or function not found: writeToFile]
[Near :
{... false) || true) || writeToFile('arara.var.doesTem ....}]
^
[Line: 1, Column: 105]
为什么我会收到此错误?我该如何修复它?
答案1
请注意,用户指南中的签名旁边writeToFile
有一个R
指示符。将其与签名CR
旁边的指示符进行比较。表示该方法可以在指令中使用,而表示该方法可以在规则中使用(请参阅第 6 章的介绍,第 58 页)。由于没有,因此该方法不能在指令中使用。exists
C
R
C
writeToFile