使用 tikzexternal 'list and make' 和 arara

使用 tikzexternal 'list and make' 和 arara

外部化库tikz有一个名为 的模式list and make,它不会分叉新的 TeX 进程,而是会列出需要编译的图像并生成需要单独运行的 makefile。然后需要后续的 TeX 运行才能将图像添加到文档中。

我一直在使用 arara 来编译我的文档,这种方法看起来像是解决我的记忆问题这让我那台老旧的笔记本电脑崩溃了。

我如何将其external/mode=list and make与 arara 整合?

Arara 附带一条make规则,但没有关于如何实际使用它的文档。arara 4.0 中包含的规则如下所示:

!config
# Arara, the cool TeX automation tool
# Copyright (c) 2012, Paulo Roberto Massa Cereda 
# All rights reserved.
#
# This rule is part of arara.
identifier: make
name: Make
authors:
- Marco Daniel
- Paulo Cereda
commands:
- name: The Make program
  command: >
    @{
        if (target != '') {
            if (isList(target)) {
                tasks = [];
                for (entry : target) {
                    tasks.add(getCommand('make', entry));
                }
                return tasks;
            }
            else {
                return getCommand('make', target);
            }
        }
        else {
            return getCommand('make');
        }
    }
arguments:
- identifier: target
  flag: "@{parameters.target}"

我的文档中的 make 指令应该调用make -f \jobname.makefile;添加% arara: make: { target: '-f \jobname.makefile' }到可预先设置的内容会产生错误,就像make指令中的任何内容一样。

目前我有:

% arara: lualatex: { shell: true, interaction: nonstopmode }
% arara: make: { target: '-f \jobname.makefile' }
% arara: lualatex: { synctex: true, shell: true }

我需要做什么才能让它工作?

答案1

好的,通过检查其他提供的规则尝试弄清楚 arara 的工作原理后,我得出了这个解决方案:

!config
# Arara, the cool TeX automation tool
# Copyright (c) 2012, Paulo Roberto Massa Cereda 
# All rights reserved.
#
# This rule is part of arara.
identifier: tikzmake
name: TikZmake
authors:
- Robbie Smith
- Paulo Cereda
commands:
- name: TikZ list-and-make engine
  command: >
    @{
        makefile = getBasename(file).concat('.makefile');
        return getCommand('make', force, options, '-f', makefile);
    }
arguments:
- identifier: force
  flag: >
    @{
        isTrue(parameters.force, '--always-make')
    }
- identifier: options
  flag: >
    @{
        if (isList(parameters.options)) {
            return parameters.options;
        }
        else {
            throwError('I was expecting a list of options.')
        }
    }

它有点粗糙,我想扩展选项(即添加对许多作业的支持),但它确实有效。要使用此规则,您需要\tikzset{external/mode=list and make}在序言中添加某处(可选地指定系统调用),并告诉 arara 在至少运行一次 TeX 之后以及至少运行一次 TeX 之前运行此规则,以便渲染和插入图片。我有以下内容,但您的用例可能不同。

% arara: lualatex: { shell: true, interaction: nonstopmode }
% arara: tikzmake: { options: ['-j2'] }
% arara: lualatex: { synctex: true, shell: true }

相关内容