arara: загрузить локальный пакетный скрипт или преобразовать пакетный скрипт в собственное правило

arara: загрузить локальный пакетный скрипт или преобразовать пакетный скрипт в собственное правило

Мой вопрос похож на тот,здесь, однако у него немного другой фокус. Я работаю под Windows, используя MikTeX 2.9.

У меня есть несколько latexпроектов, которые являются частью документации инструмента. Каждый проект может создавать несколькоglossariesфайлы в зависимости от количества подглоссариев, используемых в каждом документе.

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

Вместо того, чтобы вызывать makeindexкаждый glossariesфайл по отдельности с помощью

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
...

Я написал пакетный скрипт create_glossaries.cmd, который применяется makeindexко всем файлам acn, gloи sygiв основной папке проекта latexдля акронимов, глоссариев и символов соответственно. Таким образом, мне не нужно знать, какие glossariesфайлы создаются явно, и я могу использовать один и тот же пакетный скрипт для всех моих документов.

Теперь я хочу перейти на автоматизацию сборки с помощьюarara. В принципе, я заставил его работать, используя pdflatex и biber для компиляции моего документа. Но я борюсь, чтобы включить создание глоссариев. Я мог бы, конечно, ввести отдельные makeindexкоманды для каждого glossariesфайла с

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

Однако, это не даёт общности подхода, и мне пришлось бы указывать каждый glossariesфайл для каждого проекта. Если возможно, я хотел бы обойти это.

Поэтому моим первым подходом к решению было бы вызвать пакетный скрипт изнутри arara. Однако я не совсем понял, как вызвать пакетный скрипт, здесь вызванный create_glossaries.cmdиз araraправила. Как это возможно?

Чтобы быть независимым от платформы и использовать один и тот же подход на всех поддерживаемых операционных системах, araraмой второй вопрос: как я могу расширить правило, которое делает то же самое, что и мой скрипт, чтобы найти каждый базовый glossariesфайл и преобразовать его в правильный вывод с помощью makeindex?

И вопрос по теме: Как я могу разместить возможное новое araraправило в своей основной texпапке документов, а не в araraпути к правилам? Дело в том, что документы являются частью репозитория SVN, поэтому я не знаю абсолютный путь, по которому соавтор извлекает файл latex.


Пакетный скрипт дляmakeindex

Это файлcreate_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

Решение идеи 1?!

Мне удалось заставить работать первый подход, вызывая пакетный скрипт из собственного araraправила. Я добавил его araraconfig.yamlв основной каталог моего проекта.

!config
paths:
- '.'

чтобы найти свой собственный файл правилcreate_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"

Где аргумент не используется, но файл без него не работает.

Связанный контент