arara: lädt ein lokales Batch-Skript oder wandelt das Batch-Skript in eine eigene Regel um

arara: lädt ein lokales Batch-Skript oder wandelt das Batch-Skript in eine eigene Regel um

Meine Frage ähnelt derHier, allerdings liegt der Schwerpunkt etwas anders. Ich arbeite unter Windows mit MikTeX 2.9.

Ich habe mehrere latexProjekte, die Teil einer Tool-Dokumentation sind. Jedes Projekt kann mehrereglossariesDateien, abhängig von der Anzahl der in jedem Dokument verwendeten Unterglossare.

document.acn
document.glo
document.syg1
document.syg2
...

Anstatt makeindexjede glossariesDatei einzeln aufzurufen mit

makeindex -s %maintexname%.ist -t %maintexname%.alg -o %maintexname%.acr %maintexname%.acn
makeindex -s %maintexname%.ist -t %maintexname%.glg -o %maintexname%.gls %maintexname%.glo
makeindex -s %maintexname%.ist -t %maintexname%.slg1 -o %maintexname%.syi1 %maintexname%.syg1
makeindex -s %maintexname%.ist -t %maintexname%.slg2 -o %maintexname%.syi2 %maintexname%.syg2
...

Ich habe ein Batch-Skript geschrieben , das für alle Akronyme, Glossare und Symbole im Hauptordner des Projekts create_glossaries.cmdgilt . So muss ich nicht unbedingt wissen, welche Dateien explizit erstellt werden, und kann dasselbe Batch-Skript für alle meine Dokumente verwenden.makeindexacnglosygilatexglossaries

Jetzt möchte ich auf Build-Automatisierung umsteigen mitarara. Ich habe es grundsätzlich hinbekommen, pdflatex und biber zum Kompilieren meines Dokuments zu verwenden. Aber ich habe Probleme damit, die Erstellung der Glossare einzubinden. Ich könnte natürlich die einzelnen makeindexBefehle für jede glossariesDatei eingeben mit

% arara: makeindex: { style: %maintexname%.ist }

Allerdings fehlt hier die Allgemeingültigkeit des Ansatzes und ich müsste glossariesbei jedem Projekt jede Datei einzeln angeben. Wenn möglich, würde ich das gerne umgehen.

Mein erster Lösungsansatz wäre also, das Batch-Skript von innen aufzurufen arara. Ich habe jedoch nicht wirklich verstanden, wie man ein Batch-Skript aufruft, hier create_glossaries.cmdaus einer araraRegel heraus. Wie ist das möglich?

Um plattformunabhängig zu sein und auf allen unterstützten Betriebssystemen denselben Ansatz zu verwenden, lautet ararameine zweite Frage: Wie kann ich eine Regel erweitern, die dasselbe tut wie mein Skript, also jede Basisdatei findet glossariesund sie mithilfe von in die richtige Ausgabe übersetzt makeindex?

Und eine damit zusammenhängende Frage: Wie kann ich eine mögliche neue araraRegel in meinem Hauptdokumentordner texstatt im araraRegelpfad bereitstellen? Hintergrund ist, dass die Dokumente Teil eines SVN-Repositorys sind, sodass ich den absoluten Pfad nicht kenne, in den ein Mitarbeiter die latexDatei auscheckt.


Batch-Skript fürmakeindex

Dies ist die Dateicreate_glossaries.cmd

::-----------------------------------------------------------------------------
::
:: Purpose:         Create all glossaries for a tex document
::
:: Conventions:
::
::   - Acronyms:    - Input file extension:     acn*
::                  - Output file extension:    acr*
::                  - Log file extension:       alg*
::
::   - Glossary:    - Input file extension:     glo*
::                  - Output file extension:    gls*
::                  - Log file extension:       glg*
::
::   - Symbols :    - Input file extension:     syg*
::                  - Output file extension:    syi*
::                  - Log file extension:       slg*
::
:: Remarks:         - This script has to be physically present in the tex directory.
::                    A symbolic link does not work.
::
:: Author:          Martin Raedel, DLR-FA-STM, WiMi, 10.02.2016
::-----------------------------------------------------------------------------
::
:: @echo off verhindert Ausgabe Befehlszeilen bis Stapelverarbeitung beendet
@echo off
::
::-----------------------------------------------------------------------------
:: set variables - no spaces between variable name and = allowed
::-----------------------------------------------------------------------------
:: 
:: manual mode:
::set maintexname=Mixed-Dimensional-Coupling
::
:: automatic mode:
set glo_num=2
::
set glo_input_list[0]=acn
set glo_input_list[1]=glo
set glo_input_list[2]=syg
::
set glo_output_list[0]=acr
set glo_output_list[1]=gls
set glo_output_list[2]=syi
::
set glo_log_list[0]=alg
set glo_log_list[1]=glg
set glo_log_list[2]=slg
::
::-----------------------------------------------------------------------------
:: create glossaries
::-----------------------------------------------------------------------------
::
:: Acronyms:
::
::makeindex -s %maintexname%.ist -t %maintexname%.alg -o %maintexname%.acr %maintexname%.acn
::
:: Glossar:
::
::makeindex -s %maintexname%.ist -t %maintexname%.glg -o %maintexname%.gls %maintexname%.glo
::
:: Symbols:
::   manual:
::makeindex -s %maintexname%.ist -t %maintexname%.slg1 -o %maintexname%.syi1 %maintexname%.syg1
::   with automatic symbol input file search
setlocal EnableDelayedExpansion
::
FOR /L %%i IN (0, 1, %glo_num%) DO (
  set inputextension=!glo_input_list[%%i]!
  set outputextension=!glo_output_list[%%i]!
  set logextension=!glo_log_list[%%i]!
  ::echo "inputextension: !inputextension!"
  FOR %%f IN (*.!inputextension!*) DO (
    ::echo %%f
    set fullfilename=%%f
    set filename=%%~nf
    set fileextensionwithdot=%%~xf
    set fileextension=!fileextensionwithdot:~1!
    ::echo "fullfilename: !fullfilename! | fileextension: !fileextension! | !fileextension:~3,1!"
    IF DEFINED fileextension IF "!fileextension:~3,1!"=="" (
      ::echo 3 or less characters
      makeindex -s !filename!.ist -t !filename!.!logextension! -o !filename!.!outputextension! !filename!!fileextensionwithdot! >nul 2>&1
    ) ELSE (
      ::echo more than 3 characters
      set index=!fileextension:~3,1!
      ::echo !index!
      makeindex -s !filename!.ist -t !filename!.!logextension!!index! -o !filename!.!outputextension!!index! !filename!!fileextensionwithdot!>nul 2>&1
    )
  )
)
::
endlocal

Lösung zu Idee 1?!

Der erste Ansatz, das Batch-Skript aus einer eigenen araraRegel heraus aufzurufen, ist mir gelungen. Ich habe es araraconfig.yamldem Hauptverzeichnis meines Projekts hinzugefügt.

!config
paths:
- '.'

um meine eigene Regeldatei zu findencreate_glossaries.yaml

!config
identifier: create_glossaries
name: create_glossaries
commands: 
- name: Create glossaries
  command: <arara> cmd /c create_glossaries.cmd
arguments: 
- identifier: name
  flag: <arara> @{parameters.name}
  default: "create_glossaries"

Wobei das Argument nicht verwendet wird, die Datei aber ohne es nicht funktioniert.

verwandte Informationen