#!/usr/bin/python import sys import bibtexparser import bibtexparser.bparser def remove_newlines(d): for key, value in d.items(): d[key] = value.replace('\n', ' ') return d class AlignedWriter(bibtexparser.bwriter.BibTexWriter): def __init__(self): super(AlignedWriter, self).__init__() self.order_entries_by = None def _entry_to_bibtex(self, entry): bibtex = u'@{}{{{}'.format(entry['type'], entry['id']) for field in [i for i in sorted(entry) if i not in ['type', 'id']]: try: bibtex += u",\n {:<12}= {{{}}}".format(field, entry[field]) except TypeError: raise TypeError("The field %s in entry %s must be a string" % (field, entry['id'])) bibtex += u"\n}}\n{}".format(self.entry_separator) return bibtex.encode('UTF-8') def main(): if len(sys.argv) < 2: sys.exit("Usage: clean.py file.bib") with open(sys.argv[1]) as f: parser = bibtexparser.bparser.BibTexParser() parser.customization = remove_newlines db = bibtexparser.loads(f.read(), parser) writer = AlignedWriter() print(bibtexparser.dumps(db, writer)) if __name__ == '__main__': main()