![arara:載入本機批次腳本或將批次腳本轉換為自己的規則](https://rvso.com/image/392339/arara%EF%BC%9A%E8%BC%89%E5%85%A5%E6%9C%AC%E6%A9%9F%E6%89%B9%E6%AC%A1%E8%85%B3%E6%9C%AC%E6%88%96%E5%B0%87%E6%89%B9%E6%AC%A1%E8%85%B3%E6%9C%AC%E8%BD%89%E6%8F%9B%E7%82%BA%E8%87%AA%E5%B7%B1%E7%9A%84%E8%A6%8F%E5%89%87.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
規則呼叫的。這怎麼可能?
要獨立於平台並在我的第二個問題支援的所有作業系統上使用相同的方法arara
是:如何擴展與我的腳本執行相同操作的規則,以便找到每個基本glossaries
文件並使用將其轉換為正確的輸出makeindex
?
還有一個相關問題:如何arara
在主tex
文檔資料夾而不是arara
規則路徑中傳遞可能的新規則?背景是這些文件是 SVN 儲存庫的一部分,因此我不知道協作者檢出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"
不使用參數,但文件沒有它就無法工作的地方。