我正在使用 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}}{}}
我对这个比较满意。欢迎评论。