arara:为需要多个标志和参数的脚本制定规则

arara:为需要多个标志和参数的脚本制定规则

我正在研究arara规则indent.plx可以通过几种不同的方式调用:

  • indent.plx myfile.tex(输出至终端)
  • indent.plx -w myfile.tex(覆盖原始文件并输出至终端)
  • indent.plx -o myfile.tex outputfile.tex(输出到单独的文件并输出到终端)
  • indent.plx -s myfile.tex(静音模式,无输出到终端)

我想用一条简洁的arara规则来概括这些选择(希望还有其他选择)。到目前为止,我已经

!config
# indent rule for arara
# author: cmhughes
# requires arara 3.0+
#
# Sample use:
# % arara: indent
# % arara: indent: {overwrite: true}
# % arara: indent: {overwrite: on}
# % arara: indent: {overwrite: yes}
# % arara: indent: {overwrite: false}
#
identifier: indent
name: Indent
command: indent.plx @{overwrite} "@{file}"
arguments:
- identifier: overwrite
  flag: <arara> @{ isTrue( parameters.overwrite, "-w","" ) }

我如何扩展我的规则来包含其他选项以输出到单独的文件并用于静默模式?

我希望能够使用以下各项

% arara: indent: {overwrite: false, outputFile: outputfile.tex}
% arara: indent: {outputFile: outputfile.tex, silent: true}

答案1

我会做出谦虚的尝试。:)

首先,让我们定义可能使用的指令参数:

  • silent:它包含一个布尔值(在上下文中arara,它可以是on/off、、和),如果存在yes/no且为真,则扩展为。这是一个独立参数。true/false0/1-s

  • overwrite:它还包含一个布尔值,如果存在且为真,则扩展为-w。此参数对下一个参数(output)有影响,当存在且为真时,该参数将使其使用无效,也就是说,覆盖文件比生成另一个文件的输出具有更高的优先级。

  • output:它保存任何值,这些值将成为脚本生成的输出。仅当overwrite不存在或解析为 false 时,此值才可用(如果不为空)。

目前,indent.plx需要-o <original file> <new file>。我在聊天室里跟 Chris 提到,最好让 的<new file>值接近其对应的标志-o。提出了两条规则,每条规则针对一种情况。

例如要求indent.plx -o outputfile.tex myfile.tex

!config
# indent rule for arara
# author: cmhughes
# requires arara 3.0+
identifier: indent
name: Indent
command: indent.plx @{silent} @{ isEmpty( overwrite, isNotEmpty( output, "-o ".concat('"').concat(output).concat('"') ), overwrite ) } "@{file}"
arguments:
- identifier: overwrite
  flag: <arara> @{ isTrue( parameters.overwrite, "-w" ) }
- identifier: silent
  flag: <arara> @{ isTrue( parameters.silent, "-s" ) }
- identifier: output
  flag: <arara> @{ parameters.output }

例如要求indent.plx -o myfile.tex outputfile.tex

!config
# indent rule for arara
# author: cmhughes
# requires arara 3.0+
identifier: indent
name: Indent
command: indent.plx @{silent} @{ isEmpty( overwrite, isNotEmpty( output, "-o"  ), overwrite ) } "@{file}" @{ isEmpty( overwrite, isNotEmpty( output, '"'.concat(output).concat('"') ) ) }
arguments:
- identifier: overwrite
  flag: <arara> @{ isTrue( parameters.overwrite, "-w" ) }
- identifier: silent
  flag: <arara> @{ isTrue( parameters.silent, "-s" ) }
- identifier: output
  flag: <arara> @{ parameters.output }

然后我们可以使用以下指令:

% arara: indent: { overwrite: false, output: outputfile.tex }
% arara: indent: { output: outputfile.tex, silent: true }
% arara: indent: { overwrite: true, silent: yes }

好了!:)

相关内容