尝试转换我的旧自定义 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: showfile
commands: 
- <arara> @{ isWindows( "cmd /c start", "xdg-open" ) } "@{ getBasename(file) }.@{format}"
arguments:
- identifier: format
  flag: <arara> @{parameters.format}
  default: pdf

根据新版 arara 破坏了我的自定义规则我把它改成了:

!config
identifier: showfile
name: showfile
commands: 
- command: <arara> @{ isWindows( "cmd /c start", "xdg-open" ) } "@{ getBasename(file) }.@{format}"
arguments:
- identifier: format
  flag: <arara> @{parameters.format}
  default: pdf

但如果我跑

arara main.tex

简单来说main.tex

% arara: pdflatex
% arara: showfile
\documentclass{article}

\begin{document}
Test 
\end{document}

我只得到:

enter image description here

并且main.pdf未显示。

任务仍然附加,如果我关闭命令提示符窗口,我会得到:

Processing 'main.tex' (size: 98 bytes, last modified: 12/15/2018
19:40:31), please wait.

(PDFLaTeX) PDFLaTeX engine .............................. SUCCESS
(showfile) Unnamed task ................................. SUCCESS

Total: 339.97 seconds
<<< Process finished (PID=9956). (Exit code 0)
================ READY ================

答案1

你能尝试这个新规则吗?

!config
identifier: showfile
name: Display
commands: 
- name: Show file
  command: >
    @{
      prefix = isWindows( [ 'cmd', '/c', 'start' ], [ 'xdg-open' ] );
      view = getBasename(file) + '.' + format;
      return getCommand(prefix, view);
    }
arguments:
- identifier: format
  flag: >
    @{
        return parameters.format;
    }
  default: pdf

让我将这些元素分成几个部分:

!config
identifier: showfile
name: Display

这里没有什么新内容,它只是标题:showfile是在源代码中用作指令的标识符,并且Display是在终端中作为主要任务打印的名称。:)

继续。

commands: 
- name: Show file

现在,我们有了与此规则相关的子任务列表。在我们的例子中,列表中只有一个元素。每个元素由一个名称和一个适当的命令组成。Show file是此规则的名称子任务Display并且它将在终端中紧接着(任务名称)显示。

  command: >

>符号表示折叠标量的样式。我强烈建议您查看arara手册以了解它的完整描述。简而言之,它是一种在字段中有多行的方式(实际上还有更多内容,但让我们让初学者能够轻松掌握这些概念)。

    @{

我只是打开了 orb 标签(有关此概念的更多详细信息,请参阅手册)。规则逻辑将在此标签内描述。

      prefix = isWindows( [ 'cmd', '/c', 'start' ], [ 'xdg-open' ] );

prefix是一个保存以下评估结果的变量:如果在 Windows 下执行,则返回包含、和 的arara字符串列表。否则,返回仅包含 的列表。cmd/cstartxdg-open

      view = getBasename(file) + '.' + format;

以类似的方式,view是一个变量,它保存引用的基本名称file加上文字.和格式,从同名规则参数获得。

      return getCommand(prefix, view);

prefix我们现在返回由变量(在命令构造期间正确展平,请参阅手册了解更多详细信息)和变量组成的命令view。类型在版本 4.0 中引入,Command是一种让底层系统知道该做什么的强大方法。它比原始字符串(在此版本中已弃用并将在以后的版本中删除)更可靠。

    }

现在 orb 标签已正确关闭。请注意组成当前标量的折叠表示的空格。否则,YAML 解析将失败。

arguments:

现在,我们像往常一样有了规则参数列表。在我们的例子中,我们只有一个元素,定义如下。

- identifier: format

参数名称,在源代码中的指令中使用。

  flag: >
    @{
        return parameters.format;
    }

再次,我决定使用折叠样式来表示标量。在这种情况下,原始问题中的表示形式是可以的,这只是我的个人偏好。:)

  default: pdf

如果指令中没有明确指定这个特定参数,那么我们在这里得到默认值。

就是这样。:)

相关内容