我有一条适用于先前版本的规则arara
:
!config
# Open the every <filename>.<format> that can be opened
# The default for <filename> is the current file.
# The default for <format> is pdf.
#
# Sample usage:
# - if myfile.tex is the current file, all these open myfile.pdf
# % arara: showfile
# % arara: showfile: {format: pdf}
# % arara: showfile: {filename: myfile, format: pdf}
# and both these open myfile.log:
# % arara: showfile: {format: log}
# % arara: showfile: {filename: myfile, format: log}
#
identifier: showfile
name: Display
commands:
- name: Show file
command: >
@{
prefix = isWindows( [ 'cmd', '/c', 'start' ], [ 'xdg-open' ] );
view = getBasename(reference) + '.' + format;
return getCommand(prefix, view);
}
arguments:
- identifier: format
flag: >
@{
return parameters.format;
}
default: pdf
现在,如果我尝试使用 prova.tex:
% arara: pdflatex
% arara: showfile
% arara: showfile: {format: log}
\documentclass{article}
\begin{document}
My rule does not work anymore
\end{document}
我收到错误:
Impossible to find the file "prova.[pdf]"
答案1
版本 6.0 对参数值(默认或提供)传递给逻辑的方式进行了(重大)更改command
。进行此更改的理由是,我们计划在未来采用更安全、更简单的规则格式,并且如果能有一个适当、明确的类型方案,那将非常受欢迎。
您可以参考我们的变更日志了解版本 6 系列的完整功能和修复列表,以及在我们可爱的博客文章。:)
长话短说,参数值现在被处理为字符串值列表,因此format
,如
% arara: showfile: { format: pdf }
将被翻译为
多变的 | 类型(版本 5) | 类型(版本 6) | 值(版本 5) | 值(版本 6) |
---|---|---|---|---|
format |
细绳 | 字符串列表 | "pdf" |
[ "pdf" ] |
我们需要更新逻辑中处理这个值的方式command
(注意:我选择了该.concat
方法,但使用+
原始规则中的工作原理完全相同):
view = getBasename(reference).concat('.').concat(format[0]);
解释:我们获取列表中的第一个值format
(索引计数从零开始)并将其连接为view
变量的后缀,该变量包含一个字符串值,因此
多变的 | 价值 | 类型 |
---|---|---|
format |
[ "pdf" ] |
字符串列表 |
view |
"mydoc.pdf" |
细绳 |
最后,我们将这一行从
view = getBasename(reference) + '.' + format;
到
view = getBasename(reference).concat('.').concat(format[0]);
这应该可以解决问题。
完整更新的showfile.yaml
规则:
!config
identifier: showfile
name: Display
commands:
- name: Show file
command: >
@{
prefix = isWindows( [ 'cmd', '/c', 'start' ], [ 'xdg-open' ] );
view = getBasename(reference).concat('.').concat(format[0]);
return getCommand(prefix, view);
}
arguments:
- identifier: format
flag: >
@{
return parameters.format;
}
default: pdf
希望能帮助到你!