Problema con MacTeX 2010 e makeindex

  • Creatore
    Topic
  • #50324
    lorenzo.pantieri
    Partecipante
      Up
      0
      Down
      ::


      Ciao a tutti. Per generare l’indice analitico, ero solito dare da Terminale il comando
      `makeindex -s classic /Users/Lorenzo/Documents/Documenti_LaTeX/ArteLaTeX/ArteLaTeX
      `
      (classic.ist è il file di stile spiegato nell’Arte). Aveva sempre funzionato. Ora però non va:
      `makeindex: Not writing to /Users/Lorenzo/Documents/Documenti_LaTeX/ArteLaTeX/ArteLaTeX.ind (openout_any = p).
      Can't create output index file /Users/Lorenzo/Documents/Documenti_LaTeX/ArteLaTeX/ArteLaTeX.ind.
      Usage: makeindex [-ilqrcgLT] [-s sty] [-o ind] [-t log] [-p num] [idx0 idx1 …]
      host:~ Lorenzo$ makeindex -s classic /Users/Lorenzo/Documents/Documenti_LaTeX/ArteLaTeX/ArteLaTeX
      `
      Che succede?

      Grazie,
      L.

    Visualizzazione 11 filoni di risposte
    • Autore
      Risposte
      • #50325
        Up
        0
        Down
        ::


        hai provato col percorso relativo invece che assoluto?
        magari direttamente dalla cartella col file.

      • #50326
        Up
        0
        Down
        ::

        Ciao a tutti. Per generare l’indice analitico, ero solito dare da Terminale il comando
        `makeindex -s classic /Users/Lorenzo/Documents/Documenti_LaTeX/ArteLaTeX/ArteLaTeX
        `
        (classic.ist è il file di stile spiegato nell’Arte). Aveva sempre funzionato. Ora però non va:
        `makeindex: Not writing to /Users/Lorenzo/Documents/Documenti_LaTeX/ArteLaTeX/ArteLaTeX.ind (openout_any = p).
        Can't create output index file /Users/Lorenzo/Documents/Documenti_LaTeX/ArteLaTeX/ArteLaTeX.ind.
        Usage: makeindex [-ilqrcgLT] [-s sty] [-o ind] [-t log] [-p num] [idx0 idx1 …]
        host:~ Lorenzo$ makeindex -s classic /Users/Lorenzo/Documents/Documenti_LaTeX/ArteLaTeX/ArteLaTeX
        `
        Che succede?

        Grazie,
        L.

        Te lo dice makeindex: (openout_any=p) significa che il programma rispetta l’opzione “p” (paranoid) per la scrittura su file specificati con un percorso assoluto. Volendo adattare makeindex alla “restricted shell”, questo comportamento è obbligatorio per ragioni di sicurezza. Perché non usi il pacchetto imakeidx (di due noti autori) che ti solleva perfino dall’incomodo di chiamare makeindex? 🙂

        Ciao
        Enrico

      • #50327
        Up
        0
        Down
        ::

        Perché non usi il pacchetto imakeidx (di due noti autori) che ti solleva perfino dall’incomodo di chiamare makeindex? 🙂

        Giacché i due noti autori ci leggono segnalo che a pagina 2 della documentazione del pacchetto c’è scritto

        in order to use the makeindex sorting an formatting engine

      • #50328
        Up
        0
        Down
        ::

        Perché non usi il pacchetto imakeidx (di due noti autori) che ti solleva perfino dall’incomodo di chiamare makeindex? 🙂

        Giacché i due noti autori ci leggono segnalo che a pagina 2 della documentazione del pacchetto c’è scritto

        in order to use the makeindex sorting an formatting engine

        Accidenti! Dovremo mandare la versione 1.0b al più presto, altrimenti chissà che succede! 😀

        Grazie.

        Ciao
        Enrico

      • #50329
        Up
        0
        Down
        ::

        [quote]Perché non usi il pacchetto imakeidx (di due noti autori) che ti solleva perfino dall’incomodo di chiamare makeindex? 🙂

        Giacché i due noti autori ci leggono segnalo che a pagina 2 della documentazione del pacchetto c’è scritto

        in order to use the makeindex sorting an formatting engine

        Accidenti! Dovremo mandare la versione 1.0b al più presto, altrimenti chissà che succede! 😀

        Grazie.

        Ciao
        Enrico[/quote]
        Ho segnalato con la massima urgenza appena ho rilevato l’erroraccio, prima che succedessero disastri 😀

        Ok, chiudo qui l’off-topic 🙂

      • #50330
        lorenzo.pantieri
        Partecipante
          Up
          0
          Down
          ::

          hai provato col percorso relativo invece che assoluto? magari direttamente dalla cartella col file.

          Ho provato e ora funziona. Con la MacTeX 2009, però, funzionava anche il percorso assoluto. Come minimo, Tommaso e io dovremmo aggiungere questa precisazione nella revisione dell’Arte di ottobre.

          Quanto a imakeidx, ne ignoravo l’esistenza. 😳 Spero che riusciremo a trovare il tempo per provarlo e per consigliarlo nella nuova Arte, al posto di makeidx.

          Ciao,
          L.

        • #50331
          Up
          0
          Down
          ::

          hai provato col percorso relativo invece che assoluto? magari direttamente dalla cartella col file.

          Ho provato e ora funziona. Con la MacTeX 2009, però, funzionava anche il percorso assoluto. Come minimo, Tommaso e io dovremmo aggiungere questa precisazione nella revisione dell’Arte di ottobre.

          Quanto a imakeidx, ne ignoravo l’esistenza. 😳 Spero che riusciremo a trovare il tempo per provarlo e per consigliarlo nella nuova Arte, al posto di makeidx.

          Ciao,
          L.

          l’inibizione alla scrittura fuori dall’albero locale e’ stata introdotta proprio con texlive 2010.
          e’ una sicurezza necessaria, c’e’ poco da fare.

        • #50332
          Up
          0
          Down
          ::

          hai provato col percorso relativo invece che assoluto? magari direttamente dalla cartella col file.

          Ho provato e ora funziona. Con la MacTeX 2009, però, funzionava anche il percorso assoluto. Come minimo, Tommaso e io dovremmo aggiungere questa precisazione nella revisione dell’Arte di ottobre.

          La mia spiegazione di ieri forse è stata troppo frettolosa. Vediamo di ampliare.

          Una delle novità di TeX Live 2010 è la “restricted shell escape” (uscita ristretta verso la linea di comando) che per esempio permette di usare il pacchetto epstopdf per convertire automaticamente gli EPS in PDF quando li si vuole inserire con \includegraphics. È “ristretta” perché solo pochi programmi esterni possono essere fatti andare durante una compilazione TeX: bibtex, bibtex8, kpsewhich, makeindex e repstopdf. Quest’ultimo è proprio quello che serve per la conversione degli EPS in PDF.

          La funzionalità era stata prevista per la 2009, ma problemi dell’ultimo momento legati alla sicurezza l’hanno rinviata. Qual è il problema fondamentale? I programmi abilitati scrivono su nuovi file e permettere di scrivere in luoghi arbitrari può essere un problema molto serio: ti inviano un file da compilare che scrive qualcosa in /tmp, l’attaccante aspetta che tu lo faccia e usa il file per scopi facilmente intuibili. Non che sia facile, ma il rischio c’è. Perciò i programmi abilitati possono solo scrivere in cartelle sottostanti quella di lavoro, con percorsi che devono essere relativi. Quindi
          `cd ~/miacartella
          makeindex pippo`
          funziona se il file pippo.idx sta in “miacartella”, ma
          `cd ~/miacartella
          makeindex /Users/Pippo/miacartella/pippo`
          non funziona, anche se il file su cui dovrebbe agire makeindex è lo stesso. Se si lancia makeindex tramite il menù di TeXShop o di qualsiasi altro front-end (TeXworks o Aquamacs in Mac OS X, analoghi su altri sistemi operativi) non ci sono problemi, perché i processi vengono lanciati su file dati con percorso relativo.

          Può essere seccante, ma è il prezzo da pagare alla sicurezza. Direi che non è un vero problema.

          Quanto a imakeidx, ne ignoravo l’esistenza. 😳 Spero che riusciremo a trovare il tempo per provarlo e per consigliarlo nella nuova Arte, al posto di makeidx.

          Come puoi vedere dalla documentazione, non solo compila automaticamente l’indice analitico (funzione che si può anche disabilitare, volendo), ma gestisce indici multipli e anche con numeri di colonne diversi l’uno dall’altro.

          Non l’ho provato con ClassicThesis, se devo dire la verità, ma penso che funzioni. Il caso semplice è di un solo indice a due colonne, supponiamo con stile di indice classic.ist:
          `\usepackage{imakeidx}
          \makeindex[options=-s classic]`
          Ciao
          Enrico

        • #50333
          lorenzo.pantieri
          Partecipante
            Up
            0
            Down
            ::

            Non l’ho provato con ClassicThesis, se devo dire la verità, ma penso che funzioni. Il caso semplice è di un solo indice a due colonne, supponiamo con stile di indice classic.ist:
            `\usepackage{imakeidx}
            \makeindex[options=-s classic]`

            Allora Enrico, ho appena provato a compilare l’Arte mettendo
            `\usepackage{imakeidx}
            \makeindex[options=-s classic]`
            al posto di
            `\usepackage{makeidx}
            \makeindex`
            Ricevo un errrore (alla prima compilazione con LaTeX):
            `! LaTeX Error: \begin{theindex} on input line 1 ended by \end{multicols}.`
            L’indice analtico lo produco così:
            `\manualmark
            \markboth{\spacedlowsmallcaps{\indexname}}{\spacedlowsmallcaps{\indexname}}
            \phantomsection
            \addcontentsline{toc}{chapter}{\tocEntry{\indexname}}
            \printindex`
            Dove sbaglio?

            Ciao,
            L.

            P.S. le colonne dell’indice analitico prodotto con classic.ist vengono bilanciate. Eppure nei miei sorgenti non trovo traccia del codice
            `\let\orgtheindex\theindex
            \let\orgendtheindex\endtheindex
            \def\theindex{%
            \def\twocolumn{\begin{multicols}{2}}%
            \def\onecolumn{}%
            \clearpage
            \orgtheindex
            }
            \def\endtheindex{%
            \end{multicols}%
            \orgendtheindex
            }`
            che avevo letto essere necessario per farlo.

            Sogno o son desto? 😯

          • #50334
            Up
            0
            Down
            ::

            Non l’ho provato con ClassicThesis, se devo dire la verità, ma penso che funzioni. Il caso semplice è di un solo indice a due colonne, supponiamo con stile di indice classic.ist:
            `\usepackage{imakeidx}
            \makeindex[options=-s classic]`

            Allora Enrico, ho appena provato a compilare l’Arte mettendo
            `\usepackage{imakeidx}
            \makeindex[options=-s classic]`
            al posto di
            `\usepackage{makeidx}
            \makeindex`
            Ricevo un errrore (alla prima compilazione con LaTeX):
            `! LaTeX Error: \begin{theindex} on input line 1 ended by \end{multicols}.`
            L’indice analtico lo produco così:
            `\manualmark
            \markboth{\spacedlowsmallcaps{\indexname}}{\spacedlowsmallcaps{\indexname}}
            \phantomsection
            \addcontentsline{toc}{chapter}{\tocEntry{\indexname}}
            \printindex`
            Dove sbaglio?

            Ciao,
            L.

            P.S. le colonne dell’indice analitico prodotto con classic.ist vengono bilanciate. Eppure nei miei sorgenti non trovo traccia del codice
            `\let\orgtheindex\theindex
            \let\orgendtheindex\endtheindex
            \def\theindex{%
            \def\twocolumn{\begin{multicols}{2}}%
            \def\onecolumn{}%
            \clearpage
            \orgtheindex
            }
            \def\endtheindex{%
            \end{multicols}%
            \orgendtheindex
            }`
            che avevo letto essere necessario per farlo.

            Sogno o son desto? 😯

            1. Con un esempio minimo non ho quell’errore.

            2. Ottieni la funzionalità che ti serve con
            `\usepackage{imakeidx}
            \makeindex[options=-s classic]
            \indexsetup{headers={\spacedlowsmallcaps{\indexname}}{\spacedlowsmallcaps{\indexname}}}`
            nel preambolo e
            `\manualmark
            \phantomsection
            \addcontentsline{toc}{chapter}{\tocEntry{\indexname}}
            \printindex`
            nel documento. In generale basterebbe l’opzione “intoc” a \makeindex; ma nel tuo caso hai bisogno di una particolare forma dell’annotazione per l’indice, quindi occorre un \addcontentsline esplicito (e va evitata l’opzione “intoc”).

            Il pacchetto imakeidx ridefinisce l’ambiente theindex in modo che le colonne dell’ultima pagina siano bilanciate. 8)

            Ciao
            Enrico

          • #50335
            lorenzo.pantieri
            Partecipante
              Up
              0
              Down
              ::


              Indovina un po’. La colpa è di ArsClassica. 😳

              Il seguente
              `\documentclass{scrreprt}

              \usepackage{multicol}
              \usepackage{imakeidx}

              \makeindex[options=-s classic]
              \usepackage{classicthesis-ldpkg}
              \usepackage{classicthesis}
              \usepackage[italian]{arsclassica}

              \begin{document}
              Prova\index{prova}

              \cleardoublepage
              \manualmark
              \markboth{\spacedlowsmallcaps{\indexname}}{\spacedlowsmallcaps{\indexname}}
              \phantomsection
              \addcontentsline{toc}{chapter}{\tocEntry{\indexname}}
              \printindex
              \end{document}`
              produce l’errore.

              Basta togliere queste righe da ArsClassica
              `%************************************************************
              % The index
              %************************************************************
              \@ifpackageloaded{makeidx}
              {%
              \RequirePackage{multicol}
              \let\orgtheindex\theindex
              \let\orgendtheindex\endtheindex
              \def\theindex{%
              \def\twocolumn{\begin{multicols}{2}}%
              \def\onecolumn{}%
              \clearpage
              \orgtheindex}
              \def\endtheindex{%
              \end{multicols}%
              \orgendtheindex}
              \makeindex
              }
              {\relax}`
              e tutto fila lascio. Appena ho un secondo aggiorno il pacchetto.

              Grazie,
              L.

            • #50336
              Up
              0
              Down
              ::

              Indovina un po’. La colpa è di ArsClassica. 😳

              Il seguente
              `\documentclass{scrreprt}

              \usepackage{multicol}
              \usepackage{imakeidx}

              \makeindex[options=-s classic]
              \usepackage{classicthesis-ldpkg}
              \usepackage{classicthesis}
              \usepackage[italian]{arsclassica}

              \begin{document}
              Prova\index{prova}

              \cleardoublepage
              \manualmark
              \markboth{\spacedlowsmallcaps{\indexname}}{\spacedlowsmallcaps{\indexname}}
              \phantomsection
              \addcontentsline{toc}{chapter}{\tocEntry{\indexname}}
              \printindex
              \end{document}`
              produce l’errore.

              Basta togliere queste righe da ArsClassica
              `%************************************************************
              % The index
              %************************************************************
              \@ifpackageloaded{makeidx}
              {%
              \RequirePackage{multicol}
              \let\orgtheindex\theindex
              \let\orgendtheindex\endtheindex
              \def\theindex{%
              \def\twocolumn{\begin{multicols}{2}}%
              \def\onecolumn{}%
              \clearpage
              \orgtheindex}
              \def\endtheindex{%
              \end{multicols}%
              \orgendtheindex}
              \makeindex
              }
              {\relax}`
              e tutto fila lascio. Appena ho un secondo aggiorno il pacchetto.

              Grazie,
              L.

              Basta caricare imakeidx dopo arsclassica, la ridefinizione non avrà più effetto. Se cancellassi quella ridefinizione faresti un danno a chi continua a usare makeidx. Puoi fare così:
              `\@ifpackageloaded{makeidx}
              {\@ifpackageloaded{imakeidx}{}
              {%
              \RequirePackage{multicol}
              \let\orgtheindex\theindex
              \let\orgendtheindex\endtheindex
              \def\theindex{%
              \def\twocolumn{\begin{multicols}{2}}%
              \def\onecolumn{}%
              \clearpage
              \orgtheindex}
              \def\endtheindex{%
              \end{multicols}%
              \orgendtheindex}
              \makeindex}%
              }{}`
              Oppure, per non perderti nelle graffe:
              `\@tempswatrue
              \@ifpackageloaded{makeidx}{\@ifpackageloaded{imakeidx}{\@tempswafalse}{}}{}
              \if@tempswa
              \RequirePackage{multicol}
              \let\orgtheindex\theindex
              \let\orgendtheindex\endtheindex
              \def\theindex{%
              \def\twocolumn{\begin{multicols}{2}}%
              \def\onecolumn{}%
              \clearpage
              \orgtheindex}
              \def\endtheindex{%
              \end{multicols}%
              \orgendtheindex}
              \makeindex
              \fi`
              Questo perché dopo \usepackage{imakeidx} LaTeX si comporta come se fosse caricato anche makeidx (per motivi interni che hanno a che fare con l’interazione con hyperref, ma soprattutto per evitare che qualcuno carichi makeidx dopo imakeidx).

              Ciao
              Enrico

          Visualizzazione 11 filoni di risposte
          • Devi essere connesso per rispondere a questo topic.

          Go to top