arara 식별자에 대한 두 가지 기본 옵션을 어떻게 지정합니까?

arara 식별자에 대한 두 가지 기본 옵션을 어떻게 지정합니까?

(용어가 정확하지 않은 경우 사과드립니다.)

나는 인수를 받을 수 있는 arara에 대한 지시문을 작성하고 싶습니다. 지시문은 다음 규칙에 따라 출력 파일의 이름을 설정해야 합니다.

  1. 인수가 제공되지 않으면 기본값을 사용합니다.
  2. 인수가 제공되었지만 값이 없으면 file변수를 사용하십시오.
  3. 인수가 주어지면 그것을 사용하십시오.

나는 이것을 수행하는 올바른 방법이 다음과 같다고 생각했습니다.

command: 'echo @{ name == "" ? "default" : name }'
arguments:
- identifier: name
  flag: '@{value == "" ? file : value }'

ERROR: Parsing rule '<rulename>' failed. It might be a malformed directive or orb tag syntax.그러나 나는 실제 인수를 전달하지 않으면 다음과 같은 결과를 얻습니다 .

MWE는 다음과 같습니다.

!config
# test rule for arara
# author: Andrew Stacey
identifier: echo
name: Echo the value of the argument
command: 'echo @{ name == "" ? "default" : name }'
arguments:
- identifier: name
  flag: '@{value == "" ? file : value }'

그런 다음 테스트 문서에서 다음 중 하나를 시도합니다.

% arara: echo
% arara: echo: {name: 'something'}
% arara: echo: {name: }
% arara: echo: {name: ''}

처음 두 개는 작동하고 두 번째 두 개는 작동하지 않습니다.

이것이 가능한가?

답변1

새로운 3.x계열을 사용하면 인수 확장에 기본값을 쉽게 추가할 수 있습니다.

새로운 echo규칙은 다음과 같습니다.

!config
# test rule for arara
# author: Andrew Stacey
# requires arara 3.0+
identifier: echo
name: Echo the value of the argument
command: <arara> echo @{name}
arguments:
- identifier: name
  flag: <arara> @{ isTrue( isEmpty( parameters.name ), file, parameters.name ) }
  default: <arara> @{file}

새로운 개념:

  • value이라는 지도로 대체되었습니다 parameters. 예를 들어 지시문 인수에 액세스하려면 규칙 인수 컨텍스트에서 값을 가정하는 대신 one간단히 호출하면 됩니다 .parameters.onevalue
  • <arara>따옴표 몇 개를 저장하기 위해 값의 시작 부분에 사용됩니다. 확장 메커니즘은 이 키워드를 감지하여 안전하게 제거할 수 있습니다. 여전히 따옴표를 사용할 수 있으며 문제가 없습니다.
  • 이제 규칙 인수는 default인수가 처리될 때 가장 먼저 평가되는 값을 가질 수 있습니다. no가 default제공되면 메커니즘은 값을 ''(빈 문자열)로 설정합니다.
  • 이제 규칙 컨텍스트에 보다 간결한 코드를 작성하는 데 도움이 될 수 있는 몇 가지 내장 함수가 있습니다.
    • string isTrue(boolean b, string s1, string s2): s1이면 b반환 true하고 s2그렇지 않으면 반환합니다.
    • boolean isEmpty(string s): s비어 있는지 확인하고 boolean값을 반환합니다. 비어 있으면 true그렇지 않으면 값을 반환합니다.sfalse

@{file}이제 기본 이름 대신 파일 이름으로 확장된다는 점을 관찰하는 것이 중요합니다 . 여전히 기본 이름을 얻고 싶다면 이를 위한 내장 함수도 있습니다: string getBasename(string s), @{ getBasename( file ) }그렇게 합니다.

이제 실행을 살펴보겠습니다.

첫 번째 규칙: 인수가 제공되지 않으면 기본값을 사용합니다.

% arara: echo
\documentclass{article}
...

  __ _ _ __ __ _ _ __ __ _
 / _` | '__/ _` | '__/ _` |
| (_| | | | (_| | | | (_| |
 \__,_|_|  \__,_|_|  \__,_|

Running Echo the value of the argument...

teste.tex
Status: SUCCESS

두 번째 규칙: 인수가 제공되었지만 값이 없으면 file변수를 사용하십시오.

% arara: echo: { name: '' }
\documentclass{article}
...

  __ _ _ __ __ _ _ __ __ _
 / _` | '__/ _` | '__/ _` |
| (_| | | | (_| | | | (_| |
 \__,_|_|  \__,_|_|  \__,_|

Running Echo the value of the argument...

teste.tex
Status: SUCCESS

세 번째 규칙: 인수가 주어지면 인수를 사용하세요.

% arara: echo: { name: duck }
\documentclass{article}
...

  __ _ _ __ __ _ _ __ __ _
 / _` | '__/ _` | '__/ _` |
| (_| | | | (_| | | | (_| |
 \__,_|_|  \__,_|_|  \__,_|

Running Echo the value of the argument...

duck
Status: SUCCESS

원래 답변의 의견은 % arara: echo: { name: }여전히 ​​​​유효합니다. 인수 값이 없으므로 name추출기가 실패합니다.


역사적인 목적으로 원래 답변이 남았습니다. 다음에 적용됩니다.arara 2.x

내가 어떻게 그리워했나요?꼬리표?:)

안타깝게도 시리즈 출시를 위한 테스트 과정에서 눈에 띄지 않았던 성가심에 직면했습니다 2.x. 컨텍스트에서 확장에 사용할 수 있는 유일한 변수는 자체 arguments입니다 value. 따라서 불행하게도 file다른 변수도 작동하지 않고 arara오류가 발생합니다. 다음 버전에서는 이 문제가 해결되기를 바랍니다.

또한 다음 릴리스에서는 인수에 대한 기본 대체 계획이 있으므로 값이 설정되었는지 확인하기 위해 조건문을 작성할 필요가 없습니다. 그러나 그것은 새로운 3.x시리즈에 대한 또 다른 이야기입니다.:)

현재로서는 규칙이 작동하도록 하는 유일한 방법은 echo컨텍스트에서 변수를 확인하는 것입니다 command.

command: 'echo @{ name == "" ? file : name }'
arguments:
- identifier: name
  flag: '@{value}'

새 릴리스에서는 다음과 같이 작성할 수 있습니다.

command: 'echo @{name}'
arguments:
- identifier: name
  flag: '@{value}'
  default: '@{file}'

지시문

% arara: echo
% arara: echo: {name: 'something'}
% arara: echo: {name: something}
% arara: echo: {name: ''}

작동해야합니다 (마지막 것가지다다른 성가심을 발견하지 않는 한 일하십시오). :)지금,

% arara: echo: {name: }

인수 값이 없으므로 추출기가 실패합니다.

관련 정보