![arara: carregue um script em lote local ou transforme o script em lote em uma regra própria](https://rvso.com/image/392339/arara%3A%20carregue%20um%20script%20em%20lote%20local%20ou%20transforme%20o%20script%20em%20lote%20em%20uma%20regra%20pr%C3%B3pria.png)
Minha pergunta é semelhante a essaaqui, porém tem um foco um pouco diferente. Estou trabalhando no Windows usando MikTeX 2.9.
Tenho vários latex
projetos que fazem parte da documentação de uma ferramenta. Cada projeto pode criar váriosglossaries
arquivos dependendo do número de subglossários usados em cada documento.
document.acn
document.glo
document.syg1
document.syg2
...
Em vez de chamar makeindex
individualmente cada glossaries
arquivo com
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
...
Escrevi um script em lote create_glossaries.cmd
que se aplica makeindex
a todos os arquivos acn
, glo
e sygi
na pasta principal do latex
projeto, para siglas, glossários e símbolos respectivamente. Assim, eu realmente não preciso saber quais glossaries
arquivos são criados explicitamente e posso usar o mesmo script em lote para todos os meus documentos.
Agora quero mudar para a automação de construção comarara
. Basicamente, comecei a usar pdflatex e biber para compilar meu documento. Mas estou lutando para incluir a criação dos glossários. É claro que eu poderia inserir os makeindex
comandos individuais para cada glossaries
arquivo com
% arara: makeindex: { style: %maintexname%.ist }
No entanto, falta a generalidade da abordagem e eu teria que especificar cada glossaries
arquivo para cada projeto. Se possível, gostaria de contornar isso.
Portanto, minha primeira solução seria chamar o script em lote de dentro do arara
. No entanto, eu realmente não entendi como chamar um script em lote, aqui chamado create_glossaries.cmd
a partir de uma arara
regra. Como isso é possível?
Para ser independente de plataforma e usar a mesma abordagem em todos os sistemas operacionais suportados pela arara
minha segunda pergunta é: Como posso estender uma regra que faz o mesmo que meu script, para encontrar cada glossaries
arquivo base e traduzi-lo para a saída adequada usando makeindex
?
E uma dúvida relacionada: Como posso entregar uma possível nova arara
regra na minha tex
pasta principal do documento em vez de no arara
caminho das regras? O pano de fundo é que os documentos fazem parte de um repositório SVN, de modo que não sei o caminho absoluto para onde um colaborador faz check- latex
out do arquivo.
Script em lote paramakeindex
Este é o arquivocreate_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
Solução para a ideia 1?!
Consegui fazer a primeira abordagem, chamando o script em lote a partir de uma arara
regra própria, funcionando. Eu adicionei isso araraconfig.yaml
ao diretório principal do meu projeto.
!config
paths:
- '.'
para encontrar meu próprio arquivo de regrascreate_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"
Onde o argumento não é usado, mas o arquivo não funciona sem ele.