![arara: загрузить локальный пакетный скрипт или преобразовать пакетный скрипт в собственное правило](https://rvso.com/image/392339/arara%3A%20%D0%B7%D0%B0%D0%B3%D1%80%D1%83%D0%B7%D0%B8%D1%82%D1%8C%20%D0%BB%D0%BE%D0%BA%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9%20%D0%BF%D0%B0%D0%BA%D0%B5%D1%82%D0%BD%D1%8B%D0%B9%20%D1%81%D0%BA%D1%80%D0%B8%D0%BF%D1%82%20%D0%B8%D0%BB%D0%B8%20%D0%BF%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D1%8C%20%D0%BF%D0%B0%D0%BA%D0%B5%D1%82%D0%BD%D1%8B%D0%B9%20%D1%81%D0%BA%D1%80%D0%B8%D0%BF%D1%82%20%D0%B2%20%D1%81%D0%BE%D0%B1%D1%81%D1%82%D0%B2%D0%B5%D0%BD%D0%BD%D0%BE%D0%B5%20%D0%BF%D1%80%D0%B0%D0%B2%D0%B8%D0%BB%D0%BE.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"
Где аргумент не используется, но файл без него не работает.