使用 arara 设置环境变量

使用 arara 设置环境变量

我想TEXINPUTSarara规则/指令。例如,我的texinputs.yaml规则是

!config
identifier: texinputs
name: texinputs
command: export TEXINPUTS="@{mypaths}$TEXINPUTS:"
arguments:
- identifier: mypaths
  flag: "@{parameters.mypaths}"

我的test.tex文件是

\documentclass{article}
\begin{document}
Hello world
\end{document}
% arara: texinputs: { mypaths: ".//:" }
% arara: pdflatex

当我arara -v test从所在目录运行时test.tex,我得到

正在运行 texinputs...

抱歉,无法找到来自“texinputs”任务的命令。您确定命令“export TEXINPUTS=".//:$TEXINPUTS:"”正确吗,或者可以从系统路径访问吗?

我做错什么了?我在 Linux 上使用TeX Live 2012

答案1

我在聊天中学到了很多东西。即使texinputs.yaml可以设置TEXINPUTS环境变量,这也不会影响对pdflatex指令的后续调用,因为每个指令都在一个独立的环境中运行。astexinputs.yaml构造的问题在于,在 Linux 中,export它是内置在 Bash shell 中的特殊命令,因此会“混淆”arara认为它不是命令。

最简单、最干净的解决方法是重新定义pdflatex.yaml规则以接受参数texinputs,然后运行pdflatexenv允许设置环境变量。具体来说,修改后的规则如下所示

    !config
    # PDFLaTeX rule for arara
    # author: Marco Daniel
    # last edited by: Paulo Cereda
    # requires arara 3.0+
    identifier: pdflatex
    name: PDFLaTeX
    command: <arara> @{texinputs} pdflatex @{action} @{draft} @{shell} @{synctex} @{options} "@{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: texinputs
      flag: "env TEXINPUTS=@{parameters.texinputs}"

这种方法至少有两个问题:它会忽略先前设置的值,TEXINPUTS并且无法处理带有空格的路径。也许可以解决这两个问题。一个更通用的解决方案是修改pdflatex.yaml

!config
# PDFLaTeX rule for arara
# author: Marco Daniel
# last edited by: Paulo Cereda
# requires arara 3.0+
identifier: pdflatex
name: PDFLaTeX
commands:
- <arara> @{texinputs} '@{action} @{draft} @{shell} @{synctex} @{options} "@{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: texinputs
  flag: texinputs.sh "@{parameters.texinputs}"
  default: pdflatex

并将texinputs.sh文件定义为

#!/usr/bin/bash
TEMP=$(echo $1 | sed s#\"##g)
export TEXINPUTS=$TEMP:$TEXINPUTS
pdflatex $2

TEXINPUTS这将处理路径中预先存在的空格和空格的附加。我希望有一种更简洁的方法,既能处理预先存在的TEXINPUTS空格,又不需要extra脚本文件。

相关内容