自动排版文档的两个版本 - Arara 5.0 需要更新

自动排版文档的两个版本 - Arara 5.0 需要更新

使用 arara 4.0 版,我可以通过按照 arara 规则输入具有不同定义的不同文件来很好地排版文档的两个版本。

不幸的是,这在 arara 5.0 中已停止工作。我知道在 yaml 规则中,我需要用 替换filereference我也尝试过使用getCommandreturn 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

相关内容