arara: 로컬 배치 스크립트를 로드하거나 배치 스크립트를 자체 규칙으로 변환

arara: 로컬 배치 스크립트를 로드하거나 배치 스크립트를 자체 규칙으로 변환

내 질문은 그 질문과 비슷합니다여기, 그러나 초점이 약간 다릅니다. MikTeX 2.9를 사용하여 Windows에서 작업하고 있습니다.

latex도구 문서의 일부인 여러 프로젝트가 있습니다 . 각 프로젝트는 여러 개를 생성할 수 있습니다.glossaries각 문서에 사용된 하위 용어집 수에 따라 파일이 달라집니다.

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

makeindexglossaries파일 을 개별적으로 호출하는 대신

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배치 스크립트를 작성했습니다 . 따라서 어떤 파일이 명시적으로 생성되었는지 알 필요가 없으며 모든 문서에 동일한 배치 스크립트를 사용할 수 있습니다.makeindexacnglosygilatexglossaries

이제 다음을 사용하여 자동화 빌드로 전환하고 싶습니다.arara. 기본적으로 pdflatex와 biber를 사용하여 문서를 컴파일하는 작업을 수행했습니다. 그러나 나는 용어집 작성을 포함하려고 애쓰고 있습니다. 물론 makeindexglossaries파일에 대한 개별 명령을 입력할 수도 있습니다.

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

glossaries그러나 이는 접근 방식의 일반성이 부족하므로 각 프로젝트에 대해 각 파일을 지정해야 합니다 . 가능하다면 그 문제를 해결하고 싶습니다.

따라서 나의 첫 번째 솔루션 접근 방식은 arara. 그러나 여기서는 규칙 create_glossaries.cmd에서 호출되는 배치 스크립트를 호출하는 방법을 실제로 알지 못했습니다 arara. 그게 어떻게 가능합니까?

플랫폼 독립적이고 지원되는 모든 운영 체제에서 동일한 접근 방식을 사용하려면 arara두 번째 질문이 필요합니다. 내 스크립트와 동일한 규칙을 확장하려면 어떻게 해야 합니까? 그러면 각 기본 glossaries파일을 찾아서 를 사용하여 적절한 출력으로 변환할 수 있습니까 makeindex?

관련 질문: 규칙 경로 대신 arara기본 문서 폴더에 가능한 새 규칙을 어떻게 전달할 수 있습니까 ? 배경은 문서가 SVN 저장소의 일부이므로 공동 작업자가 파일을 체크아웃 하는 절대 경로를 알 수 없다는 것입니다 .texararalatex


다음에 대한 배치 스크립트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"

인수가 사용되지 않지만 인수 없이는 파일이 작동하지 않는 경우.

관련 정보