A tool for manipulating bibtex files as s-expressions
Racket Makefile
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.



bib2sx is a command-line tool (written in Racket) for parsing BibTeX files (by default) into S-Expressions.

It captures the (potentially recursive) structure of quoting in BibTeX, which is is important for capitalization.

It also supports outputing to JSON, XML and (back to canonicalized) BibTeX.

A blog post explaining bib2sx covers the tool in much more detail.

It will parse name fields (author, editor) into first, von, last and jr with --parse-names.


You will need an installation of the Racket programming language.


To build bib2sx, run make.


To install to ~/bin/, run make install.


$ bib2sx [ --inline ] [ --flatten ] [ --parse-names ] [ --texenize ]
         [ --in sx|bib ] [ --out sx|bib|json|xml ]
         [ --json | --bib | --xml ]
         [ <input-file> ]


  • --inline will expand variables into definitions from @string
  • --flatten will convert values into properly-quoted BibTeX strings
  • --parse-names will parse names according to BibTeX's rules
  • --texenize will tokenize values into lexemes meaningful to TeX
  • --in <format> will set the input format: sx or bib allowed; bib is default
  • --out <format> will set the output format; sx, bib, json, or xml allowed; sx is default
  • --json will output JSON; same as --out json
  • --bib will output canonicalized BibTeX; same as --out bib
  • --xml will output XML; same as --out xml


If you want to render the output in a format other than LaTeX (such as HTML), you will need to interpret the TeX.

To make this easier, the --texenize flag will parse a value into lexemes meaningful to LaTeX.

For instance, \foo{bar} will become "\foo" '("b" "a" "r").


bib2sx: A bibtex parser and transformer

Copyright (©) 2015 Matthew Might

This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/.