我用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
并使用-p
switch:调用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
可以利用该参数传递要在当前文件以外的文件上执行的指令。