#!/usr/local/bin/perl -w # # btsort # # Reads an entire BibTeX file, sorts the entries, and spits them back out # again. # # $Id: btsort 448 1997-12-21 01:45:46Z greg $ # use strict; use Text::BibTeX (':metatypes'); my ($filename, $structure, @options, $bibfile, $entry, %sortkey, @entries); die "usage: btcheck file [structure [options]]\n" unless @ARGV >= 1; ($filename, $structure, @options) = @ARGV; $structure ||= 'Bib'; $bibfile = new Text::BibTeX::File $filename or die "$filename: $!\n"; $bibfile->set_structure ('Bib', @options); while ($entry = new Text::BibTeX::Entry $bibfile) { next unless $entry->parse_ok && $entry->metatype == BTE_REGULAR; $entry->check; $sortkey{$entry} = $entry->sort_key; push (@entries, $entry); } $bibfile->close; @entries = sort { $sortkey{$a} cmp $sortkey{$b} } @entries; $entry->print while $entry = shift @entries;