我的旧规则不再适用于最新版本的 arara

我的旧规则不再适用于最新版本的 arara

我有一条适用于先前版本的规则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

希望能帮助到你!

相关内容