![arara: carga un script por lotes local o transforma el script por lotes en una regla propia](https://rvso.com/image/392339/arara%3A%20carga%20un%20script%20por%20lotes%20local%20o%20transforma%20el%20script%20por%20lotes%20en%20una%20regla%20propia.png)
Mi pregunta es similar a laaquí, sin embargo, tiene un enfoque un poco diferente. Estoy trabajando en Windows usando MikTeX 2.9.
Tengo varios latex
proyectos que forman parte de la documentación de una herramienta. Cada proyecto puede crear múltiplesglossaries
archivos dependiendo del número de subglosarios utilizados en cada documento.
document.acn
document.glo
document.syg1
document.syg2
...
En lugar de llamar makeindex
individualmente a cada glossaries
archivo 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.cmd
que se aplica makeindex
a todos los archivos acn
, glo
y sygi
en la carpeta principal del latex
proyecto, para acrónimos, glosarios y símbolos respectivamente. Por lo tanto, realmente no tengo que saber qué glossaries
archivos 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 makeindex
comandos individuales para cada glossaries
archivo con
% arara: makeindex: { style: %maintexname%.ist }
Sin embargo, esto carece de la generalidad del enfoque y tendría que especificar cada glossaries
archivo 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.cmd
desde una arara
regla. ¿Cómo es eso posible?
Para ser independiente de la plataforma y utilizar el mismo enfoque en todos los sistemas operativos compatibles, arara
mi segunda pregunta es: ¿Cómo puedo extender una regla que haga lo mismo que mi script, de modo que encuentre cada glossaries
archivo base y lo traduzca a la salida adecuada usando makeindex
?
Y una pregunta relacionada: ¿Cómo puedo entregar una posible nueva arara
regla en mi tex
carpeta de documentos principal en lugar de en la arara
ruta 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 latex
archivo.
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 arara
regla propia y funcionar. Agregué esto araraconfig.yaml
al 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.