
Como devo alterar os arara
comandos a seguir para que o índice de nomes também seja impresso? Do jeito que está, recebo apenas o índice principal.
% 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}
Aqui está o arquivo 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}
}
Responder1
Créditos ao Paulo, por me mostrar isso: todas arara
as regras possuem um parâmetro implícito chamado files
, que recebe uma lista (separada por vírgula) de nomes de arquivos. arara
irá então iterar nesta lista e aplicar essa diretiva a cada item da lista.
Outro ponto é que você não precisa das duas execuções do pdfLaTeX entre BibTeX e MakeIndex: a primeira execução do pdfLaTeX é suficiente para gerar os arquivos auxiliares para as ferramentas externas. As duas últimas execuções do pdfLaTeX são necessárias para incluir as bibliografias/índices gerados e classificar as referências cruzadas.
Sua lista de diretivas pode ser alterada para:
% arara: pdflatex
% arara: bibtex
% arara: makeindex
% arara: makeindex: { files: [ names ] }
% arara: pdflatex
% arara: pdflatex
e talvez substitua as duas makeindex
linhas por apenas uma (supondo que seu .tex
arquivo principal seja main.tex
): % arara: makeindex: { files: [ main, names ] }
.
Ou, se quiser arara
ser inteligente e pular etapas desnecessárias (explicaçãoaqui):
% 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)')
Outra opção, como barbarabeeton mencionou no comentário, é o imakeidx
pacote, que roda makeindex
dentro do pdfLaTeX. Por makeindex
ser um programa confiável, ele pode ser executado em shell-escape restrito, que geralmente está habilitado. O imakeidx
pacote já cuida de vários índices e tudo mais.
Para usá-lo você só precisa carregá-lo com \usepackage{makeindex}
e substituir \makeindex[names]
por \makeindex[name=names]
.
Porém o repeatindex
pacote que você usa parece ser incompatível com imakeidx
... Vou tentar descobrir o porquê.
Ou, se você preferir parecer um garoto legal (como eu, que fiz tudo isso antes de saber do files
parâmetro :-) e da maneira mais difícil, você pode fazer uma pequena modificação no makeindex.yaml
arquivo e adicionar uma basename
opção que leva o nome base do arquivo de índice ( names
, no seu caso) e trabalha nele em vez do nome do arquivo atual.
Primeiro, abaixo da arguments:
linha makeindex.yaml
você adiciona a própria opção:
- identifier: basename
flag: >
@{
parameters.basename
}
(aparentemente o Java não gosta que você use apenas base
, por algum motivo, então usei o mais detalhado basename
.) Definimos essa opção sem um valor padrão, para que quando estiver vazia usemos getBasename(file)
.
Agora modificamos a command:
seção para usar essa opção:
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);
}
primeiro verificamos se basename
está vazio; se for, use o nome do arquivo atual de getBasename(file)
. Em seguida, prossiga normalmente adicionando as extensões dos arquivos de entrada, saída e log e, em seguida, chamando o makeindex
executável.
(versão completa modificada do makeindex.yaml
arquivo no final desta resposta, para sua conveniência)
Depois disso, você pode alterar suas diretivas para:
% arara: pdflatex
% arara: bibtex
% arara: makeindex
% arara: makeindex: { basename: names }
% arara: pdflatex
% arara: pdflatex
(observe que removi as duas pdflatex
regras antes makeindex
: você não precisa delas.)
E agora você deve ter o índice compilado corretamente.
Se você não fez a alteração na cópia original makeindex.yaml
(que você realmente deverianão), então você precisa salvar o novo makeindex.yaml
arquivo em alguma pasta e, em seguida, criar um .araraconfig.yaml
arquivo que contenha:
paths:
- '/path/to/the/folder/'
e coloque-o .araraconfig.yaml
no diretório de trabalho atual ou na sua USER_HOME
pasta (veja o manual do arara, capítulo 4 para mais informações). Se o makeindex.yaml
arquivo também estiver no diretório de trabalho atual, você poderá usar - './'
a segunda linha do arquivo de configuração.
Arquivo completo 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.');
}
}