modifica packages

  • Creatore
    Topic
  • #14173
    Up
    0
    Down
    ::


    Cari TeXpert del forum,
    mi chiedevo se possibile modificare le impostazioni dei packages “ufficiali” senza andare a toccare i file del pacchetto.
    Cerco (e spero) di spiagarmi meglio: sto disegnando dei cirucuiti elettrici con pst-circ che dipende da pstricks. Alcuni componenti non sono proprio deifniti come vorrei io: ad esempio gli interruttori hanno la freccia solo in chiusura.
    Io vorrei creare un interruttore un po’ diverso con frecce sia in apertura che in chiusura. L’unico modo è quello di modificare il file sorgente del pacchetto di pst-circ. In questo modo la mia versione non è più allineata con quella ufficiale.
    E’ possibile creare un pacchetto parallelo con solo le mie modifiche in modo tale che la definizione di un comando cerchi gerarchicamente prima nel file di modifiche e poi nella versione ufficiale?
    grazie mille
    fabio

Visualizzazione 6 filoni di risposte
  • Autore
    Risposte
    • #14174
      Up
      0
      Down
      ::

      Cari TeXpert del forum,
      mi chiedevo se possibile modificare le impostazioni dei packages “ufficiali” senza andare a toccare i file del pacchetto.
      Cerco (e spero) di spiagarmi meglio: sto disegnando dei cirucuiti elettrici con pst-circ che dipende da pstricks. Alcuni componenti non sono proprio deifniti come vorrei io: ad esempio gli interruttori hanno la freccia solo in chiusura.
      Io vorrei creare un interruttore un po’ diverso con frecce sia in apertura che in chiusura. L’unico modo è quello di modificare il file sorgente del pacchetto di pst-circ. In questo modo la mia versione non è più allineata con quella ufficiale.
      E’ possibile creare un pacchetto parallelo con solo le mie modifiche in modo tale che la definizione di un comando cerchi gerarchicamente prima nel file di modifiche e poi nella versione ufficiale?

      Il modo standard per farlo è di crearsi un file; Per esempio, pst-mycirc.sty che sia della forma seguente:
      `\ProvidesPackage{pst-mycirc}[2007/19/04 Modifiche a pst-circ]
      \RequirePackage{pst-circ}

      \endinput`
      In questo modo carichi il pacchetto originale, ma le definizioni finali delle macro saranno le tue. C’è qualche complicazione se il pacchetto pst-circ può essere chiamato con opzioni. In tal caso, prima della riga \RequirePackage{pst-circ} scrivi
      `\DeclareOption*{\PassOptionsToPackage{\CurrentOption}{pst-circ}}
      \ProcessOptions\relax`
      Ciao
      Enrico

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

        Il modo standard per farlo è di crearsi un file; Per esempio, pst-mycirc.sty che sia della forma seguente:
        `\ProvidesPackage{pst-mycirc}[2007/19/04 Modifiche a pst-circ]
        \RequirePackage{pst-circ}

        \endinput`
        In questo modo carichi il pacchetto originale, ma le definizioni finali delle macro saranno le tue.

        Ciao Enrico, ho un dubbio: che cosa succede se il pacchetto originale contiene impostazioni incompatibili con quelle “personalizzate”? Per esempio, supponiamo che il pacchetto originale usi i pacchetti ccaption e subfigure, e io voglia invece usare il pacchetto caption, con opzioni diverse, e subfig. Viene “data la precedenza” alle opzioni personalizzate?

        Grazie,
        L.

      • #14176
        Up
        0
        Down
        ::

        Ciao Enrico, ho un dubbio: che cosa succede se il pacchetto originale contiene impostazioni incompatibili con quelle “personalizzate”? Per esempio, supponiamo che il pacchetto originale usi i pacchetti ccaption e subfigure, e io voglia invece usare il pacchetto caption, con opzioni diverse, e subfig. Viene “data la precedenza” alle opzioni personalizzate?

        No, così non si può. La scelta di quali altri pacchetti caricare è stata fatta dall’autore del pacchetto che, evidentemente, ne usa le funzionalità.

        Ammettiamo di voler modificare il pacchetto “pack” che carica “ccaption”, ma noi vogliamo “caption”; creiamo allora “modpack.sty”
        `\ProvidesPackage{modpack}
        \global\expandafter\let\csname ver@ccaption.sty\expandafter\endcsname
        \csname ver@\@currname.\@currext\endcsname
        \RequirePackage{pack}
        \RequirePackage{caption}

        \endinput`
        Il
        dovrà prendersi cura che ciò che è definito in pack.sty usando le funzionalità di ccaption sia ridefinito usando quelle di caption.

        La formula magica che comincia con \global impedisce che venga caricato ccaption; infatti, quando si carica il pacchetto “xxx”, LaTeX definisce il comando \ver@xxx.sty; se questo è già definito, altre richieste di \usepackage{xxx} o \RequirePackage{xxx} verranno (quasi) ignorate. Il quasi è per motivi che sarebbe lungo discutere.

        A questo punto, tanto vale riscrivere il pacchetto “pack”, probabilmente.

        Uno dei difetti di classicthesis è che ne carica troppi, senza usarli veramente. Così impedisce le scelte all’utente.

        Ciao
        Enrico

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

          A questo punto, tanto vale riscrivere il pacchetto “pack”, probabilmente.

          Uno dei difetti di classicthesis è che ne carica troppi, senza usarli veramente. Così impedisce le scelte all’utente.

          Ehi Enrico, ma allora ce l’hai davvero la sfera di cristallo! Oltre a ringraziarti per la spiegazione, chiara ed impeccabile come sempre, colgo l’occasione per informarti che A. Miede sta preparando una nuova versione del suo stile, che viene incontro a gran parte delle esigenze emerse nei post che gli abbiamo dedicato qui sul forum di GuIT! 😀

          Ciao e grazie mille,
          Lorenzo

        • #14178
          Up
          0
          Down
          ::


          Grazie Enrico della tempestiva risposta.
          Ti chiedo ancora una cosa: nel pacchetto originale c’è ad esempio il seguente codice
          `
          \def\pst@draw@switch{%
          \ifx\psk@Dstyle\pst@Dstyle@close
          \pnode(-0.5,0){dipole@1}
          \pnode(0.5,0){dipole@2}
          \qdisk(-0.5,0){1.5pt}
          \qdisk(0.5,0){1.5pt}
          \psline[arrows=-,linewidth=2\pslinewidth](-0.5,0.05)(0.5,0.05)
          \else
          \pnode(-0.55,0){dipole@1}
          \pnode(0.5,0){dipole@2}
          \psline[arrows=-,linewidth=2\pslinewidth](-0.5,0)(0.5,0.5)
          \psarcn[arrowinset=0]{->}(-0.5,0){0.75}{45}{-45}
          \pscircle[fillstyle=solid](-0.5,0){0.07}
          \qdisk(0.5,0){1.5pt}
          \fi
          }
          `
          io posso definire nel file delle mie macro un comando con lo stesso nome del file originale, cioè del tipo
          `
          \def\pst@draw@switch{%

          }
          `
          ?
          Ciao
          Fabio

        • #14179
          Up
          0
          Down
          ::

          Grazie Enrico della tempestiva risposta.
          Ti chiedo ancora una cosa: nel pacchetto originale c’è ad esempio il seguente codice
          `\def\pst@draw@switch{%

          }`
          io posso definire nel file delle mie macro un comando con lo stesso nome del file originale, cioè del tipo
          `\def\pst@draw@switch{%

          }`
          ?

          Certamente. Era proprio il senso della mia risposta. Carichi il pacchetto originale e poi modifichi i comandi come desideri. Ovvio che occorre stare attenti a ciò che si fa. Con \def\xxx{…} definisci il comando \xxx sostituendo eventuali significati precedenti, senza alcun avviso.

          LaTeX mette a disposizione \newcommand e \renewcommand per evitare che un utente ridefinisca inavvertitamente comandi importanti. Prova questo:
          `\documentclass{minimal}
          \renewcommand{\fi}{Firenze}
          \begin{document}
          Ciao
          \end{document}`
          Il messaggio di errore è carino, vero?
          `! LaTeX Error: Missing \begin{document}.

          See the LaTeX manual or LaTeX Companion for explanation.
          Type H for immediate help.

          l.3 \begin{document}`
          Ti dice che manca \begin{document} mostrando di essere alla riga \begin{document}.

          Quando si lavora su un pacchetto, spesso è conveniente usare \def, ma occorre stare attenti, naturalmente.

          Ciao
          Enrico

        • #14180
          Up
          0
          Down
          ::


          wow! veloce e preciso! grazie mille
          fabio

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

      Go to top