Volevo dire che, a fronte di risposte di questo tipo, si può restare solo senza parole.
Non era poi così difficile. 🙂
Vediamo qual è l’idea. I file .bib sono strutturati secondo lo schema
`@entry{citekey,
field1={…},
field2={…},
…
}`
e questo ne fa un ottimo candidato per “keyval”. L’unico problema è estrarre la chiave di citazione. Vediamo con il tuo esempio del “Nome della rosa”.
Definiamo \book in modo che raccolga tutta l’elemento della bibliografia come argomento e lo passiamo a \extractkey. Questo comando ha due argomenti delimitati, il primo termina alla prima virgola, il secondo è tutto il resto. Definiamo allora \currentry come il primo argomento, ci servirà in seguito, e passiamo il resto al comando \setkeys di keyval. Questo legge tutte le chiavi definite nello spazio “reuse” e che sono tutte dello stesso tipo: nel caso di “title=Il nome della rosa” il risultato è di eseguire
`\global\@namedef{\currentry @title}{Il nome della rosa}`
che equivale, nel nostro caso, a
`\global\def\eco2005nome@title{Il nome della rosa}`
Lo stesso viene eseguito su tutti i campi.
Che ci resta da fare? Intanto la macro per usare questi dati; \usebibdata prende due argomenti: la chiave di citazione e il tipo di dato. A partire da questi costruisce il comando da eseguire; per esempio \usebibdata{eco2005nome}{title} esegue
`\eco2005nome@title`
che appunto stampa “Il nome della rosa”.
Altra cosa da fare: nel file bib c’è scritto @book e non \book. Poco male: leggiamo il file in modo che \ sia un carattere normale e al suo posto si usi @:
`\newcommand\bibinput[1]{%
\begingroup\catcode`\@=0 \input{#1.bib}\endgroup}`
Quando si esegue \bibinput{xyz}, prima di leggere il file si dice a TeX che i comandi sono introdotti da @, quindi @book è come se fosse \book. Il tutto in un gruppo, quindi alla fine della lettura il carattere @ ritornerà al suo stato precedente. Per questo le definizioni dei vari comandi sono globali (\global\@namedef), altrimenti alla fine della lettura li perderemmo.
Limitazioni. Non si può usare @ in uno dei campi o nella chiave di citazione. I campi vanno delimitati con le graffe (o con niente), non con le doppie virgolette come sarebbe possibile nella sintassi di BibTeX.
Ricordarsi di definire tutti i campi e i tipi di documento necessari. Per gli url c’è qualche problemino, ci penso.
Ciao
Enrico