Wie erhalte ich mit Arara mehrere Indizes?

Wie erhalte ich mit Arara mehrere Indizes?

Wie muss ich die ararafolgenden Befehle ändern, damit auch der Namensindex ausgedruckt wird? So wie es aussieht, bekomme ich nur den Hauptindex ausgedruckt.

% 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}

Hier ist die Datei 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}
}

Antwort1

Dank geht an Paulo, der mir Folgendes gezeigt hat: Alle araraRegeln haben einen impliziten Parameter namens files, der eine (durch Kommas getrennte) Liste von Dateinamen annimmt. araradurchläuft dann diese Liste und wendet diese Anweisung auf jedes Element in der Liste an.

Ein weiterer Punkt ist, dass Sie die beiden pdfLaTeX-Durchläufe zwischen BibTeX und MakeIndex nicht benötigen: Der erste Durchlauf von pdfLaTeX reicht aus, um die Hilfsdateien für die externen Tools zu generieren. Die letzten beiden Durchläufe von pdfLaTeX sind erforderlich, um die generierten Bibliografien/Indizes einzubinden und Querverweise zu sortieren.

Ihre Liste der Anweisungen könnte wie folgt geändert werden:

% arara: pdflatex
% arara: bibtex
% arara: makeindex
% arara: makeindex: { files: [ names ] }
% arara: pdflatex
% arara: pdflatex

und ersetzen Sie die beiden makeindexZeilen möglicherweise durch nur eine (vorausgesetzt, Ihre Hauptdatei .texist main.tex): % arara: makeindex: { files: [ main, names ] }.

Oder, wenn Sie araraclever sein wollen und unnötige Schritte überspringen (ErklärungHier):

% 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)')

Eine weitere Option, wie barbarabeeton im Kommentar erwähnte, ist das imakeidxPaket, das makeindexinnerhalb von pdfLaTeX ausgeführt wird. Da makeindexes sich um ein vertrauenswürdiges Programm handelt, darf es in eingeschränktem Shell-Escape ausgeführt werden, das normalerweise aktiviert ist. Das imakeidxPaket kümmert sich bereits um mehrere Indizes und alles.

Um es zu verwenden, müssen Sie es lediglich mit laden \usepackage{makeindex}und \makeindex[names]durch ersetzen \makeindex[name=names].

Das repeatindexvon Ihnen verwendete Paket scheint jedoch mit ... nicht kompatibel zu sein. imakeidxIch werde versuchen, den Grund dafür herauszufinden.


Oder, wenn Sie lieber wie der coole Junge aussehen möchten (wie ich, der das alles gemacht hat, bevor ihm der filesParameter mitgeteilt wurde :-) und es auf die harte Tour machen möchten, können Sie eine kleine Änderung an der makeindex.yamlDatei vornehmen und eine basenameOption hinzufügen, die den Basisnamen der Indexdatei ( namesin Ihrem Fall ) übernimmt und damit anstelle des aktuellen Dateinamens arbeitet.

Fügen Sie zunächst unterhalb der arguments:Zeile makeindex.yamldie Option selbst hinzu:

- identifier: basename
  flag: >
    @{
      parameters.basename
    }

(Aus irgendeinem Grund mag Java es anscheinend nicht, wenn Sie nur verwenden base, daher habe ich das ausführlichere verwendet basename.) Wir setzen diese Option ohne Standardwert, sodass wir verwenden, wenn sie leer ist getBasename(file).

Jetzt ändern wir den command:Abschnitt, um diese Option zu verwenden:

  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);
    }

zuerst prüfen wir, ob basenameleer ist. Wenn ja, verwenden wir den aktuellen Dateinamen von getBasename(file). Fahren Sie dann wie gewohnt fort, indem Sie die Erweiterungen der Eingabe-, Ausgabe- und Protokolldateien hinzufügen und dann die makeindexausführbare Datei aufrufen.

(zu Ihrer Information die vollständig geänderte Version der makeindex.yamlDatei am Ende dieser Antwort)

Danach können Sie Ihre Anweisungen wie folgt ändern:

% arara: pdflatex
% arara: bibtex
% arara: makeindex
% arara: makeindex: { basename: names }
% arara: pdflatex
% arara: pdflatex

(Beachten Sie, dass ich die beiden pdflatexRegeln zuvor entfernt habe makeindex: Sie brauchen diese nicht.)

Und jetzt sollte der Index korrekt kompiliert sein.


Wenn Sie die Änderung nicht in der Originalkopie von vorgenommen haben makeindex.yaml(was Sie wirklich tun sollten),nichtmakeindex.yaml), dann müssen Sie die neue Datei in einem Ordner speichern und dann eine .araraconfig.yamlDatei erstellen, die Folgendes enthält:

paths:
- '/path/to/the/folder/'

und legen Sie diese .araraconfig.yamlin das aktuelle Arbeitsverzeichnis oder in Ihren USER_HOMEOrdner (weitere Informationen hierzu finden Sie im Arara-Handbuch, Kapitel 4). Wenn sich die makeindex.yamlDatei auch im aktuellen Arbeitsverzeichnis befindet, können Sie sie - './'in der zweiten Zeile der Konfigurationsdatei verwenden.


Vollständige makeindex.yamlDatei:

!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.');
        }
    }

verwandte Informationen