
¿Cómo tengo que cambiar los arara
comandos a continuación para que también se imprima el índice de nombres? Tal como está, solo obtengo el í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}
Aquí está el archivo 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}
}
Respuesta1
Gracias a Paulo por mostrarme esto: todas arara
las reglas tienen un parámetro implícito llamado files
, que toma una lista (separada por comas) de nombres de archivos. arara
Luego iterará en esta lista y aplicará esa directiva a cada elemento de la lista.
Otro punto es que no necesita las dos ejecuciones de pdfLaTeX entre BibTeX y MakeIndex: la primera ejecución de pdfLaTeX es suficiente para generar los archivos auxiliares para las herramientas externas. Las dos últimas ejecuciones de pdfLaTeX son necesarias para incluir las bibliografías/índices generados y ordenar las referencias cruzadas.
Su lista de directivas podría cambiarse a:
% arara: pdflatex
% arara: bibtex
% arara: makeindex
% arara: makeindex: { files: [ names ] }
% arara: pdflatex
% arara: pdflatex
y quizás reemplace las dos makeindex
líneas por una sola (suponiendo que su .tex
archivo principal sea main.tex
): % arara: makeindex: { files: [ main, names ] }
.
O, si quieres arara
ser inteligente y saltarte pasos innecesarios (explicaciónaquí):
% 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)')
Otra opción, como mencionó barbarabeeton en el comentario, es el imakeidx
paquete, que se ejecuta makeindex
desde pdfLaTeX. Dado que makeindex
es un programa confiable, se le permite ejecutarse en un modo de escape de shell restringido, que generalmente está habilitado. El imakeidx
paquete ya se encarga de múltiples índices y todo.
Para usarlo, sólo necesitarás cargarlo con \usepackage{makeindex}
, y reemplazarlo \makeindex[names]
con \makeindex[name=names]
.
Sin embargo, el repeatindex
paquete que utiliza parece ser incompatible con imakeidx
... Intentaré averiguar por qué.
O, si prefieres parecer el chico genial (como yo, que hice todo esto antes de que te dijeran el files
parámetro :-) y hacerlo de la manera más difícil, puedes hacer una pequeña modificación al makeindex.yaml
archivo y agregar una basename
opción que toma el nombre base del archivo de índice ( names
, en su caso) y funciona en él en lugar del nombre del archivo actual.
Primero, debajo de la arguments:
línea makeindex.yaml
agrega la opción en sí:
- identifier: basename
flag: >
@{
parameters.basename
}
(aparentemente a Java no le gusta si usas solo base
, por alguna razón, así que usé el más detallado basename
.) Configuramos esta opción sin un valor predeterminado, de modo que cuando esté vacía usemos getBasename(file)
.
Ahora modificamos el command:
apartado para usar esa opción:
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);
}
primero comprobamos si basename
está vacío; si es así, utilice el nombre del archivo actual de getBasename(file)
. Luego proceda normalmente agregando las extensiones de los archivos de entrada, salida y registro, y luego llame al makeindex
ejecutable.
(versión completa modificada del makeindex.yaml
archivo al final de esta respuesta, para su comodidad)
Después de eso, puedes cambiar tus directivas a:
% arara: pdflatex
% arara: bibtex
% arara: makeindex
% arara: makeindex: { basename: names }
% arara: pdflatex
% arara: pdflatex
(tenga en cuenta que eliminé las dos pdflatex
reglas antes makeindex
: no las necesita).
Y ahora deberías tener el índice compilado correctamente.
Si no realizó el cambio en la copia original makeindex.yaml
(que realmente deberíano), luego debe guardar el nuevo makeindex.yaml
archivo en alguna carpeta y luego crear un .araraconfig.yaml
archivo que contenga:
paths:
- '/path/to/the/folder/'
y colóquelo .araraconfig.yaml
en el directorio de trabajo actual o en su USER_HOME
carpeta (consulte el manual de Arara, capítulo 4 para obtener más información al respecto). Si el makeindex.yaml
archivo también está en el directorio de trabajo actual, puede usarlo - './'
en la segunda línea del archivo de configuración.
Archivo 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.');
}
}