![arara: lädt ein lokales Batch-Skript oder wandelt das Batch-Skript in eine eigene Regel um](https://rvso.com/image/392339/arara%3A%20l%C3%A4dt%20ein%20lokales%20Batch-Skript%20oder%20wandelt%20das%20Batch-Skript%20in%20eine%20eigene%20Regel%20um.png)
Meine Frage ähnelt derHier, allerdings liegt der Schwerpunkt etwas anders. Ich arbeite unter Windows mit MikTeX 2.9.
Ich habe mehrere latex
Projekte, die Teil einer Tool-Dokumentation sind. Jedes Projekt kann mehrereglossaries
Dateien, abhängig von der Anzahl der in jedem Dokument verwendeten Unterglossare.
document.acn
document.glo
document.syg1
document.syg2
...
Anstatt makeindex
jede glossaries
Datei 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.cmd
gilt . So muss ich nicht unbedingt wissen, welche Dateien explizit erstellt werden, und kann dasselbe Batch-Skript für alle meine Dokumente verwenden.makeindex
acn
glo
sygi
latex
glossaries
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 makeindex
Befehle für jede glossaries
Datei eingeben mit
% arara: makeindex: { style: %maintexname%.ist }
Allerdings fehlt hier die Allgemeingültigkeit des Ansatzes und ich müsste glossaries
bei 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.cmd
aus einer arara
Regel heraus. Wie ist das möglich?
Um plattformunabhängig zu sein und auf allen unterstützten Betriebssystemen denselben Ansatz zu verwenden, lautet arara
meine zweite Frage: Wie kann ich eine Regel erweitern, die dasselbe tut wie mein Skript, also jede Basisdatei findet glossaries
und sie mithilfe von in die richtige Ausgabe übersetzt makeindex
?
Und eine damit zusammenhängende Frage: Wie kann ich eine mögliche neue arara
Regel in meinem Hauptdokumentordner tex
statt im arara
Regelpfad bereitstellen? Hintergrund ist, dass die Dokumente Teil eines SVN-Repositorys sind, sodass ich den absoluten Pfad nicht kenne, in den ein Mitarbeiter die latex
Datei 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 arara
Regel heraus aufzurufen, ist mir gelungen. Ich habe es araraconfig.yaml
dem 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.