![arara: 로컬 배치 스크립트를 로드하거나 배치 스크립트를 자체 규칙으로 변환](https://rvso.com/image/392339/arara%3A%20%EB%A1%9C%EC%BB%AC%20%EB%B0%B0%EC%B9%98%20%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8%EB%A5%BC%20%EB%A1%9C%EB%93%9C%ED%95%98%EA%B1%B0%EB%82%98%20%EB%B0%B0%EC%B9%98%20%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8%EB%A5%BC%20%EC%9E%90%EC%B2%B4%20%EA%B7%9C%EC%B9%99%EC%9C%BC%EB%A1%9C%20%EB%B3%80%ED%99%98.png)
내 질문은 그 질문과 비슷합니다여기, 그러나 초점이 약간 다릅니다. MikTeX 2.9를 사용하여 Windows에서 작업하고 있습니다.
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
기본 문서 폴더에 가능한 새 규칙을 어떻게 전달할 수 있습니까 ? 배경은 문서가 SVN 저장소의 일부이므로 공동 작업자가 파일을 체크아웃 하는 절대 경로를 알 수 없다는 것입니다 .tex
arara
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"
인수가 사용되지 않지만 인수 없이는 파일이 작동하지 않는 경우.