TEXINPUTS 和 arara 和/或 TeXworks

TEXINPUTS 和 arara 和/或 TeXworks

我想知道如何使用 TEXINPUTS 与 arara 或 TeXworks 结合使用。为了理解我的观点,我刚刚在帖子中收到了答案 `如何在一个命令中运行 LaTeX 和 lilypond-book?',其中解决方案是使用名为 arara 的工具完成的(顺便说一句,这似乎是一个很棒的工具)。现在我试图将此解决方案合并到 TeXworks 中。问题是,由于 lilypond-book 会产生大量垃圾,我需要确保将其输出放入本地临时子文件夹中。但是,为了处理位于子文件夹中的 .tex 文件(由 lilypond-book 生成)以及主文件夹中的其他相关文件(例如 BiBTeX 文件),我需要将子文件夹添加到 TEXINPUTS。显然,我不知道如何使用 arara 本身或 TeXworks 来执行此操作。

任何帮助是极大的赞赏

答案1

关于TEXINPUTSarara,我建议使用 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+

请注意,我有一个名为ararainside 的文件夹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 个命令。让我们看看这些命令到底起什么作用:

  1. 首先,让我们调用lilypond-book脚本。如果output指定了参数,则此步骤中生成的所有内容都将包含在其中!我确信这行代码有问题,但是,相信我,情况会变得更糟。我们将在提供的文件上:)运行并生成输出,如果提供的话。lilypond-book.lytexoutput

  2. pdflatex现在让我们在生成的文件上运行 TeX 引擎(默认为)。对于lilypond内容,如果您在受限模式下运行内容,请确保启用--shell-escape,否则您将会遇到麻烦。现在,感谢 David Carlisle,我们通过添加输出路径而不是依赖于这个TEXINPUTS东西来进行一些疯狂的黑客攻击,因为arara它有限制。在这两种情况下,请考虑路径地狱。:)

  3. 现在我真的很生气,让我们删除.aux实际上位于此处的文件,因为它是在同一级别生成的。

  4. 让我们对该文件重复同样的血洗.log;只有这两个文件实际上是由该.tex文件生成的;请记住,所有lilypond内容都依赖于输出目录。

  5. 当然,我们心爱的.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以删除它们。:)

就这样吧,希望有帮助!:)

相关内容