Generare warning in un sorgente (non pacchetto né classe)

  • Creatore
    Topic
  • #81281
    Liverpool
    Partecipante
      Up
      0
      Down
      ::


      Vorrei generare in un sorgente [tt].tex[/tt] un avviso che compaia nella finestra dei messaggi quando si compila (come succede ad esempio per [tt]pgfplots[/tt] a proposito della compatibilità). Non dico nel file [tt].log[/tt] ma proprio nella finestrella che compare sotto il codice (con riferimento a Texmaker) con le scritte rosse per gli errori e blu per gli avvisi. Ho provato con [tt]\typeout[/tt] e [tt]\immediate\write16[/tt] (che ho spudoratamente copiato dal codice di [tt]pgfplots[/tt]), ma riesco ad ottenere gli avvisi solo nel file [tt].log[/tt]. Come si fa?

      Grazie

    Visualizzazione 4 filoni di risposte
    • Autore
      Risposte
      • #81282
        Up
        0
        Down
        ::

        Liverpool” post=80513Vorrei generare in un sorgente [tt].tex[/tt] un avviso che compaia nella finestra dei messaggi quando si compila (come succede ad esempio per [tt]pgfplots[/tt] a proposito della compatibilità). Non dico nel file [tt].log[/tt] ma proprio nella finestrella che compare sotto il codice (con riferimento a Texmaker) con le scritte rosse per gli errori e blu per gli avvisi. Ho provato con [tt]\typeout[/tt] e [tt]\immediate\write16[/tt] (che ho spudoratamente copiato dal codice di [tt]pgfplots[/tt]), ma riesco ad ottenere gli avvisi solo nel file [tt].log[/tt]. Come si fa?

        Grazie

        `\PackageWarning{liverpool}{Messaggio da liverpool}`
        Ciao
        Enrico

      • #81283
        Up
        0
        Down
        ::

        Liverpool” post=80513Vorrei generare in un sorgente [tt].tex[/tt] un avviso che compaia nella finestra dei messaggi quando si compila (come succede ad esempio per [tt]pgfplots[/tt] a proposito della compatibilità). Non dico nel file [tt].log[/tt] ma proprio nella finestrella che compare sotto il codice (con riferimento a Texmaker) con le scritte rosse per gli errori e blu per gli avvisi. Ho provato con [tt]\typeout[/tt] e [tt]\immediate\write16[/tt] (che ho spudoratamente copiato dal codice di [tt]pgfplots[/tt]), ma riesco ad ottenere gli avvisi solo nel file [tt].log[/tt]. Come si fa?

        Grazie

        `\documentclass{article}

        \begin{document}

        \makeatletter
        \def\text{Qui l'avviso che potrebbe anche andare\MessageBreak
        a capo nell'output}
        \def\textnl{\text, senza l'indicazione\MessageBreak del numero di riga}

        \ClassWarning{nome}{\text}
        \ClassWarningNoLine{nome}{\textnl}
        \PackageWarning{nome}{\text}
        \PackageWarningNoLine{nome}{\textnl}

        \@latex@warning{\text}
        \@latex@warning@no@line{\textnl}

        \GenericWarning{\@spaces\@spaces\space}{%
        Warning: \text}
        \GenericWarning{\@spaces\@spaces\space}{%
        Warning: \textnl\@gobble}
        .
        \end{document}`

        Forse non sbaglio se dico che LaTeX suddivide gli avvisi in due categorie: quelli generati da un pacchetto/classe e quelli interni al nucleo di LaTeX. I primi quattro comandi servono per la prima categoria (Class Warning o Package Warning). I due seguenti vengono usati internamente da LaTeX (LaTeX Warning). Gli ultimi due sono le varianti del comando base al quale si rifanno tutti i precedenti.

        [tt]\GenericWarning[/tt] dà la massima libertà, ma produce un output non formattato, per questo c’è bisogno di quegli [tt]\@spaces[/tt] ed eventualmente di [tt]\@gobble[/tt].

        Ciò che viene mostrato nella finestrella è semplicemente quello che gli editor hanno ricavato analizzando il log. Più un messaggio è ben formato, più facile sarà riconoscerlo per gli editor: per questo motivo io non userei [tt]\GenericWarning[/tt]. Per il riconoscimento degli avvisi TeXmaker controlla semplicemente che compaia la stringa “Warning: “, ma il comportamento degli altri editor può variare. Per esempio TeXworks cerca esplicitamente l’output dei primi sei comandi.

        In definitiva credo che la scelta migliore sia usare [tt]\PackageWarning[/tt]. Non deve necessariamente trovarsi dentro un pacchetto, puoi usarlo dovunque: se per esempio stai scrivendo una libreria per pgfplots, puoi mettere come primo argomento il nome della libreria stessa (o persino “pgfplots”). 😉

        PS: per altro, sugli avvisi/info io non prenderei ispirazione dal codice di pgfplots… non riesco a spiegarmi perché faccia qualcosa come `! Package pgfplots Warning: …` ossia mostrare un avviso preceduto da “!”, che è tipico degli errori! Fregando in questo modo gli editor… 🙁 Oltre a quella “notification” di [tt]compat=newest[/tt] che nessun editor (mi risulta) riconosce: perché non un info o un warning? Boh!

      • #81284
        Liverpool
        Partecipante
          Up
          0
          Down
          ::


          Grazie a tutti. Ancora due domande:

          1) ciò che segue [tt]\PackageWarning[/tt] dovrebbe essere il nome del pacchetto che genera l’errore?
          2) perché mi avete consigliato [tt]\PackageWarning[/tt] e non [tt]\@latex@warning[/tt]?

          Ciao

        • #81285
          Up
          0
          Down
          ::

          Liverpool” post=80517Grazie a tutti. Ancora due domande:

          1) ciò che segue [tt]\PackageWarning[/tt] dovrebbe essere il nome del pacchetto che genera l’errore?
          2) perché mi avete consigliato [tt]\PackageWarning[/tt] e non [tt]\@latex@warning[/tt]?

          Ciao

          Il primo argomento è una stringa qualsiasi e otterrai [tt]Package Warning[/tt]. Puoi usare anche [tt]\@latex@warning[/tt], perché no? Ma con il primo eviti i giochini con [tt]\makeatletter[/tt] e [tt]\makeatother[/tt]. Non rispecchierà veramente la realtà, ma se il tuo scopo è di far riconoscere l’avviso ai metodi balordi di TeXStudio o Kile, è una via sicura. Perché “metodi balordi”? Perché disabituano l’utente a prestare attenzione al log; non hai idea di quanti esempi che producono errori, bellamente ignorati da chi chiede aiuto, si vedano in giro.

          Ciao
          Enrico

        • #81286
          Up
          0
          Down
          ::

          egreg9″ post=80519Non rispecchierà veramente la realtà, ma se il tuo scopo è di far riconoscere l’avviso ai metodi balordi di TeXStudio o Kile, è una via sicura. Perché “metodi balordi”? Perché disabituano l’utente a prestare attenzione al log; non hai idea di quanti esempi che producono errori, bellamente ignorati da chi chiede aiuto, si vedano in giro.

          Punto di vista autorevole, ma personalmente non son d’accordo.

          L’utente con un minimo di pratica sa che il log è importante, che può aiutare a risolvere dei problemi e sa che ogni tanto va letto comunque (per esempio io lo faccio prima della “consegna”). Ma non trovo affatto pratico leggerlo a ogni compilazione.

          Per un principiante, trovo ingiustificabile chiedergli di scorrere ogni volta il log in cerca di avvisi (o errori), si perderebbe tra tutti quei file, quei numeri e quell’accozzaglia amorfa che ne vien fuori. Se gli errori sono ignorati da un utente inesperto, secondo me in gran parte ne è causa il meccanismo pressoché scriteriato che c’è dietro (TeX non aiuta affatto, ma spesso è colpa dei pacchetti; per fortuna mi pare che LaTeX3 stia cercando di render più razionale la gestione dei messaggi).

          Perciò quei “metodi balordi” secondo me sono necessari. Non lo dico perché in quello di TeXworks c’è del mio, ma semmai è il contrario: l’ho scritto convinto dell’importanza di un decente riconoscimento dei messaggi.

          Ogni tanto Lorenzo sottolinea qualche punto debole di LaTeX che spaventa i principianti e li allontana: ecco, secondo me questo è uno di quelli.

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

      Go to top