
Как мне изменить arara
команды в следующем, чтобы индекс имен также был напечатан? В нынешнем виде я получаю только основной индекс.
% arara: pdflatex
% arara: bibtex
% arara: pdflatex
% arara: pdflatex
% arara: nomencl
% arara: makeindex
% arara: pdflatex
% arara: pdflatex
% !arara: indent: { overwrite: false, output: outputfile.tex, trace: true }
\documentclass{memoir}
\usepackage[backend=bibtex,style=numeric]{biblatex}
\addbibresource{mybib.bib}
\usepackage{nomencl}
\makenomenclature
\makeindex
\makeindex[names]
\begin{document}
\chapter{Area} \label{chap:area}
\section{Area of a circle} \label{sec:circle-area}
Consult \textcite{Archimedes200} and \textcite{EulerE1776}.
\index[names]{Archimedes}
\index[names]{Euler, Leonhard}
The area $A$
\nomenclature{$A$}{area}%
of a circle with radius $r$
\nomenclature{$r$}{radius of circle}%
is defined as
\begin{equation}
A = \pi r^{2}.
\end{equation}
\index{area!of circle}
\index{area}
\index{circle!area of}
\printbibliography
\printnomenclature
\renewcommand{\indexname}{Index of Names}
\printindex[names]
\renewcommand{\indexname}{Index}
\printindex
\end{document}
Вот файл mybib.bib
:
@article{Archimedes200,
author = {Archimedes},
title = {Pi's the limit},
journal = {Syracuse J. Gastronom.\ Math.},
year = {200BCE},
volume = {10},
pages={\textsc{CCCXV}--\textsc{CCCXIV}}
}
@article{EulerE1776,
author = {Euler, Leonhard},
title = {All about E},
journal = {Math.\ Psychol.},
year = {1776},
volume = {4},
pages={1--2718}
}
решение1
Спасибо Пауло за то, что он показал мне это: все arara
правила имеют неявный параметр, называемый files
, который принимает список имен файлов (разделенных запятыми). arara
Затем он будет перебирать этот список и применять эту директиву к каждому элементу в списке.
Другой момент заключается в том, что вам не нужны два запуска pdfLaTeX между BibTeX и MakeIndex: первого запуска pdfLaTeX достаточно для генерации вспомогательных файлов для внешних инструментов. Последние два запуска pdfLaTeX необходимы для включения сгенерированных библиографий/индексов и сортировки перекрестных ссылок.
Ваш список директив может быть изменен следующим образом:
% arara: pdflatex
% arara: bibtex
% arara: makeindex
% arara: makeindex: { files: [ names ] }
% arara: pdflatex
% arara: pdflatex
и, возможно, замените две makeindex
строки только одной (предположим, что ваш основной .tex
файл — main.tex
): % arara: makeindex: { files: [ main, names ] }
.
Или, если вы хотите arara
быть умным и пропустить ненужные шаги (объяснениездесь):
% arara: pdflatex: { draft: yes }
% arara: bibtex if changed (toFile('mybib.bib'))
% arara: --> || found ('log', 'Warning: Citation')
% arara: makeindex: { files: [ main, names ] } if changed ('idx')
% arara: pdflatex until !found('log', '\\(?(R|r)e\\)?run (to get|LaTeX)')
Другой вариант, как упомянул barbarabeeton в комментарии, это пакет imakeidx
, который запускается makeindex
из pdfLaTeX. Поскольку makeindex
это доверенная программа, ей разрешено работать в ограниченном shell-escape, который обычно включен. Пакет imakeidx
уже заботится о нескольких индексах и всем остальном.
Чтобы использовать его, вам просто нужно загрузить его с помощью \usepackage{makeindex}
и заменить \makeindex[names]
на \makeindex[name=names]
.
Однако repeatindex
используемый вами пакет, похоже, несовместим с imakeidx
... Я попытаюсь выяснить, почему.
Или, если вы предпочитаете выглядеть крутым парнем (как я, который сделал все это до того, как ему рассказали о параметре files
:-) и пойти сложным путем, вы можете внести небольшое изменение в makeindex.yaml
файл и добавить basename
опцию, которая берет базовое имя индексного файла ( names
в вашем случае ) и работает с ним вместо текущего имени файла.
Во-первых, под arguments:
строкой makeindex.yaml
вы добавляете саму опцию:
- identifier: basename
flag: >
@{
parameters.basename
}
(очевидно, по какой-то причине Java не любит, если вы используете только base
, поэтому я использовал более подробный basename
.) Мы задаем эту опцию без значения по умолчанию, поэтому, когда она пуста, мы используем getBasename(file)
.
Теперь изменим command:
раздел, чтобы использовать эту опцию:
command: >
@{
if (isEmpty(basename))
{ basename = getBasename(file); }
infile = basename.concat('.').concat(input);
outfile = [ '-o', basename.concat('.').concat(output) ];
logfile = [ '-t', basename.concat('.').concat(log) ];
return getCommand('makeindex', german, style, order, options,
logfile, infile, outfile);
}
Сначала мы проверяем, basename
является ли он пустым; если это так, используем текущее имя файла из getBasename(file)
. Затем продолжаем обычным образом добавлять расширения входных, выходных и журнальных файлов, а затем вызываем makeindex
исполняемый файл.
(полная измененная версия makeindex.yaml
файла внизу этого ответа, для вашего удобства)
После этого вы можете изменить свои директивы следующим образом:
% arara: pdflatex
% arara: bibtex
% arara: makeindex
% arara: makeindex: { basename: names }
% arara: pdflatex
% arara: pdflatex
(обратите внимание, что я удалил два pdflatex
правила ранее makeindex
: они вам не нужны.)
Теперь индекс должен быть скомпилирован правильно.
Если вы не внесли изменения в исходную копию makeindex.yaml
(что вам действительно следует сделать)нет), то вам нужно сохранить новый makeindex.yaml
файл в какой-нибудь папке, а затем создать .araraconfig.yaml
файл, который содержит:
paths:
- '/path/to/the/folder/'
и поместите это .araraconfig.yaml
в текущий рабочий каталог или в вашу USER_HOME
папку (подробнее см. в руководстве arara, глава 4). Если файл makeindex.yaml
также находится в текущем рабочем каталоге, вы можете использовать - './'
во второй строке файла конфигурации.
Полный makeindex.yaml
файл:
!config
# Arara, the cool TeX automation tool
# Copyright (c) 2018, Paulo Roberto Massa Cereda
# All rights reserved.
#
# This rule is part of arara.
identifier: nmakeindex
name: MakeIndex
authors:
- Marco Daniel
- Paulo Cereda
commands:
- name: The MakeIndex software
command: >
@{
if (isEmpty(basename))
{ basename = getBasename(file); }
infile = basename.concat('.').concat(input);
outfile = [ '-o', basename.concat('.').concat(output) ];
logfile = [ '-t', basename.concat('.').concat(log) ];
return getCommand('makeindex', german, style, order, options,
logfile, infile, outfile);
}
arguments:
- identifier: basename
flag: >
@{
parameters.basename
}
- identifier: input
flag: >
@{
parameters.input
}
default: idx
- identifier: output
flag: >
@{
parameters.output
}
default: ind
- identifier: log
flag: >
@{
parameters.log
}
default: ilg
- identifier: german
flag: >
@{
isTrue(parameters.german, '-g')
}
- identifier: order
flag: >
@{
if ([ 'letter', 'word' ].contains(parameters.order)) {
return isTrue(parameters.order == 'letter', '-l', '');
}
else {
throwError('The provided order is invalid.');
}
}
- identifier: style
flag: "@{ [ '-s', parameters.style ] }"
- identifier: options
flag: >
@{
if (isList(parameters.options)) {
return parameters.options;
}
else {
throwError('I was expecting a list of options.');
}
}