Usare campo bibliografico non standard con biblatex

  • Questo topic ha 1 risposta, 1 partecipante ed è stato aggiornato l'ultima volta 13 anni fa da Elrond.
  • Creatore
    Topic
  • #88246
    Up
    0
    Down
    ::


    Mi era sembrato di capire che per usare un nuovo campo bibliografico con biblatex fosse sufficiente aggiungere un [tt]\printfield{nuovocampo}[/tt] (specificando, se necessario, un formato particolare con [tt]\DeclareFieldFormat{nuovocampo}{…}[/tt]) all’interno di un driver o di una macro utilizzata in un driver. È corretto? Perché non mi sembra avere effetto, il campo non è mai letto.

    Disperato a causa di questo fallimento, ho trovato questo messaggio che sostanzialmente suggerisce la stessa cosa, riporto qui per comodità il codice:
    `\documentclass{article}

    \usepackage{filecontents}
    \begin{filecontents}{papers.bib}

    @Article{Mattaj1993,
    author = {I W Mattaj},
    title = {RNA recognition: a family matter?},
    journal = {Cell},
    year = {1993},
    volume = {73},
    number = {5},
    pages = {837-40},
    pmid = {8500177},
    }
    \end{filecontents}

    \usepackage[style=authoryear,hyperref=true]{biblatex}
    \bibliography{papers}
    \newbibmacro*{pubmed}{%
    \printfield[pmidformat]{pmid}%
    }
    \DeclareFieldFormat{pmidformat}{%
    PubMed\addcolon\space
    \ifhyperref
    {\href{http://www.ncbi.nlm.nih.gov/pubmed/#1}{\nolinkurl{#1}}}
    {\nolinkurl{#1}}}
    \DeclareBibliographyDriver{article}{%
    \usebibmacro{author/editor}%
    \setunit{\labelnamepunct}\newblock
    \usebibmacro{title}%
    \newunit\newblock
    \usebibmacro{journal+issuetitle}%
    \setunit{\bibpagespunct}%
    \printfield{pages}%
    \newunit\newblock
    \usebibmacro{pubmed}%
    \usebibmacro{finentry}}
    \renewcommand*{\finentrypunct}{}

    \usepackage{hyperref}

    \begin{document}
    \nocite{*}
    \printbibliography
    \end{document}`
    Lui dice che funziona, ma io ottengo (uso TeX Live 2013 aggiornata, biber 1.7, biblatex 2.7a)

    References
    Mattaj, I W (1993). “RNA recognition: a family matter?” Cell 73.5, pp. 837–40

    Il campo [tt]pmid[/tt] è proprio ignorato. Mi sta sfuggendo qualcosa?

    Domanda stilistica bonus: per una modifica così piccola allo stile bibliografico, va bene mettere il codice all’interno dello stesso sorgente LaTeX senza creare un nuovo apposito stile?

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


      Ho risolto con questa risposta su TeX.StackExchange: http://tex.stackexchange.com/a/65403/31416. Il passaggio che mi mancava era il seguente: per prima cosa bisogna mappare il nuovo campo a uno dei campi personalizzati ([tt]usera[/tt], [tt]userb[/tt], …., e gli altri campi elencati nel paragrafo 2.2.4 (Custom Fields) del manuale di biblatex usando qualcosa come
      `\DeclareSourcemap{
      \maps[datatype=bibtex]{
      \map{
      \step[fieldsource=NUOVOCAMPO,fieldtarget=usera]
      }
      }
      }`
      La sintassi del comando [tt]\DeclareSourcemap[/tt] è descritta nel paragrafo 4.5.2 (Dynamic Modification of Data) del manuale di biblatex. Per il resto basta definire il formato del campo [tt]usera[/tt] (o qualsiasi altro campo scelto come corrispondente del [tt]NUOVOCAMPO[/tt]) con il comando [tt]\DeclareFieldFormat{usera}{…}[/tt] se il formato sarà diverso dal semplice [tt]#1[/tt] e infine stampare il campo [tt]usera[/tt] con [tt]\printfield{usera}[/tt] in un driver o in una macro utilizzata nei driver. Nota: [tt]\DeclareSourcemap[/tt] richiede biber come backend.

      Esempio precedente corretto e funzionante:
      `\documentclass{article}

      \usepackage{filecontents}
      \begin{filecontents}{papers.bib}

      @Article{Mattaj1993,
      author = {I W Mattaj},
      title = {RNA recognition: a family matter?},
      journal = {Cell},
      year = {1993},
      volume = {73},
      number = {5},
      pages = {837-40},
      pmid = {8500177},
      }
      \end{filecontents}

      \usepackage[style=authoryear,hyperref=true,backend=biber]{biblatex}
      \bibliography{papers}

      \DeclareSourcemap{
      \maps[datatype=bibtex]{
      \map{
      \step[fieldsource=pmid,fieldtarget=usera]
      }
      }
      }

      \DeclareFieldFormat{usera}{PubMed\addcolon\space
      \ifhyperref
      {\href{http://www.ncbi.nlm.nih.gov/pubmed/#1}{\nolinkurl{#1}}}
      {\nolinkurl{#1}}}

      \DeclareBibliographyDriver{article}{%
      \usebibmacro{author/editor}%
      \setunit{\labelnamepunct}\newblock
      \usebibmacro{title}%
      \newunit\newblock
      \usebibmacro{journal+issuetitle}%
      \setunit{\bibpagespunct}%
      \printfield{pages}%
      \newunit\newblock
      \printfield{usera}%
      \usebibmacro{finentry}}
      \renewcommand*{\finentrypunct}{}

      \usepackage{hyperref}

      \begin{document}
      \nocite{*}
      \printbibliography
      \end{document}`

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

Go to top