使用 arara 4.0 版,我可以通过按照 arara 规则输入具有不同定义的不同文件来很好地排版文档的两个版本。
不幸的是,这在 arara 5.0 中已停止工作。我知道在 yaml 规则中,我需要用 替换file
。reference
我也尝试过使用getCommand
和return getCommand
,但没有成功(并不是说我有编程经验)。
下面,我尝试给出 .tex 文件和 yaml 规则的 MWE。如能得到任何帮助,我将不胜感激!
Latex 文档:
% arara: pdfversions: {rules: _lv}
% arara: pdfversions: {rules: _sv}
\ifdefined\Version
\else
\def\Version{_lv}
\fi
%
\documentclass[a4paper, 11pt]{article}
\usepackage[english, ngerman]{babel}
\usepackage{xcolor}
\input{\Version} %calls file _lv oder _ls, depending on arara rule
%file _lv contains (among others): \newenvironment*{LV}{\LARGE\color{red}}{\hspace{0.25cm}\normalsize}
%file _sv contains (among others): \newenvironment*{LV}{\LARGE\color{white}}{\hspace{0.25cm}\normalsize}
%
\begin{document}
\begin{LV}
test
\end{LV}
\end{document}
arara 规则的思想是,它在开始时定义 _lv 或 _sv,从而加载文件 _ls 或 _sv,然后根据相应文件上的定义排版文件,创建以 _LV 或 _SV 结尾的 PDF,最后打开该 PDF。
包含规则的 YAML 文件:
!config
# PDFLaTeX rule for arara to return 2 PDF Files, a teacher and a student version
# author: based on code from Chris Hughes
# requires arara 4.0+
# % arara: pdfversions
# % arara: pdfversions: {rules: _lv}
# % arara: pdfversions: {rules: _sv}
identifier: pdfversions
name: PDFVersions
commands:
- command: <arara> pdflatex "\def\Version{@{rules}}\input{@{file}}"
- command: <arara> @{ isWindows( "cmd /c move", "mv" ) } @{getBasename(file)}.pdf @{getBasename(file)}@{rules.toUpperCase()}.pdf
- command: <arara> open @{getBasename(file)}@{rules.toUpperCase()}.pdf
arguments:
- identifier: rules
flag: <arara> @{parameters.rules}
default: _lv
答案1
正如您所提到的:从 arara v5 开始,您无法file
再访问。reference
是否有帮助,因为它是一个正确类型的文件对象。一个问题关于 arara v5 中的这一重大变化。
请注意,<arara>
简写语法已弃用(将在 v6 中删除)。已删除对返回字符串命令的支持,以支持更简洁的getCommand
方法。
所有上述变化也详细说明在变更日志。
以下内容未经测试:
!config
# PDFLaTeX rule for arara to return 2 PDF Files,
# a teacher and a student version
# author: based on code from Chris Hughes
# requires arara 4.0+
# % arara: pdfversions
# % arara: pdfversions: {rules: _lv}
# % arara: pdfversions: {rules: _sv}
identifier: pdfversions
name: PDFVersions
commands:
- command: >
@{
return getCommand('pdflatex', '\\def\\Version{' + rules + '}\\input{'
+ reference.getName() + '}');
}
- command: >
@{
output = getBasename(reference.getName()) + rules.toUpperCase() + '.pdf';
return getCommand(isWindows([ 'cmd', '/c', 'move' ], 'mv'),
reference.getName(), output);
}
- command: >
@{
return getCommand('open', getBasename(reference.getName()) +
rules.toUpperCase() + '.pdf');
}
arguments:
- identifier: rules
flag: >
@{
return parameters.rules;
}
default: _lv