我的问题类似于这里,但它的重点略有不同。我在 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"
虽然没有使用该参数,但没有该参数文件就无法工作。