Re: Formattazione autore con @incollection (biblatex)

#99004
Up
0
Down
::


Ecco un altro codice minimale che chiarifica la questione:
`
\begin{filecontents}{\jobname.bib}
@inbook{ kuhn:1980,
author = “Thomas Kuhn”,
title = “Logica della scoperta o psicologia della ricerca?”,
crossref = “lakatos:1980”,
pages = “69-93”,
}

@book{ kuhn:1981,
author = “Thomas Kuhn”,
title = “La rivoluzione copernicana”,
publisher = “Einaudi”,
location = “Torino”,
year = “1981”,
edition = “3”,
}

@book{ kuhn:1982,
author = “Thomas Kuhn”,
title = “La struttura delle rivoluzioni scientifiche”,
publisher = “Einaudi”,
location = “Torino”,
year = “1978”,
edition = “4”,
}

@book{ kuhn:1985,
author = “Thomas Kuhn”,
title = “La tensione essenziale”,
publisher = “Einaudi”,
location = “Torino”,
year = “1985”,
}

@book{ kuhn:2000,
author = “Thomas Kuhn”,
title = “Dogma contro critica”,
publisher = “Cortina”,
location = “Milano”,
year = “2000”,
}

@book{ kuhn:2008,
author = “Thomas Kuhn”,
title = “Le rivoluzioni scientifiche”,
publisher = “Il Mulino”,
location = “Bologna”,
year = “2008”,
}

@book{ lombardi:1991,
author = “Tiziana Lombardi”,
title = “Thomas Kuhn e la ricerca storiografica relativa alla
rivoluzione copernicana”,
publisher = “Gruppo Editoriale Internazionale”,
location = “Roma”,
year = “1995”,
}

@book{ lakatos:1980,
title = “Critica e crescita della conoscenza”,
editor = “Imre Lakatos and Alan Musgrave”,
publisher = “Feltrinelli”,
location = “Milano”,
year = “1980”,
edition = “3”,
}

@inbook{ masterman:1980,
author = “Mary Masterman”,
title = “La natura di un paradigma”,
crossref = “lakatos:1980”,
pages = “129-163”,
}

\end{filecontents}
\documentclass[a4paper,11pt]{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}

\usepackage{csquotes}
\usepackage[
backend=biber,
style=verbose-trad2,%
sorting=nyt]
{biblatex}

\addbibresource{\jobname.bib}

\makeatletter

\DeclareCiteCommand{\bbx@crossref@inbook}%
{}%
{\usedriver
{\DeclareNameAlias{sortname}{default}}%
{\thefield{entrytype}}}%
{}%
{}%

\DeclareBibliographyDriver{inbook}{%
\usebibmacro{bibindex}%
\usebibmacro{begentry}%
\usebibmacro{author/translator+others}%
\setunit{\labelnamepunct}\newblock
\usebibmacro{title}%
\newunit
\printlist{language}%
\newunit\newblock
\usebibmacro{byauthor}%
\newunit\newblock
\usebibmacro{in:}%
\iffieldundef{crossref}
{\usebibmacro{inbook:full}}%
{\bbx@crossref@inbook{\thefield{crossref}}}%
}

\newbibmacro*{inbook:full}{
\usebibmacro{bybookauthor}%
\newunit\newblock
\usebibmacro{maintitle+booktitle}%
\newunit\newblock
\usebibmacro{byeditor+others}%
\newunit\newblock
\printfield{edition}%
\newunit
\iffieldundef{maintitle}
{\printfield{volume}%
\printfield{part}}
{}%
\newunit
\printfield{volumes}%
\newunit\newblock
\usebibmacro{series+number}%
\newunit\newblock
\printfield{note}%
\newunit\newblock
\usebibmacro{publisher+location+date}%
\newunit\newblock
\usebibmacro{chapter+pages}%
\newunit\newblock
\iftoggle{bbx:isbn}
{\printfield{isbn}}
{}%
\newunit\newblock
\usebibmacro{doi+eprint+url}%
\newunit\newblock
\usebibmacro{addendum+pubstate}%
\setunit{\bibpagerefpunct}\newblock
\usebibmacro{pageref}%
\newunit\newblock
\iftoggle{bbx:related}
{\usebibmacro{related:init}%
\usebibmacro{related}}
{}%
\usebibmacro{finentry}}

\makeatother

\nocite{*}

\begin{document}

\printbibliography

\end{document}
`
Come si può vedere, lo stile caricato è verbose-trad2 che, per quanto riguarda la bibliografia coincide con lo stile authortitle. verbose-trad2 è quello su cui si basa philosophy-verbose. È stato ridefinito il driver @inbook in questo modo. Se è presente il campo crossref, la voce @inbook, subito dopo la macro “in:”, che è quella che stampa, per l’appunto, la stringa “in:”, esegue il comando \bbx@crossref@inbook il quale, a sua volta, non fa altro che stampare la voce completa attraverso il comando
\usedriver{…}{\thefield{entrytype}}. Questi codici sono più semplici di quelli contenuti in philosophy, ma sono sufficienti per capire che non si tratta di un vero e proprio baco degli stili, come anch’io avevo inizialmente pensato, ma di un comportamento coerente. Coerente ma non gradito, nemmeno da me 🙁 Quindi possiamo anche chiamarlo baco 🙄

