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