Aggiungere campo a una scheda bibliografica con biblatex

  • Creatore
    Topic
  • #93051
    samiel
    Partecipante
      Up
      0
      Down
      ::


      Come già formulato in un altro post, mi trovo nella necessità di aggiungere al campo “volume” il campo “tomo”
      (il che, peraltro, non mi pare così strano, anche se nella messe dei campi già previsti da biblatex “tomo” non esiste proprio.
      Ora, so che l’impresa non è affatto banale. Al momento ho un workaround funzionante perché dovevo finire in fretta un lavoro,
      ma vorrei capire come risolvere in maniera adeguata. Rispetto a un tread piuttosto vecchio di questo forum
      http://www.guitex.org/home/it/forum/5-tex-e-latex/87696-usare-campo-bibliografico-non-standard-con-iblatex
      la mia esigenza è più complessa. Non si tratta infatti di modificare un record, ma di far sì che per una serie di formati (@book, @inbook, ecc.)
      sia disponibile questo campo come opzionale. Ho visto il manuale di biblatex, che ho trovato tuttavia molto teorico e che non spiega
      i passaggi che si dovrebbero seguire. Posta la richiesta in stackexchange, un esperto ha suggerito di usare
      `\xpatchbibdriver{#1}{\printfield{volume}}{\printfield{volume}\newunit\newblock\‌​printfield{tome}}{}{}`
      aggiungendo tuttavia che è quindi necessario «to alter bibmacros as well». Solo che per me è come dire che devo fare
      esattamente quello che va fatto, consiglio il cui significato pratico non capisco affatto. Io credevo di aver capito
      che è necessario seguire tre passaggi (il che potrebbe essere però tutto sbagliato…):
      1) creare un file .dbx con i campo \DeclaredatamodelField
      2) creare un opportuno driver
      3) patchare i driver preesistenti perché includano il nuovo campo.
      Usando la patch sopra riportata, forse è sufficiente il punto 3).
      Purtroppo in rete non ho trovato nessuna guida che spieghi in maniera comprensibile e generale come operare.
      Ogni aiuto degli esperti sul tema è ben accetto…

      grazie
      m

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

        samiel” post=92690Come già formulato in un altro post, mi trovo nella necessità di aggiungere al campo “volume” il campo “tomo”
        (il che, peraltro, non mi pare così strano, anche se nella messe dei campi già previsti da biblatex “tomo” non esiste proprio.
        Ora, so che l’impresa non è affatto banale. Al momento ho un workaround funzionante perché dovevo finire in fretta un lavoro,
        ma vorrei capire come risolvere in maniera adeguata. Rispetto a un tread piuttosto vecchio di questo forum
        http://www.guitex.org/home/it/forum/5-tex-e-latex/87696-usare-campo-bibliografico-non-standard-con-iblatex
        la mia esigenza è più complessa. Non si tratta infatti di modificare un record, ma di far sì che per una serie di formati (@book, @inbook, ecc.)
        sia disponibile questo campo come opzionale. Ho visto il manuale di biblatex, che ho trovato tuttavia molto teorico e che non spiega
        i passaggi che si dovrebbero seguire. Posta la richiesta in stackexchange, un esperto ha suggerito di usare
        `\xpatchbibdriver{#1}{\printfield{volume}}{\printfield{volume}\newunit\newblock\‌​printfield{tome}}{}{}`
        aggiungendo tuttavia che è quindi necessario «to alter bibmacros as well». Solo che per me è come dire che devo fare
        esattamente quello che va fatto, consiglio il cui significato pratico non capisco affatto. Io credevo di aver capito
        che è necessario seguire tre passaggi (il che potrebbe essere però tutto sbagliato…):
        1) creare un file .dbx con i campo \DeclaredatamodelField
        2) creare un opportuno driver
        3) patchare i driver preesistenti perché includano il nuovo campo.
        Usando la patch sopra riportata, forse è sufficiente il punto 3).
        Purtroppo in rete non ho trovato nessuna guida che spieghi in maniera comprensibile e generale come operare.
        Ogni aiuto degli esperti sul tema è ben accetto…

        grazie
        m

        Il codice sopra non serve a nulla se prima non definisci il nuovo campo. Siccome il campo tome non esiste, l’unico modo è di usare il campo usera e rimapparlo su tome usando \DeclareSourcemap. A quel punto la macro sopra funziona, se al posto di tome scrivi usera.
        La cosa è più facile a farsi che a dirsi. Domani, se vuoi, ti mando il codice.

        Ciao
        Ivan

      • #93053
        Up
        0
        Down
        ::

        ivan” post=92692Il codice sopra non serve a nulla se prima non definisci il nuovo campo. Siccome il campo tome non esiste, l’unico modo è di usare il campo usera e rimapparlo su tome usando \DeclareSourcemap. A quel punto la macro sopra funziona, se al posto di tome scrivi usera.
        La cosa è più facile a farsi che a dirsi. Domani, se vuoi, ti mando il codice.

        Non è praticamente quello descritto nel filone linkato da samiel?

      • #93054
        Up
        0
        Down
        ::

        Elrond” post=92696

        Il codice sopra non serve a nulla se prima non definisci il nuovo campo. Siccome il campo tome non esiste, l’unico modo è di usare il campo usera e rimapparlo su tome usando \DeclareSourcemap. A quel punto la macro sopra funziona, se al posto di tome scrivi usera.
        La cosa è più facile a farsi che a dirsi. Domani, se vuoi, ti mando il codice.

        Non è praticamente quello descritto nel filone linkato da samiel?

        Esatto! Non avevo aperto il link…
        Un altro approccio è usare i Data Model, ma questo richiede di creare un file di configurazione.
        Per esigenze circostanziate come questa è forse eccessivo.
        A questo punto credo che a @samiel non serva alcun codice da parte mia 😉

        Ciao
        Ivan

      • #93055
        samiel
        Partecipante
          Up
          0
          Down
          ::


          Nel caso del tread che ho riportato c’era una modifica a un record specifico, se non ho capito male. Infatti trovo questo codice:
          `\DeclareBibliographyDriver{article}{%`
          mentre a me servirebbe la disponibilità del campo “tomo” in più casi (@book, @book, @proceedings, @collection)
          e inoltre come campo opzionale visto che non tutti i volumi sono suddivisi in tomi. Sempre in quel tread
          trovo anche `datatype=bibtex`: perché bibtex? A me servirebbe un numero, quello del tomo.
          Inoltre bisogna fare in modo che tale campo “tomo” appaia, se presente, dopo la voce @volume. Non so dunque se bisogna costruire
          tanti modelli uno per caso o c’è un modo più economico di farlo in pratica scrivendo il campo nuovo e applicandolo (via patch)
          ai casi in cui può servire. Leggo infatti che «You can often avoid modifying each individual bibliography driver by applying edits
          to the bibliography macros instead.» Purtroppo non sono in grado di realizzare indicazioni generali e vaghe come quella del tale
          che mi suggerisce che devo “modificare le macro come tali”, suggerimento ai fini pratici del tutto inutile se uno non sa
          dove e come esattamente mettere le mani 🙁

        • #93056
          Up
          0
          Down
          ::

          samiel” post=92701Nel caso del tread che ho riportato c’era una modifica a un record specifico, se non ho capito male. Infatti trovo questo codice:
          `\DeclareBibliographyDriver{article}{%`
          mentre a me servirebbe la disponibilità del campo “tomo” in più casi (@book, @book, @proceedings, @collection)
          e inoltre come campo opzionale visto che non tutti i volumi sono suddivisi in tomi. Sempre in quel tread
          trovo anche `datatype=bibtex`: perché bibtex? A me servirebbe un numero, quello del tomo.
          Inoltre bisogna fare in modo che tale campo “tomo” appaia, se presente, dopo la voce @volume. Non so dunque se bisogna costruire
          tanti modelli uno per caso o c’è un modo più economico di farlo in pratica scrivendo il campo nuovo e applicandolo (via patch)
          ai casi in cui può servire. Leggo infatti che «You can often avoid modifying each individual bibliography driver by applying edits
          to the bibliography macros instead.» Purtroppo non sono in grado di realizzare indicazioni generali e vaghe come quella del tale
          che mi suggerisce che devo “modificare le macro come tali”, suggerimento ai fini pratici del tutto inutile se uno non sa
          dove e come esattamente mettere le mani 🙁

          Il discorso è molto complesso. Il campo volume viene usato sia in alcune macro, richiamate dai driver,
          sia ll’interno dei driver stessi. Aggiungere un nuovo campo dopo volume comporta modificare sia le macro sia i driver.
          Naturalmente si può fare tutto con \xpatchbibmacro e \xpatchbibdriver.
          Io però ti suggerisco un’altra strada. Perché non usare il campo part, che già è inserito nei driver e nelle macro?
          Volendo potresti anche rimapparlo su un nuovo campo tome come detto sopra.

          Tutto sarebbe stato più semplice avendo a disposizione un esempio minimo compilabile 😉

          Ciao
          Ivan

        • #93057
          samiel
          Partecipante
            Up
            0
            Down
            ::


            La mappatura su part si puo ottenere in questo modo:
            `\documentclass[italian]{article}
            \usepackage[T1]{fontenc}
            \usepackage[utf8]{inputenc}
            \usepackage{babel}
            \usepackage[]{biblatex}
            \usepackage{filecontents}

            %\DeclareFieldFormat{part}{.#1}% physical part of a logical volume
            \DefineBibliographyStrings{italian}{%
            part = {tomo},
            }
            \DeclareFieldFormat{part}{\addcomma\space\bibstring{part}\space #1}

            \begin{filecontents*}{\jobname.bib}
            @InProceedings{bertolini:1992,
            author = “Francesco Bertolini”,
            title = “Società di trasmissione orale: mito e folclore”,
            booktitle = “Lo spazio letterario della Grecia antica”,
            editor = “G. Cambiano and L. Canfora and D. Lanza”,
            publisher = “Salerno”,
            location = “Roma”,
            year = “1992”,
            volume = “1”,
            part = “2”,
            pages = “47–75”,
            }
            \end{filecontents*}
            \addbibresource{\jobname.bib}

            \begin{document}
            \cite{bertolini:1992}
            \printbibliography
            \end{document}`
            Poiché tuttavia così non posso più usare part. E usare un campo come usera,
            di cui peraltro nel manuale di biblatex non si precisa la funzione (c’è solo in qualche esempio)?
            L’altra strada capisco essere molto più complessa anche se in teoria sarebbe l’optimum,
            peccato che non si trovi in giro una guida su queste operazioni…
            m

          • #93058
            Up
            0
            Down
            ::

            samiel” post=92739La mappatura su part si puo ottenere in questo modo:
            `\documentclass[italian]{article}
            \usepackage[T1]{fontenc}
            \usepackage[utf8]{inputenc}
            \usepackage{babel}
            \usepackage[]{biblatex}
            \usepackage{filecontents}

            %\DeclareFieldFormat{part}{.#1}% physical part of a logical volume
            \DefineBibliographyStrings{italian}{%
            part = {tomo},
            }
            \DeclareFieldFormat{part}{\addcomma\space\bibstring{part}\space #1}

            \begin{filecontents*}{\jobname.bib}
            @InProceedings{bertolini:1992,
            author = “Francesco Bertolini”,
            title = “Società di trasmissione orale: mito e folclore”,
            booktitle = “Lo spazio letterario della Grecia antica”,
            editor = “G. Cambiano and L. Canfora and D. Lanza”,
            publisher = “Salerno”,
            location = “Roma”,
            year = “1992”,
            volume = “1”,
            part = “2”,
            pages = “47–75”,
            }
            \end{filecontents*}
            \addbibresource{\jobname.bib}

            \begin{document}
            \cite{bertolini:1992}
            \printbibliography
            \end{document}`
            Poiché tuttavia così non posso più usare part. E usare un campo come usera,
            di cui peraltro nel manuale di biblatex non si precisa la funzione (c’è solo in qualche esempio)?
            L’altra strada capisco essere molto più complessa anche se in teoria sarebbe l’optimum,
            peccato che non si trovi in giro una guida su queste operazioni…
            m

            A questo punto, la soluzione più veloce rimane la prima. Tutto sommato i driver non sono molti.
            Per completare il tutto si dovrebbe fare il patch anche per le macro che contengono il campo volume.

            Potrai decidere di usare il campo usera oppure il campo tome, una volta che l’avrai definito con \DeclareSourcemap come spiegato nella pagina che hai linkato sopra.

            Il campo usera non ha una funzione specifica. Serve appunto per metterci le informazioni per le quali non ci sono altri campi disponibili.

            Ciao
            Ivan

          • #93059
            samiel
            Partecipante
              Up
              0
              Down
              ::


              A me più che un aiuto qui servirebbe una badante texnica…
              Passaggio 1
              Per definire il campo, va bene una cosa come
              `\DeclareSourcemap{
              \maps[datatype=bibtex]{
              \map{
              \step[fieldsource=tome,fieldtarget=usera]
              }
              }
              }`
              Passaggio 2
              I driver sono quelli di estensione bbx per i vari formati della bibliografia?
              Devo dunque modificare tutti quelli in cui appare “volume”?
              Non posso a questo punto inserire del codice nel singolo file .tex col mio testo:
              devo creare file personalizzati da collocare nel mio albero personale di tex?
              Passaggio 3
              Le macro sono quelle contenute nel file blx-dm.def?
              Anche in questo caso, le patch dovrei applicarle a una versione personale?

              quanto lavoro… mi verrebbe voglia di inoltrare una supplica ai programmatori
              perché aggiungano anche il campo “tome”, che in fondo mi pare risponda
              a uno scenario non poi così inusuale per chi lavora coi libri…
              m

            • #93060
              Up
              0
              Down
              ::

              samiel” post=92743Passaggio 2
              I driver sono quelli di estensione bbx per i vari formati della bibliografia?
              Devo dunque modificare tutti quelli in cui appare “volume”?
              Non posso a questo punto inserire del codice nel singolo file .tex col mio testo:
              devo creare file personalizzati da collocare nel mio albero personale di tex?

              No, i driver non sono dei file, sono i tipi di elementi della bibliografia (article, book, collection, ecc.) che definisci con [tt]\DeclareBibliographyDriver[/tt]. Li puoi (ri)definire nel sorgente del tuo documento

              samiel” post=92743Passaggio 3
              Le macro sono quelle contenute nel file blx-dm.def?
              Anche in questo caso, le patch dovrei applicarle a una versione personale?

              Le macro sono i “pezzetti” che costituiscono la citazione, guarda la definizione di un driver per capire. Anche questi possono essere ridefiniti nel tuo sorgente.

              Questa almeno è la mia comprensione del funzionamento di biblatex 🙂

              samiel” post=92743quanto lavoro… mi verrebbe voglia di inoltrare una supplica ai programmatori
              perché aggiungano anche il campo “tome”, che in fondo mi pare risponda
              a uno scenario non poi così inusuale per chi lavora coi libri…
              m

              Se vuoi provarci: https://github.com/plk/biblatex/issues/new Comunque mi sembra di capire che biblatex sia moo…oolto più facile da personalizzare rispetto a bibtex, non puoi lamentarti troppo 😉

            • #93061
              OldClaudio
              Partecipante
                Up
                0
                Down
                ::



                @Elrond
                , non puoi confrontare biblatex con bibtex, tant’è che se usi biblatex puoi anche usare bibtex per creare la bibliografia in formato .bbl.

                Bibtex è un programma esterno,compilato a prtire da un linguaggio che potrebbe essere Pascla come C++ o qualsiasi altra cosa; è un eesguibile, chiamato talvolta anche applicazione. biblatex è un insieme di macro scritto in linguaggio TeX/LaTeX, che serve a tante cose, ma essenzialmente serve per eliminare i file .bst che servono a bibtex per formare i file .bbl secondo vari stili.

                In realtà creare nuovi stili er l’uso con bibtex, nuovi file .bst, non è una cosa tremendamente difficile, basta usare un sorgente tex si chiama makebst.tex (/usr/local/texlive/2013/texmf-dist/tex/latex/custom-bib/makebst.tex); è un file interattivo che ti fa un mucchio di domande a cui devi dare risposte scelte in una rosa di risposte possibili, e quando hai finito ti produce il file .bst conforme alle risposte che hai dato. La difficoltà consiste nel fatto che la domande sono un po’ criptiche e non sono indipendenti l’una dall’altra, per cui non puoi tornare indiero se dopo ti accorgi di avere dato al risposta sbagliata ad una domanda precedente. Mettere le mani direttamente su file .bst è difficilissimo, perché sono scritti in un linguaggio con notazione polacca non documentato da nessuna parte (io per lo meno non ho trovato nessuna documentazione); inoltre hanno funzionalità limitate.

                biblatex in teoria dovrebbe essere più user friendly per che è abituato a scrivere macro in linguaggio TeX/LaTeX, certamente lo si può convincere a fare molto di più di quello che si può fare con in file .bst; di fatto lo constatiamo tutti; biblatex, come modulo di estensione di LaTeX ha compiuto in “quantum leap”, un salto in avanti incommensurabile rispetto ai vecchi file di stile bibliografico. Tuttavia a giudicare dalle domande che compaiono qui sul forum presente non pochi problemi; o è di uso difficile (ma come facevano gli umanisti prima che ci fosse biblatex) oppure le maggiori funzionalità hanno scatenato appetiti furiosi fra gli umanisti; essi hanno sicuramente delle esigenze particolari rispetto a quelle dei “viles mechanici” (vilis: (in senso figurato) disprezzato, spregevole, di scarso valore, non degno di stima o considerazione), ma talvolta ho il sospetto che esagerino un poco.

                Questa non è una critica nei confronti di @samiel: i tomi esistono anche per quelli che si occupano di scienze dure: l’ultima edizione della fisica del Perucca è in due volumi di cui il secondo è diviso in due tomi; siccome ogni libro è di può di 500 pagine, è evidente che indirizzare il lettore di un riferimento al Perucca è molto più preciso citando il tomo, risptto che a non citarlo.

                Ma un vile meccanico probabilmente risolverebbe il problema di @samiel citando i volumi in questo modo: volume 1, volume 2.1 volume 2.2; molto meno elegante rispetto a “volume II, tomo secondo”, ma molto efficace.

              • #93062
                Up
                0
                Down
                ::

                OldClaudio” post=92745 @Elrond, non puoi confrontare biblatex con bibtex, tant’è che se usi biblatex puoi anche usare bibtex per creare la bibliografia in formato .bbl.

                Bibtex è un programma esterno,compilato a prtire da un linguaggio che potrebbe essere Pascla come C++ o qualsiasi altra cosa; è un eesguibile, chiamato talvolta anche applicazione. biblatex è un insieme di macro scritto in linguaggio TeX/LaTeX, che serve a tante cose, ma essenzialmente serve per eliminare i file .bst che servono a bibtex per formare i file .bbl secondo vari stili.

                Puoi dirmi che ho usato impropriamente il termine “bibtex”, ma chiaramente non mi riferivo al programma eseguibile [tt]bibtex[/tt] ma agli stili bibliografici che si usano solo con [tt]bibtex[/tt] (niente [tt]biblatex[/tt] qui). I file degli stili con estensione [tt].bst[/tt] si trovano sotto la cartella [tt]texmf-dist/bibtex/bst[/tt], non ho trovato un termine migliore per indicarli collettivamente.

                OldClaudio” post=92745In realtà creare nuovi stili er l’uso con bibtex, nuovi file .bst, non è una cosa tremendamente difficile, basta usare un sorgente tex si chiama makebst.tex (/usr/local/texlive/2013/texmf-dist/tex/latex/custom-bib/makebst.tex); è un file interattivo che ti fa un mucchio di domande a cui devi dare risposte scelte in una rosa di risposte possibili, e quando hai finito ti produce il file .bst conforme alle risposte che hai dato. La difficoltà consiste nel fatto che la domande sono un po’ criptiche e non sono indipendenti l’una dall’altra, per cui non puoi tornare indiero se dopo ti accorgi di avere dato al risposta sbagliata ad una domanda precedente. Mettere le mani direttamente su file .bst è difficilissimo, perché sono scritti in un linguaggio con notazione polacca non documentato da nessuna parte (io per lo meno non ho trovato nessuna documentazione); inoltre hanno funzionalità limitate.

                Sono a conoscenza della possibilità di creare un nuovo stile con
                `tex makebst`
                ed è proprio a questo che mi riferivo: non mi sembra il massimo della flessibilità, se vuoi uscire da quel tracciato devi per forza mettere mano al file di stile generato e hai riconosciuto la difficoltà della sua sintassi. Se vuoi solo apportare delle piccole modifiche a uno stile preesistente mi risulta (ma non avendo mai approfondito la questione potrei sbagliarmi e mi piacerebbe essere corretto) che devi di nuovo mettere mano all’intero codice di quello stile ([tt]biblatex[/tt] invece permette con delle relativamente semplici istruzioni all’interno del sorgente stesso del documento di modificare il comportamento) e poiché la LPPL non permette di distribuire una versione modificata di un pacchetto di cui non si è il manutentore (non semplicemente di modificare il file come spesso viene sbrigativamente, ma sensatamente, detto), la cosa più conveniente da fare è creare una copia del file di stile originario e cambiare poche delle complessive 1000+ righe di codice, come è stato fatto per tradurre in italiano lo stile natbib. È per tutti questi motivi che ho detto che con [tt]biblatex[/tt] è più facile personalizzare uno stile bibliografico rispetto a [tt]bibtex[/tt], il confronto mi sembra ci stia tutto.

              • #93063
                OldClaudio
                Partecipante
                  Up
                  0
                  Down
                  ::


                  Non c’è dubbio che biblatex è più comodo; per essere più precisi direi “meno scomodo”.

                  Con i vecchi file di stile .bst qualche piccola correzione direttamante sui codici si può fare e l’ho fatta, e non serve cambiare nulla, salvo le correzioni da apportare, ma è sicuramante una pena; prima di scoprire makebst.tex mi comportavo così e di modifiche ne ho fatte diverse, sempre ricorrendo ad esclamazionei “profane”, ma comunque ci riuscivo entro i piccoli milti che non interferivano con la cotruzione sitattica di quel linguaggio assurdo.

                  Ma non trovo che biblatex sia orose e fiori. Certo meno scomodo dei vecchi file di stile.

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

              Go to top