Wie gebe ich zwei Standardoptionen für eine Arara-Kennung an?

Wie gebe ich zwei Standardoptionen für eine Arara-Kennung an?

(Entschuldigen Sie, falls ich die Terminologie falsch verwende.)

Ich möchte eine Direktive für arara schreiben, die ein Argument annehmen kann. Die Direktive soll den Namen der Ausgabedatei nach den folgenden Regeln festlegen:

  1. Wenn kein Argument angegeben ist, verwenden Sie einen Standardwert.
  2. Wenn das Argument angegeben ist, aber keinen Wert hat, verwenden Sie die fileVariable.
  3. Wenn ein Argument angegeben ist, verwenden Sie dieses.

Ich dachte, der richtige Weg hierfür wäre:

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

aber ich bekomme: ERROR: Parsing rule '<rulename>' failed. It might be a malformed directive or orb tag syntax.wenn ich kein tatsächliches Argument übergebe.

Hier ist ein 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 }'

Dann versuche ich in meinem Testdokument eines der folgenden:

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

Die ersten beiden funktionieren, die zweiten beiden nicht.

Ist das möglich?

Antwort1

Mit der neuen 3.xReihe können wir der Argumenterweiterung einfach einen Standardwert hinzufügen.

Hier ist die neue echoRegel:

!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}

Neue Konzepte:

  • valuewurde durch eine Map mit dem Namen ersetzt . Wenn wir beispielsweise auf das Direktiveargument parameterszugreifen möchten , rufen wir einfach auf , anstatt den Wert im Kontext des Regelarguments anzunehmen.oneparameters.onevalue
  • <arara>wird am Anfang der Werte verwendet, um ein paar Anführungszeichen zu sparen. Der Erweiterungsmechanismus kann dieses Schlüsselwort erkennen und sicher entfernen. Sie können weiterhin Anführungszeichen verwenden, es gibt kein Problem.
  • Jetzt kann ein Regelargument einen defaultWert haben, der bei der Verarbeitung des Arguments als erstes ausgewertet wird. Wenn kein Wert defaultangegeben ist, setzt der Mechanismus den Wert auf ''(leere Zeichenfolge).
  • Wir verfügen nun über mehrere integrierte Funktionen im Regelkontext, die uns beim Schreiben prägnanteren Codes helfen können:
    • string isTrue(boolean b, string s1, string s2): Gibt zurück, s1wenn bist true, oder s2andernfalls.
    • boolean isEmpty(string s): prüft, ob sleer ist und gibt einen booleanWert zurück: truewenn sleer, falseandernfalls.

Es ist wichtig zu beachten, dass @{file}jetzt der Dateiname anstelle des Basisnamens angezeigt wird. Wenn wir dennoch den Basisnamen abrufen möchten, gibt es dafür auch eine integrierte Funktion: string getBasename(string s), @{ getBasename( file ) }die dies tut.

Sehen wir uns nun die Ausführung an:

Erste Regel: Wenn kein Argument angegeben ist, verwenden Sie einen Standardwert.

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

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

Running Echo the value of the argument...

teste.tex
Status: SUCCESS

Zweite Regel: Wenn das Argument angegeben ist, aber keinen Wert hat, verwenden Sie die fileVariable.

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

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

Running Echo the value of the argument...

teste.tex
Status: SUCCESS

Dritte Regel: Wenn ein Argument angegeben ist, verwenden Sie es.

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

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

Running Echo the value of the argument...

duck
Status: SUCCESS

Der Kommentar in der ursprünglichen Antwort gilt % arara: echo: { name: }weiterhin. Da namekein Argumentwert vorhanden ist, schlägt der Extraktor fehl.


Ursprüngliche Antwort aus historischen Gründen hinterlassen. Sie gilt fürarara 2.x

Wie konnte ich das verpassen?Etikett?:)

Leider ist Ihnen ein Ärgernis aufgefallen, das während meiner Testsuites zur Veröffentlichung der 2.xSerie unbemerkt blieb: Die einzige Variable, die im argumentsKontext erweitert werden kann, ist die valueselbst. Daher filefunktioniert sie – und alle anderen Variablen – leider nicht und araraführt zu einem Fehler. Hoffentlich wird dieses Problem in der nächsten Version behoben.

Außerdem plane ich für die nächste Version einen Standard-Fallback für Argumente, sodass wir keine Bedingungen schreiben müssen, um zu prüfen, ob der Wert festgelegt ist. Aber das ist eine andere Geschichte, hoffentlich für die neue 3.xSerie.:)

Die einzige Möglichkeit, die Regel zum Funktionieren zu bringen, besteht derzeit echodarin, die Variablen im commandKontext zu überprüfen:

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

In der neuen Version können wir Folgendes schreiben:

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

Die Richtlinien

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

sollte funktionieren (der letztehatzu arbeiten, es sei denn, Sie haben ein anderes Ärgernis gefunden). :)Nun,

% arara: echo: {name: }

hat keinen Argumentwert, deshalb schlägt der Extraktor fehl.

verwandte Informationen