Ordine di citazione automatico usando thebibliography

  • Creatore
    Topic
  • #40112
    Up
    0
    Down
    ::


    Ciao a tutti,

    stavo pensando di cominciare un piccolo lavoretto per l’ordinamento automatico,
    secondo l’ordine di citazione, delle voci della bibliografia nel caso in cui si usi thebibliography.

    L’unico modo banale per riuscire nell’intento credo sia quello di scrivere un programmino
    che riordini fisicamente le voci nel file .tex seguendo l’ordine di citazione del file tex (eventualmente scorrendo sequenzialmente nei vari file inclusi con input o con include).

    Avevo pensato a cose più complicate, che non prevedessero un programma esterno, giocando con i bibcite del file .aux e una ridefinizione dell’ambiente thebibliography.
    Credo però che questa seconda strada sia improponibile per tutta una serie di motivi di portabilità del codice e soprattutto considerando le mie conoscenze di TeX e il mio tempo libero!

    Che ne pensate? Avete altre idee?
    Oppure conoscete già un programma che faccia questa cosa?

    Ciao ciao.
    Fra

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

      Ciao a tutti,

      stavo pensando di cominciare un piccolo lavoretto per l’ordinamento automatico,
      secondo l’ordine di citazione, delle voci della bibliografia nel caso in cui si usi thebibliography.

      L’unico modo banale per riuscire nell’intento credo sia quello di scrivere un programmino
      che riordini fisicamente le voci nel file .tex seguendo l’ordine di citazione del file tex (eventualmente scorrendo sequenzialmente nei vari file inclusi con input o con include).

      Avevo pensato a cose più complicate, che non prevedessero un programma esterno, giocando con i bibcite del file .aux e una ridefinizione dell’ambiente thebibliography.
      Credo però che questa seconda strada sia improponibile per tutta una serie di motivi di portabilità del codice e soprattutto considerando le mie conoscenze di TeX e il mio tempo libero!

      Che ne pensate? Avete altre idee?
      Oppure conoscete già un programma che faccia questa cosa?

      Lo fa lo stile unsrt di BibTeX. Ritengo che questo modo di organizzare la bibliografia sia il peggiore che si possa concepire.

      Ciao
      Enrico

    • #40114
      Up
      0
      Down
      ::

      Lo fa lo stile unsrt di BibTeX. Ritengo che questo modo di organizzare la bibliografia sia il peggiore che si possa concepire.

      Ciao Enrico,

      ma intendi che la mia idea è la peggiore possibile (che ci può stare :D) oppure il classico stile numerico in ordine di citazione adottatto da migliaia di riviste e libri? (vedi appunto unsrt, nature e altre centinaia…)

      Per tornare al problema, non che io usi thebibliography molto spesso, anzi,
      ma vorrei dare una mano a quanti usano LaTeX una volta sola nella vita per scrivere la tesi oppure sporadicamente per scrivere qualche articolo.

      Molti studenti dell’università, alcuni anche miei, scrivono a fatica con LaTeX. Poi quando gli dici cosa bisogna fare per gestire una bibliografia in maniera seria giustamente molti si chiedono perché tanta fatica se poi non useranno mai più LaTeX. Vorrebbero usare solo thebibliography, ma sorge il problema dell’ordinamento.

      Ed è qui che mi volevo inseriro io con un modo banale per ordinare la bibliografia senza ricorrere a BibTeX.

      Ciao ciao.
      Fra

    • #40115
      Up
      0
      Down
      ::

      Lo fa lo stile unsrt di BibTeX. Ritengo che questo modo di organizzare la bibliografia sia il peggiore che si possa concepire.

      Ciao Enrico,

      ma intendi che la mia idea è la peggiore possibile (che ci può stare :D) oppure il classico stile numerico in ordine di citazione adottatto da migliaia di riviste e libri? (vedi appunto unsrt, nature e altre centinaia…)

      Per tornare al problema, non che io usi thebibliography molto spesso, anzi,
      ma vorrei dare una mano a quanti usano LaTeX una volta sola nella vita per scrivere la tesi oppure sporadicamente per scrivere qualche articolo.

      Molti studenti dell’università, alcuni anche miei, scrivono a fatica con LaTeX. Poi quando gli dici cosa bisogna fare per gestire una bibliografia in maniera seria giustamente molti si chiedono perché tanta fatica se poi non useranno mai più LaTeX. Vorrebbero usare solo thebibliography, ma sorge il problema dell’ordinamento.

      Ed è qui che mi volevo inseriro io con un modo banale per ordinare la bibliografia senza ricorrere a BibTeX.

      È l’idea dell’ordinamento in ordine di citazione che trovo balzana. Se la bibliografia ha una cinquantina di elementi, come si fa a trovare quello giusto? Spuntando via via che si legge? Per favore! 🙂

      Può darsi che non riesca a capire le motivazioni profonde di questa procedura. ❓

      Ciao
      Enrico

    • #40116
      Up
      0
      Down
      ::


      No Enrico, mi sono spiegato male io!

      La trovi con il numero, come al solito! Era sottinteso che i numeri ci fossero,
      come in una normale bibliografia di un normalissimo libro o articolo scientifico 😀

      Per togliere ogni dubbio. Attualmente thebibliography fa questo:
      `Pippo [3] riporta che Francesco non si sa spiegare. E in effetti anche Francesco [1]
      è d'accordo. Francesco ha promesso però di andare a fare un corso specializzato
      in una scuola molto famosa [2].

      Riferimenti
      [1] Francesco. Comunicazione alla stampa del 16 Agosto 2005.
      [2] Sapienza — Università di Roma. Scienze della Comunicazione.
      [3] Pippo. Intervista del 14 Settembre 2007.`

      Dopo che il mio programmino sarà a punto, basterà farlo girare sul file tex, rimetterà in ordine la bibliografia e compilando due volte otterrò il seguente risultato:
      `Pippo [1] riporta che Francesco non si sa spiegare. E in effetti anche Francesco [2]
      è d'accordo. Francesco ha promesso però di andare a fare un corso specializzato
      in una scuola molto famosa [3].

      Riferimenti
      [1] Pippo. Intervista del 14 Settembre 2007.
      [2] Francesco. Comunicazione alla stampa del 16 Agosto 2005.
      [3] Sapienza — Università di Roma. Scienze della Comunicazione.
      `

      Ho appena cominciato. Ho pensato di farlo in Python, se pensate che stia facendo uno stupidaggine fermatemi in tempo 😀

      Ciao ciao.
      Fra

    • #40117
      Up
      0
      Down
      ::

      No Enrico, mi sono spiegato male io!

      La trovi con il numero, come al solito! Era sottinteso che i numeri ci fossero,
      come in una normale bibliografia di un normalissimo libro o articolo scientifico 😀

      Per togliere ogni dubbio. Attualmente thebibliography fa questo:
      `Pippo [3] riporta che Francesco non si sa spiegare. E in effetti anche Francesco [1]
      è d'accordo. Francesco ha promesso però di andare a fare un corso specializzato
      in una scuola molto famosa [2].

      Riferimenti
      [1] Francesco. Comunicazione alla stampa del 16 Agosto 2005.
      [2] Sapienza — Università di Roma. Scienze della Comunicazione.
      [3] Pippo. Intervista del 14 Settembre 2007.`

      Dopo che il mio programmino sarà a punto, basterà farlo girare sul file tex, rimetterà in ordine la bibliografia e compilando due volte otterrò il seguente risultato:
      `Pippo [1] riporta che Francesco non si sa spiegare. E in effetti anche Francesco [2]
      è d'accordo. Francesco ha promesso però di andare a fare un corso specializzato
      in una scuola molto famosa [3].

      Riferimenti
      [1] Pippo. Intervista del 14 Settembre 2007.
      [2] Francesco. Comunicazione alla stampa del 16 Agosto 2005.
      [3] Sapienza — Università di Roma. Scienze della Comunicazione.
      `

      Ho appena cominciato. Ho pensato di farlo in Python, se pensate che stia facendo uno stupidaggine fermatemi in tempo 😀

      Che ci sia il numero è il minimo. Ma come fa uno a guardare se c’è una certa citazione di cui conosce il primo autore? Se le citazioni sono una ventina (abbondiamo) non è un problema. Ma se sono duecento?

      L’ordine alfabetico per primo autore è l’unica strada che io riesco a concepire. Spiegami il senso della lista in ordine di citazione.

      Poi, se vuoi imparare Python, fa’ pure. 🙂 Meglio però se lo scrivi in Perl o qualcosa di più diffuso su Windoze. Ma a quel punto non è più semplice BibTeX?

      Ciao
      Enrico

    • #40118
      Up
      0
      Down
      ::


      Ah ho capito quindi tu sei veramente contro l’ordine di citazione.
      Il senso. . . be’ a dir la verità non lo so! 😀
      Anch’io non sono un fan dell’ordine di citazione però è richiesto praticamente ovunque,
      pertanto pensavo di partire da quello.

      In ogni caso l’idea è di fare due eseguibili. Il primo, non so, bibnumord che ordini
      thebibliography in ordine di citazione. L’altro, più banale, e forse inutile, bibalpord che
      semplicemente ordini alfabeticamente la bibliografia secondo il cognome del primo autore.
      Ovviamente in questo secondo caso è consigliato l’uso di natbib.

      Con python sono già un po’ pratico, era per quello che l’ho scelto. Ora valuterò per bene. Comunque vorrei fare degli eseguibili per le varie piattaforme. Quindi l’utente finale non deve avere installato nulla al contrario di quanto accade con pdfcrop per esempio.

      Ciao ciao.
      Fra

    • #40119
      Up
      0
      Down
      ::

      Ah ho capito quindi tu sei veramente contro l’ordine di citazione.
      Il senso. . . be’ a dir la verità non lo so! 😀
      Anch’io non sono un fan dell’ordine di citazione però è richiesto praticamente ovunque,
      pertanto pensavo di partire da quello.

      [OT]
      Uno si domanda: perché l’ordine della bibliografia per citazione? E cerca qualche motivazione che abbia a che fare con qualche logica, magari misteriosa. ❓ Invece la spiegazione è semplice; quando scrivi il tuo articolo con un word processor e devi citare un lavoro, esegui i seguenti passi:

      – se il lavoro compare già nella lista delle citazioni, ne guardi il numero e lo scrivi al punto del documento a cui sei arrivato;
      – se il lavoro non compare, lo aggiungi alla lista delle citazioni e gli assegni il numero.

      Ecco la spiegazione dell’arcano mistero. ❗ Che poi il lettore non riesca a trovare nulla nell’elenco delle citazioni (e lavori di biologia che ho visto hanno più citazioni che testo dell’articolo), non ha alcuna importanza. Si noti che perfino con Word si possono organizzare i riferimenti incrociati in modo automatico. 😉

      La richiesta della bibliografia in ordine di citazione è solo per pigrizia. 🙁 La cosa che più mi sconvolge è che questo ordine è prescritto dalla IEEE per le proprie riviste! E si definiscono (cito dalla pagina iniziale di http://www.ieee.org) “The world’s leading professional association for the advancement of technology”. 😯
      [/OT]

      Ciao
      Enrico

    • #40120
      lorenzo.pantieri
      Partecipante
        Up
        0
        Down
        ::

        Ma a quel punto non è più semplice BibTeX?

        Faccio mia questa domanda di Enrico: non vedo l’utilità di quello che vuoi fare…

        Ciao,
        L.

      • #40121
        Up
        0
        Down
        ::


        Anche con Biblatex è possibile produrre la bibliogafia secondo l’ordine di citazione. Basta usare l’opzione sorting=none

        Ciao
        Ivan

      • #40122
        Up
        0
        Down
        ::


        [OT]
        Per esperienza nella scrittura di articoli con Word, l’ordine di citazione è il più scomodo in assoluto (viva bibtex!). Ad ogni aggiunta, inserimento o spostamento di una citazione bisogna rinumerare tutto. La situazione è solo un po’ alleggerita dall’uso dei bookmark, che però non sono il massimo della semplicità d’uso e non tutti i coautori sono abituati a usarli.

        L’unico vantaggio che ci vedo è che la regola è semplice. Mi capita spesso di citare standard privi di autore. Come li ordino? In base all’ente di standardizzazione? In base al titolo? Boh.

        Poi c’è un altro (s)vantaggio, la possibilità di scrivere frasi orribili del tipo “..come dice l’ampia letteratura [1-50]…” che vogliono dire: “mi hanno detto di aggiungere un po’ di letteratura, quindi metto un paio di parole chiave in google scholar e ti scodello i primi 50 risultati”
        [OT]

        EDIT: aggiungo che trovo più facile scrivere la bibliografia in bibtex che non nell’ambiente thebibliography. Se usi thebibliography devi assumerti la responsabilità di formattare tutte le informazioni correttamente e in modo consistente. Senza contare che i principali motori di ricerca (scholar, ieeexplore, acm portal ecc…) restituiscono anche il record bibtex già pronto, anche se non sempre 100% accurato.

        Saluti,
        Giacomo

      • #40123
        Up
        0
        Down
        ::


        Buongiorno ragazzi,

        eh già, ha ragione Enrico. Sebbene forse sia dovuto solo alla prigrizia/tradizione, credo di non aver mai letto un articolo o libro scientifico che usasse altri ordinameti se non quello classico di citazione.

        Oramai questa cosa è nel corredo genetico di tutti. Ricordo un episiodo che mi capitò tanti anni fa. Consegnai una tesina con l’ordinamento alfabetico e i riferimenti numerici. Il prof la guardò inorridito e mi disse “Che fai, tu cominci a contare da 13?!” (mi pare che la prima citazione fosse la 13).

        Per tornare invece all’utilità di ciò che voglio fare, be’… a volte si lavora tutti insieme, spesso con gente che LaTeX proprio non lo vuole usare o non ha né voglia né tempo di imparare a usarlo. Quando cominci a dire che per una ventina di riferimenti devono fare un file .bib (soprattutto scrivendo per bene i vari and ecc…) poi devono compilare con bibtex ecc…si scocciano a morte e dicono (secondo me a ragione) “ma come è possibile?! Tu che mi hai sempre detto della potenza di LaTeX e ora per ordinare una bibliografia devo fare tutte queste cose?”
        E poi? Se non esiste lo stile per quella rivista? Vagli a spiegare che possono usare makebst, oppure possono modificare a mano la bibliografia prendendo i file ausiliari prodotti da BibTeX.

        Senza contare poi gli studenti che usano LaTeX e vedono BibTeX come uno step di conoscenza ulteriore. (Anch’io usai solo thebibliography per la mia tesi). Soprattutto quelli
        che lo usano una volta sola nella vita. Non hanno né tempo né voglia di fare tutto ciò.
        Però a volte arriva il prof pignolo che gli dice “Che fai cominci da 13?” e così si ritrovano
        a riordinare da capo tutto quando a mano.

        Purtroppo è vero anche che quello che vorrei fare io non è il massimo, è sempre un programma esterno. Mi piacerebbe tanto che questa cosa potesse essere fatta
        dal compilatore LaTeX con delle semplici opzioni da passare a thebibliography.
        Ma purtroppo credo sia praticamente impossibile. 🙁

        Scusatemi per la lunghezza del post!

        Grazie a tutti.
        Ciao ciao.
        Fra

      • #40124
        Up
        0
        Down
        ::

        Ah ho capito quindi tu sei veramente contro l’ordine di citazione.
        Il senso. . . be’ a dir la verità non lo so! 😀
        Anch’io non sono un fan dell’ordine di citazione però è richiesto praticamente ovunque,
        pertanto pensavo di partire da quello.

        In ogni caso l’idea è di fare due eseguibili. Il primo, non so, bibnumord che ordini
        thebibliography in ordine di citazione. L’altro, più banale, e forse inutile, bibalpord che
        semplicemente ordini alfabeticamente la bibliografia secondo il cognome del primo autore.
        Ovviamente in questo secondo caso è consigliato l’uso di natbib.

        Con python sono già un po’ pratico, era per quello che l’ho scelto. Ora valuterò per bene. Comunque vorrei fare degli eseguibili per le varie piattaforme. Quindi l’utente finale non deve avere installato nulla al contrario di quanto accade con pdfcrop per esempio.

        Una soluzione LaTeX:
        `\documentclass[a4paper]{article}

        \makeatletter
        \providecommand\@namegdef[1]{\expandafter\gdef\csname#1\endcsname}
        \def\ubibitem#1#2{\@namedef{unsrt@#1}{{#1}{#2}}}
        \DeclareRobustCommand{\ucite}[1]{%
        \@ifundefined{unsrt@#1}
        {\@latex@warning{Undefined citation #1}}
        {\process@cite{#1}}}
        \newcounter{unsrt@cnt}
        \def\process@cite#1{%
        \ifcsname unsrt@done#1\endcsname
        \else
        \@namegdef{unsrt@done#1}{}%
        \stepcounter{unsrt@cnt}%
        \@namegdef{unsrt@\arabic{unsrt@cnt}}{%
        \expandafter\expandafter\expandafter\bibitem\csname unsrt@#1\endcsname}%
        \fi
        \cite{#1}}
        \def\printbibliography{%
        \begin{thebibliography}{\arabic{unsrt@cnt}}
        \count@=\z@
        \loop\ifnum\count@<\value{unsrt@cnt} \advance\count@\@ne \@nameuse{unsrt@\number\count@} \repeat \end{thebibliography}} \makeatother \ubibitem{pippo}{Pippo, Noccioline, Topolinia 2001} \ubibitem{topolino}{Topolino, Mice, Topolinia 1935} \begin{document} Ecco Topolino~\ucite{topolino}. Ciao Pippo~\ucite{pippo}. Di nuovo Pippo~\ucite{pippo}. Non esiste~\ucite{alberto}. \printbibliography \end{document}` Non ha alcuna importanza come si inseriscono gli elementi della bibliografia, purché li si metta prima di \begin{document} (mi pare anche un buon posto). La macro \ubibitem ha due argomenti: la chiave e il testo della citazione bibliografica. Naturalmente manca tutta la parte relativa a citazioni multiple. Ciao Enrico

      • #40125
        Up
        0
        Down
        ::


        Grazie Enrico! Sei impareggiabile.

        Ora cercherò di studiare per bene il tutto.
        Soprattutto la parte del \process@cite.

        Questo significa che se mi impegno molto posso ottenere
        la cosa voluta solo usando TeX!

        Ciao ciao.
        Fra

      • #40126
        Up
        0
        Down
        ::


        Dopo un bel po’ di tempo mi sono rimesso a pensare alla questione
        dell’ordinamento per citazione automatico in thebibliography.
        (Sia ben inteso, so che l’ordinamento per citazione è da evitare.
        Ribadisco però che se non si usa BibTeX per qualche motivo e ci si ritrova a dover
        ordinare la bibliografia per citazione, il problema si pone.)

        Ho cercato di estendere il codice di Enrico ma devo studiare ancora molto.

        In compenso ho realizzato un programmino in Python
        che, dandogli in pasto il file principale (es. main.tex)
        genera un altro file con la bibliografia ordinata in ordine di citazione (main_thebibord.tex).
        Non resta che copiarla e incollarla nel documento principale al posto dell’attuale
        ambiente thebibliography.

        Se qualcuno non ha nulla da fare e vuole provare questo programmino ecco i link:
        l’eseguibile per Windows per chi non ha Python 2.5 o 2.6 o il sorgente per chi ha Python 2.5 o 2.6 installato.

        Uso dell’eseguibile per Windows:
        `thebibord.exe main.tex`

        Uso del sorgente:
        `python thebibord.py main.tex`

        [edit]
        Ovviamente il codice Python è pessimo e scritto di fretta.
        Non mi assumo nessuna responsabilità se danneggerà i vostri file.

        Altra cosa, gestisce gli input e gli include di file tex con e senza estensione.
        Ha bisogno che l’ambiente thebibliography si trovi nel main.tex (ragionevole)
        e gestisce la forma più generica del comando cite: \cite[. . .]{chiave1, chiave2, . . .}
        [/edit]

        Ciao ciao.
        Fra

      • #40127
        Up
        0
        Down
        ::

        Dopo un bel po’ di tempo mi sono rimesso a pensare alla questione
        dell’ordinamento per citazione automatico in thebibliography.
        (Sia ben inteso, so che l’ordinamento per citazione è da evitare.
        Ribadisco però che se non si usa BibTeX per qualche motivo e ci si ritrova a dover
        ordinare la bibliografia per citazione, il problema si pone.)

        Ho cercato di estendere il codice di Enrico ma devo studiare ancora molto.

        In compenso ho realizzato un programmino in Python
        che, dandogli in pasto il file principale (es. main.tex)
        genera un altro file con la bibliografia ordinata in ordine di citazione (main_thebibord.tex).
        Non resta che copiarla e incollarla nel documento principale al posto dell’attuale
        ambiente thebibliography.

        Se qualcuno non ha nulla da fare e vuole provare questo programmino ecco i link:
        l’eseguibile per Windows per chi non ha Python 2.5 o 2.6 o il sorgente per chi ha Python 2.5 o 2.6 installato.

        Uso dell’eseguibile per Windows:
        `thebibord.exe main.tex`

        Uso del sorgente:
        `python thebibord.py main.tex`

        [edit]
        Ovviamente il codice Python è pessimo e scritto di fretta.
        Non mi assumo nessuna responsabilità se danneggerà i vostri file.

        Altra cosa, gestisce gli input e gli include di file tex con e senza estensione.
        Ha bisogno che l’ambiente thebibliography si trovi nel main.tex (ragionevole)
        e gestisce la forma più generica del comando cite: \cite[. . .]{chiave1, chiave2, . . .}
        [/edit]

        `\documentclass[a4paper]{article}

        \makeatletter
        \providecommand\@namegdef[1]{\expandafter\gdef\csname#1\endcsname}

        \def\ubibitem#1#2{\@namedef{unsrt@#1}{{#1}{#2}}}

        \DeclareRobustCommand{\ucite}[2][]{%
        \def\after@cite{#1}%
        \@for\next@cite:=#2\do
        {\expandafter\process@cite\expandafter{\next@cite}}%
        \ifx\after@cite\@empty\cite{#2}\else\cite[\after@cite]{#2}\fi}

        \newcounter{unsrt@cnt}

        \def\process@cite#1{\@ifundefined{unsrt@#1}{}{\process@onecite{#1}}}

        \def\process@onecite#1{%
        \ifcsname unsrt@done#1\endcsname
        \else
        \@namegdef{unsrt@done#1}{}%
        \stepcounter{unsrt@cnt}%
        \@namegdef{unsrt@\arabic{unsrt@cnt}}{%
        \expandafter\expandafter\expandafter\bibitem\csname unsrt@#1\endcsname}%
        \fi}

        \def\printbibliography{%
        \begin{thebibliography}{\arabic{unsrt@cnt}}
        \count@=\z@
        \loop\ifnum\count@<\value{unsrt@cnt} \advance\count@\@ne \@nameuse{unsrt@\number\count@} \repeat \end{thebibliography}} \makeatother \ubibitem{pippo}{Pippo, Noccioline, Topolinia 2001} \ubibitem{topolino}{Topolino, Mice, Topolinia 1935} \begin{document} Ecco Topolino~\ucite{topolino,pippo}. Ciao Pippo~\ucite[p.~24]{pippo}. Di nuovo Pippo~\ucite{pippo}. Non esiste~\ucite{alberto}. \printbibliography \end{document}` Ciao Enrico

      • #40128
        Up
        0
        Down
        ::


        Grazie Enrico!

        E io che ho speso un weekend intero a fare quel codice in Python!
        Vabbè ho imparato comunque qualcosa. 🙂

        Ciao ciao.
        Fra

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

    Go to top