Creazione di una nuova classe

  • Creatore
    Topic
  • #100484
    Up
    0
    Down
    ::


    Il testo del messaggio è contenuto nel file in allegato (da compilare)

    Attachments:
    You must be logged in to view attached files.
Visualizzazione 20 filoni di risposte
  • Autore
    Risposte
    • #100485
      Up
      0
      Down
      ::


      Più che una classe, quel che hai in mente è un pacchetto. Ma non ho capito bene in cosa consisterebbe il problema. Forse riuscirei a caprie meglio se tu fornissi un esempio che illustrasse quale dovrebbe essere, secondo la tua idea, l’aspetto tipico di un file sorgente. Vorresti, che ne so, definire un ambiente “ECGSample” che predisponga la carta millimetrata rossa e all’interno del quale fosse possibile usare dei comandi per costruire delle onde componendo vari “spezzoni”?

      Ciao.


      Gustavo

    • #100486
      Up
      0
      Down
      ::


      Nella mia immaginazione penso ad un qualche cosa di simile al pacchetto “skaK” dove inserendo un listato tipo questo:
      `
      \newgame
      \mainline{1. Nf3 d5 2. g3 g6 3. Bg2 Bg7 4. d4 c6 5. O-O Nf6 6. b3 O-O 7. Bb2 Bf5 8. c4
      Nbd7 9. Nc3 dxc4 10. bxc4 Nb6 11. c5 Nc4 12. Bc1 Nd5 13. Qb3 Na5 14. Qa3 Nc4 15.
      Qb3 Na5 16. Qa3 Nc4 }
      \showboard
      `
      ottengo la corretta disposizione dei pezzi sulla scacchiera.
      Nel mio caso dovrei attribuire un nome univoco per ogni forma d’onda (inserita in una sorta di database) che andrebbe richiamata ed associata ad altre a formare il tracciato definitivo. Provo a fare una specie di esempio:
      `
      \begin{ecg}
      \mainline(i1,p1)–(i2,q1)–(s1,t1)–(i3,p2);
      \showecg
      \end{ecg}
      `
      Io purtroppo non ho nessuna dimestichezza con la programmazione TeX, ma potrei creare un archivio iniziale di forme da dare in pasto a qualche esperto che voglia sbizzarrirsi in questa sfida.

      Ciao, Ezio

    • #100487
      Up
      0
      Down
      ::


      Ho provato a buttare giù due linee di codice con [tt]LaTeX3[/tt]. In sostanza il pacchetto che ho creato ti permette di creare un ECG con l’ambiente [tt]ecg[/tt]. Questo accetta un comando opzionale, che viene passato a tikzpicture. Ho definito per comodità tre nuove key: [tt]grid width[/tt], [tt]grid height[/tt] e [tt]grid depth[/tt], che ti permettono di passare a [tt]tikz[/tt] la larghezza, l’altezza e la profondità della griglia alle spalle del ECG.

      Per disegnare l’ECG puoi usare il comando [tt]\ECG[1]{2}[/tt] che accetta un comando opzionale [tt]1[/tt], passato al comando [tt]\draw[/tt] di [tt]tikz[/tt], e uno obbligatorio [tt]2[/tt], dove poni una lista separata da virgole con tutte le sigle dei vari picchi. Il comando è in grado di collocare automaticamente i vari picchi uno di seguito all’altro. In più se devi evidenziare un picco ti basta passare a [tt\]draw[/tt] le opportune chiavi.

      Per definire i vari picchi usi [tt]\nuovoECG[/tt] che ti permette di “associare” a una sigla un codice di [tt]tikz[/tt]. La sintassi è [tt]\nuovoECG{1}{2}[/tt], dove [tt]1[/tt] è la sigla del picco, mentre in due poni il codice [tt]tikz[/tt], senza però il comando [tt]\draw[/tt] e il punto virgola finale.

      Per completezza ti lascio anche un minimo esempio compilabile che mostra il risultato.
      `
      \documentclass{article}
      \usepackage{ECG}

      \nuovoECG{prg}{(0,0)–(0.2,0)–(0.3,0.1)–(0.4,0)–(1,0)–(1.05,0.5)–(1.15,-1.6)–(1.2,0)–(1.6,0)–(1.9,0.25)–(2.2,0)–(2.6,0)}

      \begin{document}
      \begin{ecg}
      \ECG{prg,prg,prg}
      \end{ecg}
      \end{document}
      `

      Poni questo codice nel file [tt]ECG.sty[/tt]
      `
      \NeedsTeXFormat{LaTeX2e}[1994/06/01]
      \ProvidesPackage{ECG}[2015/03/02 Draw ECG]

      \RequirePackage{tikz}
      \RequirePackage{xparse}

      \ExplSyntaxOn

      \tikzset { grid ~ depth / .store ~ in = \sk_ECG_griddp_tl, grid ~ height / .store ~ in = \sk_ECG_gridht_tl, grid ~ width / .store ~ in = \sk_ECG_gridwd_tl , grid ~ depth = 2cm, grid ~ height = 2cm, grid ~ width = 11cm }

      \DeclareDocumentEnvironment { ecg } { O{} }
      { \DeclareDocumentCommand \ECG { O{} m } { \sk_ECG:nn { ##2 } { ##1 } }
      \begin{center}\begin{tikzpicture}[#1]
      \draw(-0.5cm,-\sk_ECG_griddp_tl)grid(\sk_ECG_gridwd_tl,\sk_ECG_gridht_tl);
      \draw(-0.5cm,-\sk_ECG_griddp_tl)grid(\sk_ECG_gridwd_tl,\sk_ECG_gridht_tl);
      \coordinate(sk_end) at (0,0); }
      { \end{tikzpicture}\end{center} }

      \clist_new:N \sk_ECG_clist
      \cs_set_nopar:Npn \sk_ECG:nn #1 #2
      {
      \clist_set:Nn \sk_ECG_clist { #1 }
      \clist_map_inline:Nn \sk_ECG_clist { \use:c { sk_ECG_ ##1 } { #2 } }
      }

      \cs_set_nopar:Npn \sk_ECG_new:nn #1 #2 #3
      {
      \cs_if_exist:cF { sk_ECG_ #1 } { \cs_set_nopar:cpn { sk_ECG_ #1 } ##1 {\draw[thick,rounded ~ corners=2pt,shift=(sk_end),##1] #3 coordinate(sk_end);} }
      }
      \DeclareDocumentCommand \nuovoECG { m O{} m }
      {
      \sk_ECG_new:nn { #1 } { #2 } { #3 }
      }
      \ExplSyntaxOff
      \endinput
      `

    • #100488
      Up
      0
      Down
      ::


      Urka!!

      Scusa se sono così “impacciato”, ma da dove tiro fuori il package{ECG} e come inserisco il codice in ECG.sty ?

      A parte questo, credi che possa valere la pena di mettersi a codificare una serie di onde da inserire poi nei tracciati ? (non mi pare di aver visto un grande interesse nel forum). Io sono comunque pronto a fare la mia parte nella stesura delle forme.

      Ciao, Ezio

    • #100489
      Up
      0
      Down
      ::


      Dovresti creare un nuovo file di nome [tt]ECG.sty[/tt] e incollarci il codice del pacchetto che ho riportato sopra. Poi salvi il file nella stessa cartella che contiene anche l’esempio minimo compilabile e compili per vedere il risultato.

      Purtroppo non riesco ad allegarti il file [tt].sty[/tt] con il codice.

    • #100490
      Up
      0
      Down
      ::


      Aggiungo una precisazione: le istruzioni

      {(0,0)–(0.2,0)–(0.3,0.1)–(0.4,0)–(1,0)–(1.05,0.5)–(1.15,-1.6)–(1.2,0)–(1.6,0)–(1.9,0.25)–(2.2,0)–(2.6,0)}

      generano un intero complesso PQRST che io dovrei smembrare per ottenere le singole onde. In pratica:
      (0,0)–(0.2,0)–(0.3,0.1)–(0.4,0)–(1,0) servono a generare l’onda P (che potrei chiamare ad esempio con un codice “p1” diverso da p2, p3 … ecc a seconda della morfologia richiesta per l’onda stessa)(1.05,0.5)–(1.15,-1.6)–(1.2,0)–(1.6,0) servono per generare un complesso QRS che potrei chiamare r1, diverso da r2, r3 … ecc ecc
      (1.9,0.25)–(2.2,0)–(2.6,0) danno origine all’onda T da chiamare t1, diversa da t2, t3 … ecc ecc.

      Devo quindi creare una serie di n_p, di n_r, di n_t, tutte identificabili in modo univoco (p13-r27-t2) per creare un complesso QRS che, reiterato, dia origine al tracciato ECG.
      spero di essere riuscito a spiegarmi.

    • #100491
      Up
      0
      Down
      ::


      Basta che lo spezzi in tre diversi elementi:
      `
      \documentclass{article}
      \usepackage{ECG}
      \nuovoECG{p1}{(0,0)–(0.2,0)–(0.3,0.1)–(0.4,0)–(1,0)}
      \nuovoECG{r1}{(0,0)–(.05,0.5)–(.15,-1.6)–(.2,0)–(.6,0)}
      \nuovoECG{t1}{(0,0) — (.3,0.25)–(.6,0)–(1,0)}
      \begin{document}
      \begin{ecg}
      \ECG{p1,r1,t1}
      \end{ecg}
      \end{document}
      `
      Nota che ogni volta devi ricominciare da zero perché il picco viene poi spostato nella posizione opportuna.

    • #100492
      Up
      0
      Down
      ::


      Stavo giusto per risponderti che, visto come funziona la cosa, posso anche creare interi complessi per rendere più snello l’assemblaggio delle varie parti.
      Per quanto riguarda il disegno della carta millimetrata sotto il tracciato, come posso passare i comandi al programma in fase di preparazione?
      Scusa se solo ora aggiungo un sentito ringraziamento per quanto stai facendo; non credevo che con un numero così esiguo di istruzioni si potesse dare vita ad un’idea che mi sembrava quasi utopica.

    • #100493
      Up
      0
      Down
      ::


      Continuo a raffica con le cose che mi vengono in mente. Vedo che tu hai messo nel preambolo le varie istruzioni \nuovoECG{p1} … ecc; ma se io avessi un database che già contiene tutte de descrizioni delle forme, potrei richiamare le stesse semplicemente facendo leggere l’archivio al programma?

    • #100494
      Up
      0
      Down
      ::


      Scusa, ma non riesco a capire cosa intendi fare. Intendi come fai a passare delle opzioni direttamente alla carta millimetrata?

    • #100495
      Up
      0
      Down
      ::


      Dipende da com’è scritto il tuo database. Dovresti scrivere tutte le varie forme con il comando [tt]\nuovoECG[/tt] con annessa sigla di riconoscimento e poi porli in un file con un nome che preferisci (tipo picchi_ECG.tex) e richiamarlo nel preambolo con [tt]\input{picchi_ECG}[/tt] dopo aver caricato il pacchetto [tt]ECG[/tt].

      Fatto questo, ogni volta che usi l’ambiente potrai disegnare i tuoi ECG semplicemente inserendo la sequenza che ti interessa delle varie sigle di picchi.

    • #100496
      Up
      0
      Down
      ::


      No, ho visto che il disegno della carta viene generato nel listato dell’ ECG.sty; ma se ad esempio volessi una striscia più lunga (per collocare ad esempio 5 complessi QRS) o più alta (per descrivere ad esempio tre derivazioni), dovrei lavorare su quel listato o potrei avere a disposizione una serie di opzioni da mettere ad esempio come:

      \ECG[hight=3cm,width=8cm]{p1,r1,t1, ….}

      Spero di essermi spiegato

    • #100497
      Up
      0
      Down
      ::


      Se ho capito bene, le opzioni che vuoi le ho già definite, presupponendo proprio questo 😀 Se vuoi modificare la dimensione della carta millimetrata dietro usa le opzioni [tt]grid height[/tt] , [tt]grid width[/tt] e [tt]grid depth[/tt] da dare nell’argomento opzionale dell’ambiente [tt]ecg[/tt]. Di seguito un esempio.
      `
      \begin{ecg}[grid width=3cm,grid height=1cm]
      \ECG{p1,r1,t1,prg}
      \end{ecg}
      `

    • #100498
      Up
      0
      Down
      ::


      Ok, mi sembra fantastico. Ancora un sentito grazie, Ezio

    • #100499
      Up
      0
      Down
      ::


      Se poi ha i tempo, ti consiglio di leggerti la guida “Introtex”, che spiega come funzionano LaTeX (e sotto di lui TeX). Nel caso di questo codice, in cui ho impiegato LaTeX3, puoi provare a leggerne la documentazione con
      `
      texdoc interface3.
      `
      È un progetto che stanno ancora ampliando, ma come hai potuto osservare ha grandi potenzialità.

    • #100500
      Up
      0
      Down
      ::


      Pensi che tutto ciò possa essere interessante per fare un articoletto su ArsTexnica? Io da oggi incomincio a scrivere una libreria di forme.

    • #100501
      Up
      0
      Down
      ::

      Aimè” post=100243Pensi che tutto ciò possa essere interessante per fare un articoletto su ArsTexnica? Io da oggi incomincio a scrivere una libreria di forme.

      Certamente è interessante per un articolo di Ars.

      Un solo commento: visto che il pacchetto sfrutta TikZ, non mi orienterei verso la programmazione LaTeX3, ma utilizzerei le opzioni native di TikZ, le pgfkeys. Prova a guardare come esempio How to plot a discontinuous function curve and diagram of Markov chain with TikZ?

      Ciao
      Claudio

    • #100502
      Up
      0
      Down
      ::


      Scusa @Aimè devo correggerti un piccolo refuso che mi è sfuggito. 😳 Nel pacchetto cambia la riga di codice
      `
      \ProvidesPackage{sk-chem}[2015/03/02 Draw ECG]
      `
      con
      `
      \ProvidesPackage{ECG}[2015/03/02 Draw ECG]
      `
      È una svista, ho copia-incollato la riga da un altro file e mi è sfuggito il nome. Se compili il pacchetto dovrebbe comparirti un warning. In questo modo lo rimuovi. Ho già corretto il codice precedente.

      Se vuoi scrivere un articolo sulla questione sarei anche disponibile a darti una mano. 😀 Contattami alla mail [tt]scavino dot marco93 at gmail dot com[/tt]

    • #100503
      OldClaudio
      Partecipante
        Up
        0
        Down
        ::

        Aimè” post=100243Pensi che tutto ciò possa essere interessante per fare un articoletto su ArsTexnica? Io da oggi incomincio a scrivere una libreria di forme.

        Come direttore di ArsTeXnica ti dico senz’altro che la cosa sarebbe interessante, e penso che mutatis mutandis sia interessante anche per chi non è cardiologo.

      • #100504
        Up
        0
        Down
        ::


        Scusate per l’orario, ma ero impegnato. Contatterò direttamente Marco per vedere come impostare l’articolo; nel frattempo ho iniziato la descrizione delle forme d’onda e la loro codifica. C’è una deadline per l’invio del materiale?

      • #100505
        OldClaudio
        Partecipante
          Up
          0
          Down
          ::


          Per il numero di aprile 2015 la deadline è già scaduta. Per il numero di ottobre 2015 la devo ancora fissare, ma orientativamante sarà il 31 agosto; il numero di ottobre contiene gli atti del meeting 2015, quindi se presenti l’articolo per ottobre devi anche andare a presentarlo di persona al Meeting. Se non vuoi o non puoi, e se fai l’articolo con Marco non può andare nemmeno lui, bisogna che vi accontentiate di aprile 2016 🙁

          Nella pagina del forum c’è una sezione ArsTeXnica dove ci sono scaricabili tutti gli articoli pubblicati e anche la rivista intera in formato PDF. Quelli che hanno almeno un anno di anzianità sono scaricabili da chiunque; quelli più recenti solo dai soci del GuIT.

          Ma in quella sezione c’è anche una sottosezione dedicata ai potenziali autori con un link per scaricare il “Kit” della classe arstexnica.cls e i modelli per i quattro file .tex che sono richiesti agli autori; agli autori sono richiesti, evidentemente, anche i file con le immagini e il file .bib con la bibliografia. Molto semplice.
          Gli articoli già pubblicati possono rappresentare dei modelli di impostazione, ma in questo caso lo stile letterario di ciascuno deve prevalere rispetto allo stile altrui.
          Personalmente raccomanderei di non usare citazioni in nota; la bibliografia (del tipo autore-anno) c’è già, quindi non è per niente utile ripetere le citazioni in nota. Una citazione in nota può essere utile se fa parte di una nota che contiene anche testo, non se la nota contiene solo la citazione. Parere personale, naturalmente; alla peggio il comitato di Redazione provvede a togliere queste citazioni inutili e a trasformale in citazioni in linea con il testo. 🙂

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

      Go to top