强制 tikz 外部化使用 arara 重新创建所有图像

强制 tikz 外部化使用 arara 重新创建所有图像

我正在使用 tikz 的外部化库,以便大多数图片仅编译一次并包含在以后的 LaTeX 运行中。

有时候,我想重做所有图像,例如在更改字体后。为了实现这一点,我曾经手动删除外部文件,或者\tikzset{external/force remake}在第一张图片之前的某个地方添加一行,并为以后的运行添加注释。

因为我刚刚发现arara我很想拥有一些自动化功能;)

我如何arara实现

  • 删除整个文件夹的内容,不知道其中有多少个文件或它们的名称,或者
  • 在文件中添加一行代码.tex用于一次运行,在本例中为:\tikzset{external/force remake}

抱歉,但我对如何开始制定规则或指令一无所知。但这个片段可以作为一个起点

% arara: cleanfolder: { folder: tikzternalize }
% !arara: insertforceremake
% arara: pdflatex: { shell: yes }
\usepgfplotslibrary{external}
\tikzsetexternalprefix{tikzternalize/}

答案1

从现有规则中复制粘贴一些内容并进行研究后,我想出了一个可行的解决方案,尽管我对此并不完全满意......

我没有删除现有文件夹中的所有文件,而是直接删除目录并在同一位置重新创建。当然,是空的。

!config
# Rule for deleting the contents of a folder with arara
identifier: cleanfolder
name: CleaningTool for a whole folder
commands:
 - <arara> @{ isWindows( "cmd /c rmdir /s/q", "rm -f" ).concat(' "').concat(folder).concat('"') }
 - <arara> @{ isWindows( "cmd /c md", "mkdir").concat(' "').concat(folder).concat('"') }
arguments:
 - identifier: folder
   flag: <arara> @{parameters.folder}

我很高兴听到关于此问题的任何评论,因为我认为这个问题可以比我提出的方法更“优雅”地解决。

更新:

我甚至设法自己回答了问题的第二部分。灵感来自克里斯的回答使用 arara 编译 powerdot 两次我修改了pdflatex随附的规则,arara以定义某种命令,如果开关定义正确,该命令switch将触发文件中所需的操作。.tex

规则:pdflatexwithswitch

!config
identifier: pdflatexwithswitch
name: run PDFLaTeX with specified switch and optional value
command: <arara> pdflatex @{action} @{draft} @{shell} @{synctex} @{options} "\def\@{switchname}{@{switchvalue}}\input{@{file}}"
arguments:
- identifier: action
  flag: <arara> --interaction=@{parameters.action}
- identifier: shell
  flag: <arara> @{isTrue(parameters.shell,"--shell-escape","--no-shell-escape")}
- identifier: synctex
  flag: <arara> @{isTrue(parameters.synctex,"--synctex=1","--synctex=0")}
- identifier: draft
  flag: <arara> @{isTrue(parameters.draft,"--draftmode")}
- identifier: options
  flag: <arara> @{parameters.options}
- identifier: switchname
  flag: <arara> @{parameters.switchname}
- identifier: switchvalue
  flag: <arara> @{parameters.switchvalue}
  default: 0

规则实际作用:

演示文本

% arara: pdflatexwithswitch: { shell: yes, switchname: forceremake, switchvalue: doit }
\usepgfplotslibrary{external}
\ifthenelse{\isundefined{\forceremake}}{}{\ifthenelse{\equal{\forceremake}{doit}}{\tikzset{external/force remake}}{}}

我对这个比较满意。欢迎评论。

相关内容