La voce

— “Logica della scoperta o psicologia della ricerca?” In: Imre Lakatos and Alan Musgrave, eds. Critica e crescita della conoscenza. 3rd ed. Milano: Feltrinelli, 1980.

di fatto, contiene al suo interno la voce relativa a Imre Lakatos and Alan Musgrave, che viene citata internamente attraverso \bbx@crossref@inbook. Quindi la successiva voce, ovvero

Kuhn, Thomas. La rivoluzione copernicana. 3rd ed. Torino: Einaudi, 1981

come ultima citazione vede proprio quella del testo curato da Imre Lakatos and Alan Musgrave. Se non ci fosse crossref, quest’ultima voce non sarebbe citata, anche se presente, e il problema non si porrebbe.
Ora, la macro che stampa il nome dell’autore, esegue un condizionale che, semplificando, funziona così. Se i campi fullhash (che contiene i nomi della voce corrente) e \bbx@lasthash (che contiene i nomi della voce precedente) sono uguali allora stampa un trattino, altrimenti stampa la lista dei nomi (nell’esempio, il nome completo di Kuhn). Nel nostro caso, l’ultima lista di nomi è appunto Imre Lakatos and Alan Musgrave, che è diversa da quella della voce corrente (Thomas Kuhn) e quindi il nome viene ripetuto.

Ho provato in tutti i modi a cambiare il contenuto di \bbx@lasthash ma senza successo.

Che si tratti di un problema che va risolto è evidente da questa considerazione. Se scriviamo due voci @inbook una delle quali usa il campo crossref e l’altra no, ci accorgiamo che il problema c’è solo nel primo caso, pur essendo le due voci identiche nell’output. È solo diverso il modo in cui sono generate. Per rendersene conto è sufficiente compilare l’esempio sopra modificando la voce
`@inbook{ kuhn:1980,
author = “Thomas Kuhn”,
title = “Logica della scoperta o psicologia della ricerca?”,
crossref = “lakatos:1980”,
pages = “69-93”,
}
`
in questa
`@inbook{ kuhn:1980,
author = “Thomas Kuhn”,
title = “Logica della scoperta o psicologia della ricerca?”,
booktitle = “Critica e crescita della conoscenza”,
editor = “Imre Lakatos and Alan Musgrave”,
publisher = “Feltrinelli”,
location = “Milano”,
year = “1980”,
edition = “3”,
pages = “69-93”,
}`

Ciao
Ivan

Go to top