我有一条适用于旧版本 arara 的规则:
!config
# Open the every <filename>.<format> that can be opened
# The default for <filename> is the current file.
# The default for <format> is pdf.
# Sample usage:
# - if myfile.tex is the current file, all these open myfile.pdf
# % arara: showfile
# % arara: showfile {format: pdf}
# % arara: showfile {filename: myfile, format: pdf}
# and both these open myfile.log:
# % arara: showfile {format: log}
# % arara: showfile {filename: myfile, format: log}
#
identifier: showfile
name: showfile
commands:
- <arara> @{ isWindows( "cmd /c start", "xdg-open" ) } "@{ getBasename(file) }.@{format}"
arguments:
- identifier: format
flag: <arara> @{parameters.format}
default: pdf
根据新版 arara 破坏了我的自定义规则我把它改成了:
!config
identifier: showfile
name: showfile
commands:
- command: <arara> @{ isWindows( "cmd /c start", "xdg-open" ) } "@{ getBasename(file) }.@{format}"
arguments:
- identifier: format
flag: <arara> @{parameters.format}
default: pdf
但如果我跑
arara main.tex
简单来说main.tex
:
% arara: pdflatex
% arara: showfile
\documentclass{article}
\begin{document}
Test
\end{document}
我只得到:
并且main.pdf
未显示。
任务仍然附加,如果我关闭命令提示符窗口,我会得到:
Processing 'main.tex' (size: 98 bytes, last modified: 12/15/2018
19:40:31), please wait.
(PDFLaTeX) PDFLaTeX engine .............................. SUCCESS
(showfile) Unnamed task ................................. SUCCESS
Total: 339.97 seconds
<<< Process finished (PID=9956). (Exit code 0)
================ READY ================
答案1
你能尝试这个新规则吗?
!config
identifier: showfile
name: Display
commands:
- name: Show file
command: >
@{
prefix = isWindows( [ 'cmd', '/c', 'start' ], [ 'xdg-open' ] );
view = getBasename(file) + '.' + format;
return getCommand(prefix, view);
}
arguments:
- identifier: format
flag: >
@{
return parameters.format;
}
default: pdf
让我将这些元素分成几个部分:
!config
identifier: showfile
name: Display
这里没有什么新内容,它只是标题:showfile
是在源代码中用作指令的标识符,并且Display
是在终端中作为主要任务打印的名称。:)
继续。
commands:
- name: Show file
现在,我们有了与此规则相关的子任务列表。在我们的例子中,列表中只有一个元素。每个元素由一个名称和一个适当的命令组成。Show file
是此规则的名称子任务Display
并且它将在终端中紧接着(任务名称)显示。
command: >
这>
符号表示折叠标量的样式。我强烈建议您查看arara
手册以了解它的完整描述。简而言之,它是一种在字段中有多行的方式(实际上还有更多内容,但让我们让初学者能够轻松掌握这些概念)。
@{
我只是打开了 orb 标签(有关此概念的更多详细信息,请参阅手册)。规则逻辑将在此标签内描述。
prefix = isWindows( [ 'cmd', '/c', 'start' ], [ 'xdg-open' ] );
prefix
是一个保存以下评估结果的变量:如果在 Windows 下执行,则返回包含、和 的arara
字符串列表。否则,返回仅包含 的列表。cmd
/c
start
xdg-open
view = getBasename(file) + '.' + format;
以类似的方式,view
是一个变量,它保存引用的基本名称file
加上文字.
和格式,从同名规则参数获得。
return getCommand(prefix, view);
prefix
我们现在返回由变量(在命令构造期间正确展平,请参阅手册了解更多详细信息)和变量组成的命令view
。类型在版本 4.0 中引入,Command
是一种让底层系统知道该做什么的强大方法。它比原始字符串(在此版本中已弃用并将在以后的版本中删除)更可靠。
}
现在 orb 标签已正确关闭。请注意组成当前标量的折叠表示的空格。否则,YAML 解析将失败。
arguments:
现在,我们像往常一样有了规则参数列表。在我们的例子中,我们只有一个元素,定义如下。
- identifier: format
参数名称,在源代码中的指令中使用。
flag: >
@{
return parameters.format;
}
再次,我决定使用折叠样式来表示标量。在这种情况下,原始问题中的表示形式是可以的,这只是我的个人偏好。:)
default: pdf
如果指令中没有明确指定这个特定参数,那么我们在这里得到默认值。
就是这样。:)