如何在 arara 中创建元指令?

如何在 arara 中创建元指令?

我用arara它来自动编译一些 tikz 图像作为独立文件。我有一堆这样的图形,它们都有相同的指令集

% arara: clean: { extensions: [ aux, bbl, bcf, blg, out, run.xml ] }
% arara: pdflatex: { options: [ '-halt-on-error' ], interaction: batchmode }
% arara: biber: { options: [ '--validate_datamodel' ] }
% arara: pdflatex: { options: [ '-halt-on-error' ], interaction: batchmode }
% arara: --> until !found('log', 'Rerun to get cross-references right.')
% arara: --> && !found('log', 'There were undefined references.')
% arara: clean: { extensions: [ aux, bbl, bcf, blg, out, run.xml ] }

我最终将这些复制到每个图像文件中,但如果出错,则需要大量复制和粘贴并更新。这几乎是序言的完美用例

preambles:
   mytikzimage: |
      % arara: clean: { extensions: [ aux, bbl, bcf, blg, out, run.xml ] }
      % arara: pdflatex: { options: [ '-halt-on-error' ], interaction: batchmode }
      % arara: biber: { options: [ '--validate_datamodel' ] }
      % arara: pdflatex: { options: [ '-halt-on-error' ], interaction: batchmode }
      % arara: --> until !found('log', 'Rerun to get cross-references right.')
      % arara: --> && !found('log', 'There were undefined references.')
      % arara: clean: { extensions: [ aux, bbl, bcf, blg, out, run.xml ] }

arara并使用-pswitch:调用arara -p mytikzimage,但我想使用编辑器中的快捷键,该快捷键设置为仅调用arara。我希望能够做的是

% arara: meta: mytikzimage

在 tex 文件本身中,它会以某种方式了解序言或调用所有其他指令的某些指令。

答案1

我做了几次测试,并设法接近可行的解决方案,但最终,内部工作流程不允许将后期指令纳入要执行的任务列表中。以下是我所做的事情:

!config
identifier: source
name: Source
commands:
- name: Source file
  command: >
    @{
        import com.github.cereda.arara.utils.DirectiveUtils;
        content = readFromFile(input);
        directives = DirectiveUtils.extractDirectives(content);
        directives = DirectiveUtils.validate(directives);

        /*
           I have a list of all directives from the provided file
           stored in the 'directives' variable, but that is as far
           as one can go...
        */

        return true;
    }
arguments:
- identifier: input
  flag: >
    @{
        return parameters.input;
    }
  required: true

我必须说这条规则真的很顽皮,因为它使用arara自己的内部类从提供的文件中抽取指令。在此示例中,我使用的是外部文件,但它可能是原始字符串的显式列表或复杂的源(如 TeX 宏的模式匹配,如另一个问题中建议的那样)。

但是,我无法将此列表注入到上一步构建的指令列表中。反射在这里帮不上忙,而且我无法挽救我所做的一切。

一个可能的改进是扩展的arara返回类型并添加指令支持。这样,return directives;此规则中的一条简单语句就足以将arara新提取的指令列表包含在当前执行工作流中。

我个人认为最好的解决方案是纳入元指令这将允许早期评估和决策。然后我可以提供一个完整的框架,以简单的方式指定这些新元素。它看起来并不太复杂,但我必须考虑一些常见的场景。

目前,我能想到的唯一解决方案是创建一个自定义规则,并arara在其中调用arara并提供相应的自定义前言。另一方面,files可以利用该参数传递要在当前文件以外的文件上执行的指令。

相关内容