![arara: ローカルバッチスクリプトをロードするか、バッチスクリプトを独自のルールに変換します](https://rvso.com/image/392339/arara%3A%20%E3%83%AD%E3%83%BC%E3%82%AB%E3%83%AB%E3%83%90%E3%83%83%E3%83%81%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%88%E3%82%92%E3%83%AD%E3%83%BC%E3%83%89%E3%81%99%E3%82%8B%E3%81%8B%E3%80%81%E3%83%90%E3%83%83%E3%83%81%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%88%E3%82%92%E7%8B%AC%E8%87%AA%E3%81%AE%E3%83%AB%E3%83%BC%E3%83%AB%E3%81%AB%E5%A4%89%E6%8F%9B%E3%81%97%E3%81%BE%E3%81%99.png)
私の質問は次のようなものと同じですここただし、焦点が少し異なります。私は Windows で MikTeX 2.9 を使用して作業しています。
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
プラットフォームに依存せず、サポートされているすべてのオペレーティング システムで同じアプローチを使用するには、 2 番目の質問は次のとおりです。スクリプトと同じことを実行するルールを拡張して、各ベースファイルを検索し、を使用して適切な出力に変換するには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"
引数は使用されませんが、引数がないとファイルは動作しません。