arara: carga un script por lotes local o transforma el script por lotes en una regla propia

arara: carga un script por lotes local o transforma el script por lotes en una regla propia

Mi pregunta es similar a laaquí, sin embargo, tiene un enfoque un poco diferente. Estoy trabajando en Windows usando MikTeX 2.9.

Tengo varios latexproyectos que forman parte de la documentación de una herramienta. Cada proyecto puede crear múltiplesglossariesarchivos dependiendo del número de subglosarios utilizados en cada documento.

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

En lugar de llamar makeindexindividualmente a cada glossariesarchivo con

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

Escribí un script por lotes create_glossaries.cmdque se aplica makeindexa todos los archivos acn, gloy sygien la carpeta principal del latexproyecto, para acrónimos, glosarios y símbolos respectivamente. Por lo tanto, realmente no tengo que saber qué glossariesarchivos se crean explícitamente y puedo usar el mismo script por lotes para todos mis documentos.

Ahora quiero pasar a crear automatización conarara. Básicamente lo hice funcionar para usar pdflatex y biber para compilar mi documento. Pero estoy luchando por incluir la creación de los glosarios. Por supuesto, podría ingresar los makeindexcomandos individuales para cada glossariesarchivo con

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

Sin embargo, esto carece de la generalidad del enfoque y tendría que especificar cada glossariesarchivo para cada proyecto. Si es posible, me gustaría solucionarlo.

Entonces, mi primera solución sería llamar al script por lotes desde dentro arara. Sin embargo, realmente no entendí cómo llamar a un script por lotes, aquí llamado create_glossaries.cmddesde una arararegla. ¿Cómo es eso posible?

Para ser independiente de la plataforma y utilizar el mismo enfoque en todos los sistemas operativos compatibles, ararami segunda pregunta es: ¿Cómo puedo extender una regla que haga lo mismo que mi script, de modo que encuentre cada glossariesarchivo base y lo traduzca a la salida adecuada usando makeindex?

Y una pregunta relacionada: ¿Cómo puedo entregar una posible nueva arararegla en mi texcarpeta de documentos principal en lugar de en la arararuta de reglas? El trasfondo es que los documentos son parte de un repositorio SVN, de modo que no sé la ruta absoluta donde un colaborador verifica el latexarchivo.


secuencia de comandos por lotes paramakeindex

este es el archivocreate_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

¿Solución a la idea 1?

Logré obtener el primer enfoque, llamar al script por lotes desde una arararegla propia y funcionar. Agregué esto araraconfig.yamlal directorio principal de mi proyecto.

!config
paths:
- '.'

para encontrar mi propio archivo de reglascreate_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"

Donde no se utiliza el argumento, pero el archivo no funciona sin él.

información relacionada