arara: ローカルバッチスクリプトをロードするか、バッチスクリプトを独自のルールに変換します

arara: ローカルバッチスクリプトをロードするか、バッチスクリプトを独自のルールに変換します

私の質問は次のようなものと同じですここただし、焦点が少し異なります。私は Windows で MikTeX 2.9 を使用して作業しています。

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を使って文書をコンパイルすることができました。しかし、用語集の作成を含めるのに苦労しています。もちろん、各ファイルmakeindexごとに個別のコマンドを入力することもできます。glossaries

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

ただし、このアプローチには汎用性が欠けており、glossariesプロジェクトごとに各ファイルを指定する必要があります。可能であれば、これを回避したいと思います。

したがって、私の最初の解決策は、 内からバッチ スクリプトを呼び出すことです。ただし、ここではルールからarara呼び出されるバッチ スクリプトを呼び出す方法がわかりません。どうすればそれが可能になるのでしょうか?create_glossaries.cmdarara

プラットフォームに依存せず、サポートされているすべてのオペレーティング システムで同じアプローチを使用するには、 2 番目の質問は次のとおりです。スクリプトと同じことを実行するルールを拡張して、各ベースファイルを検索し、を使用して適切な出力に変換するにはararaどうすればよいでしょうか。glossariesmakeindex

関連する質問:ルール パスではなく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"

引数は使用されませんが、引数がないとファイルは動作しません。

関連情報