我开始使用 nicearara
包来自动化我的论文编译过程。
我知道最好将规则% arara : pdflatex
放在要编译的文件的开头.tex
,但我想知道是否可以将此调用放在名为的文件中\input{...}
。
原因如下:
我想arara
在多个文件上使用,但这些文件没有任何规则。然而,它们共享一些包含宏和样式定义的文件,该文件在定义后立即header.tex
被调用。\input{}
\documentclass[]{}
所以我宁愿修改公共header.tex
文件而不是所有其他文件。
答案1
抱歉,arara
将指令查找范围限制在当前文档。检测特殊宏并相应地处理它们(例如通过 跟踪文件或类似流)将非常具有挑战性\input
。\include
这确实是设计使然。
话虽如此,我一直在考虑在不久的将来添加一项新功能,名为元指令。这样,我们就可以在运行时更改工具本身的内部工作原理。抱歉,如果现在听起来太模糊,但您的问题似乎是元指令可用于外部文件读取的情况之一。我仍然不知道它会是怎样的。:)
然而,阿莱夫泽罗评论中提到,正确解析 TeX 需要 TeX 引擎本身来解决非平凡场景。我想arara
成为 TeX 世界的 emacs,但不是 TeX 世界的 TeX 引擎(然而)。:)
让我看看接下来几周的情况如何,这样我就可以着手编写新的功能草稿了。
关于您的情况,也许--preamble
命令行标志可能会引起您的兴趣。引用我花了一生时间编写的可爱的用户手册::)
一些 TeX 文档需要相同的自动化步骤,例如一组文章。为此,为了避免在这种特定情况下一遍又一遍地重复相同的前言,
arara
可以在配置文件中由唯一键标识的特殊部分中设置预定义的前言以供以后使用。此命令行选项将键引用的预定义前言添加name
到当前文档的前面,然后像往常一样继续提取指令。例如:twopdftex: | % arara: pdftex % arara: pdftex
源文件:
doc9.tex
:Hello world. \bye
在此示例中,我们有一个名为的序言
twopdftex
和一个没有指令的 TeX 文件doc9.tex
。当然,我们的工具会抱怨缺少指令,除非我们故意将预定义序言中的两个指令注入当前执行:$ arara -p twopdftex doc9.tex .... Processing 'doc9.tex' (size: 18 bytes, last modified: 05/29/2018 14:39:21), please wait. (PDFTeX) PDFTeX engine .................................. SUCCESS (PDFTeX) PDFTeX engine .................................. SUCCESS Total: 0.96 seconds
希望能帮助到你。:)
答案2
虽然arara
无法确定要读取哪些文件,但您可以编写一个指令来调用arara
不同的文件。我想我的工作流程与您的有些相似,我希望所有指令都放在一个名为的文件中,header.tex
然后我处理body.tex
。我将所有指令列在中header.tex
,body.tex
我有一个指令
% arara: mainfile: { rootfile: header.tex }
该指令定义如下mainfile.yaml
:
identifier: mainfile
name: MAINFILE
commands:
- name: Run Arara on file
command: >
@{
return getCommand('arara', '-v', rootfile);
}
arguments:
- identifier: rootfile
flag: >
@{
return parameters.rootfile;
}
如果您想要自动处理分布在可能包含或不包含的任意文件中的指令,您可能能够将某些内容组合在一起以\listfiles
输出所有已加载的文件,然后使用一个调用mainfile
所有子文件的新指令,但这听起来很困难并且可能不值得。