我想TEXINPUTS
用arara
规则/指令。例如,我的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
,然后运行pdflatex
以env
允许设置环境变量。具体来说,修改后的规则如下所示
!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
脚本文件。