我想知道如何使用 TEXINPUTS 与 arara 或 TeXworks 结合使用。为了理解我的观点,我刚刚在帖子中收到了答案 `如何在一个命令中运行 LaTeX 和 lilypond-book?',其中解决方案是使用名为 arara 的工具完成的(顺便说一句,这似乎是一个很棒的工具)。现在我试图将此解决方案合并到 TeXworks 中。问题是,由于 lilypond-book 会产生大量垃圾,我需要确保将其输出放入本地临时子文件夹中。但是,为了处理位于子文件夹中的 .tex 文件(由 lilypond-book 生成)以及主文件夹中的其他相关文件(例如 BiBTeX 文件),我需要将子文件夹添加到 TEXINPUTS。显然,我不知道如何使用 arara 本身或 TeXworks 来执行此操作。
任何帮助是极大的赞赏
答案1
关于TEXINPUTS
和arara
,我建议使用 arara 设置环境变量作为起点。正如指出的那样,arara
在自包含环境中在子 shell 上运行命令,因此在执行之间保持持久性可能比较棘手。
正如 Marco 在评论中所说,您可以利用操作系统的文件操作命令来移动、复制或删除某些文件,但需要注意的是,出于安全原因,arara
其执行库不喜欢通配符。这意味着将它们用作复制、移动或删除文件模式的 bash 扩展将不起作用。:(
解决方案是事先提供要处理的每个文件。
如果您可以稍微扩展一下需要arara
执行的步骤,我们可能会想出一些规则或不同的编译链,以实现所需的结果。事实上,我只能猜测,项目越复杂,我们需要的细节就越多。:)
更新:感谢 Sam Whited,我成功地为arara
和实现了一个有趣的设置lilypond
。遗憾的是,它不是 100% 独立于操作系统的,主要是因为我几乎把所有的精力都花在了让 TeX 和朋友解析路径上!:)
总有一天我可能会重新审视这个答案。总有一天。
好了,首先要做的事情是。这是我当前的结构:
paulo@alexandria Projetos$ tree testes/
testes/
|-- arara
| `-- lilypond.yaml
|-- build
|-- pdfs
`-- source
|-- Greensleeves.lytex
|-- SaddestMusic.lytex
|-- SaddestMusicReprise.lytex
|-- StrangeWateryNoises.lytex
|-- SymphonyForTwelveInstruments.lytex
|-- TangoToAcheron.lytex
`-- TimeShifts.lytex
4 directories, 8 files
抱歉,这些是巴西葡萄牙语的名字,我懒得把它们改成正确的英语名字。:)
这里使用的所有.lytex
文件均由 Sam Whited 提供,非常感谢您与我分享,因为我是lilypond
文盲。:)
我会故意窃取 Marco 的惊人答案如何在一个命令中运行 LaTeX 和 lilypond-book?并对其进行一些修改,以实现完整的编译链。首先,我们需要告诉arara
如何处理.lytex
文件 - 这是通过araraconfig.yaml
在您的主文件夹中创建一个名为的文件来完成的:
!config
paths:
- /home/paulo/Projetos/testes/arara
filetypes:
- extension: lytex
pattern: ^(\s)*%\s+
请注意,我有一个名为arara
inside 的文件夹testes
;我将在这里保存我的lilypond.yaml
规则,如下所示。不要因为我的规则太复杂而恨我!
!config
identifier: lilypond
name: Lilypond
commands:
- <arara> lilypond-book @{isNotEmpty(output, "--include=".concat(output.replace('--output=','')))} @{format} @{options} @{output} "@{file}"
- <arara> @{engine} --shell-escape @{isNotEmpty(output, '"\\makeatletter\\def\\input@path{{'.concat(output.replace('--output=','')).concat(SystemUtils.FILE_SEPARATOR).concat('}}\\makeatother\\input{')concat(getBasename(file)).concat('}"'))}
- <arara> rm "@{getBasename(file)}.aux"
- <arara> rm "@{getBasename(file)}.log"
- <arara> mv "@{getBasename(file)}.pdf" "../pdfs/"
arguments:
- identifier: format
flag: <arara> --format=@{parameters.format}
default: <arara> --format=latex
- identifier: options
flag: <arara> @{parameters.options}
- identifier: output
flag: <arara> --output=@{parameters.output}
- identifier: engine
flag: <arara> @{parameters.engine}
default: <arara> pdflatex
天啊!
规则中实际上有 5 个命令。让我们看看这些命令到底起什么作用:
首先,让我们调用
lilypond-book
脚本。如果output
指定了参数,则此步骤中生成的所有内容都将包含在其中!我确信这行代码有问题,但是,相信我,情况会变得更糟。我们将在提供的文件上:)
运行并生成输出,如果提供的话。lilypond-book
.lytex
output
pdflatex
现在让我们在生成的文件上运行 TeX 引擎(默认为)。对于lilypond
内容,如果您在受限模式下运行内容,请确保启用--shell-escape
,否则您将会遇到麻烦。现在,感谢 David Carlisle,我们通过添加输出路径而不是依赖于这个TEXINPUTS
东西来进行一些疯狂的黑客攻击,因为arara
它有限制。在这两种情况下,请考虑路径地狱。:)
现在我真的很生气,让我们删除
.aux
实际上位于此处的文件,因为它是在同一级别生成的。让我们对该文件重复同样的血洗
.log
;只有这两个文件实际上是由该.tex
文件生成的;请记住,所有lilypond
内容都依赖于输出目录。当然,我们心爱的
.pdf
文件也在这里,所以我们将它移到上一级,并放入pdfs/
文件夹中。是不是很棒?:)
呼!我现在真的需要喝点啤酒。:)
我们现在需要.lytex
文件和arara
指令!让我们用示例文件测试一下Greensleeves.tex
-想听嗎?。:)
我不会在这里粘贴所有内容,只粘贴重要的部分:
paulo@alexandria testes$ head source/Greensleeves.lytex
% arara: lilypond: { output: "/home/paulo/Projetos/testes/build" }
% !TEX encoding = UTF-8
\documentclass[a4paper,12pt]{article}
\usepackage{multicol}
\usepackage{textcomp}
\usepackage[margin=2cm]{geometry}
\begin{document}
\thispagestyle{empty}
...
那么,现在让我们来arara
创作一些音乐吧!
paulo@alexandria source$ pwd
/home/paulo/Projetos/testes/source
paulo@alexandria source$ arara Greensleeves.lytex
__ _ _ __ __ _ _ __ __ _
/ _` | '__/ _` | '__/ _` |
| (_| | | | (_| | | | (_| |
\__,_|_| \__,_|_| \__,_|
Running Lilypond... SUCCESS
Running Lilypond... SUCCESS
Running Lilypond... SUCCESS
Running Lilypond... SUCCESS
Running Lilypond... SUCCESS
显然,这个方法奏效了。:)
让我们看看发生了什么:
paulo@alexandria Projetos$ tree testes/
testes/
|-- arara
| `-- lilypond.yaml
|-- build
| |-- ef
| | |-- lily-6ffeba6b-1.eps
| | |-- lily-6ffeba6b-1-eps-converted-to.pdf
| | |-- lily-6ffeba6b-2.eps
| | |-- lily-6ffeba6b-2-eps-converted-to.pdf
| | |-- lily-6ffeba6b-3.eps
| | |-- lily-6ffeba6b-3-eps-converted-to.pdf
| | |-- lily-6ffeba6b-4.eps
| | |-- lily-6ffeba6b-4-eps-converted-to.pdf
| | |-- lily-6ffeba6b-5.eps
| | |-- lily-6ffeba6b-5-eps-converted-to.pdf
| | |-- lily-6ffeba6b.eps
| | |-- lily-6ffeba6b.ly
| | |-- lily-6ffeba6b.midi
| | |-- lily-6ffeba6b-systems.count
| | |-- lily-6ffeba6b-systems.tex
| | |-- lily-6ffeba6b-systems.texi
| | `-- lily-6ffeba6b.txt
| |-- Greensleeves.dep
| |-- Greensleeves.tex
| |-- snippet-map--1172401943.ly
| `-- snippet-names--1172401943.ly
|-- pdfs
| `-- Greensleeves.pdf
`-- source
|-- Greensleeves.lytex
|-- SaddestMusic.lytex
|-- SaddestMusicReprise.lytex
|-- StrangeWateryNoises.lytex
|-- SymphonyForTwelveInstruments.lytex
|-- TangoToAcheron.lytex
`-- TimeShifts.lytex
5 directories, 30 files
太棒了,Greensleeves.pdf
到位了!瞧,build/
文件夹中有 生成的所有临时文件lilypond-book
,这些文件都已缓存以供将来使用。您可以自行删除这些文件,我们随时可以向规则添加新命令lilypond
以删除它们。:)
就这样吧,希望有帮助!:)