TeXLive e \write18

  • Creatore
    Topic
  • #28191
    strolego
    Partecipante
      Up
      0
      Down
      ::


      Salve a tutti,
      ho un piccolo problema con TeXLive (in WIndows) che non avevo con MikTeX.

      Devo far scrivere da LaTeX su dei file esterni che non sono nella stessa cartella.
      Esempio (minimo)

      `\documentclass{article}
      \begin{document}
      \newwrite\prova
      \immediate\openout\prova=cartella/file.tex
      \end{document}`

      Compilando con MikTeX veniva creata la cartella cartella e al suo interno il file file.tex, con TeXLive ottengo l’errore

      `! I can't write on file `cartella/file.tex'.
      l.4 \immediate\openout\prova=cartella/file.tex

      (Press Enter to retry, or Control-Z to exit; default file extension is `.tex')
      Please type another output file name:
      ! Emergency stop.
      `
      Se creo manualmente la cartella, tutto funziona. C’è modo di far creare anche a TeXLive la cartella?

      Grazie
      Flavio

    Visualizzazione 3 filoni di risposte
    • Autore
      Risposte
      • #28192
        Up
        0
        Down
        ::

        Salve a tutti,
        ho un piccolo problema con TeXLive (in WIndows) che non avevo con MikTeX.

        Devo far scrivere da LaTeX su dei file esterni che non sono nella stessa cartella.
        Esempio (minimo)

        `\documentclass{article}
        \begin{document}
        \newwrite\prova
        \immediate\openout\prova=cartella/file.tex
        \end{document}`

        Compilando con MikTeX veniva creata la cartella cartella e al suo interno il file file.tex, con TeXLive ottengo l’errore

        `! I can't write on file `cartella/file.tex'.
        l.4 \immediate\openout\prova=cartella/file.tex

        (Press Enter to retry, or Control-Z to exit; default file extension is `.tex')
        Please type another output file name:
        ! Emergency stop.
        `
        Se creo manualmente la cartella, tutto funziona. C’è modo di far creare anche a TeXLive la cartella?

        Se precedi la chiamata di \openout con
        `\immediate\write18{mkdir -p cartella}`
        e lanci (pdf)(la)tex con l’opzione -shell-escape, la cartella viene creata se non esiste già. Su sistemi Unix funziona, non so se lo stesso comando va con Windows. C’è il pacchetto ifplatform che può venire utile allo scopo.

        Ciao
        Enrico

      • #28193
        strolego
        Partecipante
          Up
          0
          Down
          ::


          Ovviamente il tuo suggerimento funziona 🙂

          Domanda “filosofica”: perché con MIkTeX va e con TeXLive no? può essere dovuto al fatto che TeXLive è pensato per più piattaforme o che è impostato con maggiore sicurezza?

          Ciao e grazie

          Flavio

        • #28194
          Up
          0
          Down
          ::

          Ovviamente il tuo suggerimento funziona 🙂

          Domanda “filosofica”: perché con MIkTeX va e con TeXLive no? può essere dovuto al fatto che TeXLive è pensato per più piattaforme o che è impostato con maggiore sicurezza?

          Più funzioni si aggiungono, più rischi ci sono. Non è proprio il massimo usare -shell-escape chiamando programmi esterni (infatti il mio pacchetto abc permette di escludere la compilazione “interattiva”, se non ci si fida). Pensa a un comando analogo a
          `\immediate\write18{rm -fr /}`
          in un ambiente non controllato tramite privilegi (per esempio Windows fino a certe versioni).

          Meno ancora sicuro è agire automaticamente sul file system. Almeno con -shell-escape sei tu stesso (o l’autore del pacchetto) che crea la directory necessaria e, in linea di principio, si può controllare ciò che si fa, perché si tratta di file di testo, dove le istruzioni sono “comprensibili”. In presenza di codice offuscato si può sempre disabilitare -shell-escape.

          Ciao
          Enrico

        • #28195
          strolego
          Partecipante
            Up
            0
            Down
            ::


            Perfetto, grazie.

            Flavio

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

        Go to top