npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

bibtex-tidy

v1.14.0

Published

Tidy bibtex files

Downloads

1,066

Readme

bibtex-tidy

Tidy bibtex files. Try it out.

Screen Recording 2020-10-23 at 16 25 26(1)

There are several ways you can use bibtex-tidy:

Example

Before:

@ARTICLE {feinberg1983technique,
  title={A technique for radiolabeling DNA restriction endonuclease fragments to high specific activity},
author={Feinberg, Andrew P. and Vogelstein, Bert},
  journal    = {Analytical biochemistry},
  volume = 132,
  number=1,
  pages={6--13},
  year=1983,
  publisher={Elsevier},}
@article{miles1984qualitative,
    title={Qualitative data analysis: A sourcebook},
    author={Miles, Matthew B. and Huberman, A. Michael and Saldana, J.},
    journal={Beverly Hills},
    year=1984
}

After bibtex-tidy references.bib:

@article{feinberg1983technique,
  title         = {A technique for radiolabeling DNA restriction endonuclease fragments to high specific activity},
  author        = {Feinberg, Andrew P. and Vogelstein, Bert},
  year          = 1983,
  journal       = {Analytical biochemistry},
  publisher     = {Elsevier},
  volume        = 132,
  number        = 1,
  pages         = {6--13}
}
@article{miles1984qualitative,
  title         = {Qualitative data analysis: A sourcebook},
  author        = {Miles, Matthew B. and Huberman, A. Michael and Saldana, J.},
  year          = 1984,
  journal       = {Beverly Hills}
}

CLI

Requires node v12 or later.

npm install -g bibtex-tidy
bibtex-tidy references.bib
  --help, -h
      Show help
      
  --v2
      Input files will no longer be modified by default. Instead, you will need to
      specify `--modify`/`-m` option to overwrite the file, or `--output`/`-o` to
      output to a different file.
      
  --output, -o
      Write output to specified path. When omitted (and -m/--modify is not used),
      the result will be printed to stdout.
      
  --modify, -m, --no-modify
      Overwrite the original input files with the tidied result. This is enabled by
      default but will be disabled by default in v2. For v1, use --no-modify to
      output to stdout instead of overwriting the input files.
      
  --omit
      Remove specified fields from bibliography entries.
      
      Examples:
      --omit=id,name
      
  --curly, --no-curly
      Enclose all property values in braces. Quoted values will be converted to
      braces. For example, "Journal of Tea" will become {Journal of Tea}.
      
  --numeric, --no-numeric
      Strip quotes and braces from numeric/month values. For example, {1998} will
      become 1998.
      
  --months
      Convert all months to three letter abbreviations (jan, feb, etc).
      
  --space
      Indent all fields with the specified number of spaces. Ignored if tab is set.
      
      Examples:
      --space=2 (default), --space=4
      
  --tab, --no-tab
      Indent all fields with a tab.
      
  --align, --no-align
      Insert whitespace between fields and values so that values are visually
      aligned.
      
      Examples:
      --align=14 (default)
      
  --blank-lines, --no-blank-lines
      Insert an empty line between each entry.
      
  --sort, --no-sort
      Sort entries by the specified field names (citation key is used if no fields
      are specified). For descending order, prefix the field with a dash (-).
      
      Multiple fields may be specified to sort everything by first field, then by
      the second field whenever the first field for entries are equal, etc.
      
      The following additional fields are also permitted: key (entry citation key),
      type (sorts by the type of entry, e.g. article), and special (ensures that
      @string, @preamble, @set, and @xdata entries are first).
      
      Examples:
      --sort (sort by citation key), --sort=-year,name (sort year descending then
      name ascending), --sort=name,year
      
  --duplicates
      Warn if duplicates are found, which are entries where DOI, abstract, or
      author and title are the same.
      
      Examples:
      --duplicates doi (same DOIs), --duplicates key (same IDs), --duplicates
      abstract (similar abstracts), --duplicates citation (similar author and
      titles), --duplicates doi, key (identical DOI or keys), --duplicates (same
      DOI, key, abstract, or citation)
      
  --merge, --no-merge
      Merge duplicates entries. Use the duplicates option to determine how
      duplicates are identified. There are different ways to merge:
      
      - first: only keep the original entry
      
      - last: only keep the last found duplicate
      
      - combine: keep original entry and merge in fields of duplicates if they do
      not already exist
      
      - overwrite: keep original entry and merge in fields of duplicates,
      overwriting existing fields if they exist
      
  --strip-enclosing-braces
      Where an entire value is enclosed in double braces, remove the extra braces.
      For example, {{Journal of Tea}} will become {Journal of Tea}.
      
  --drop-all-caps
      Where values are all caps, make them title case. For example, {JOURNAL OF
      TEA} will become {Journal of Tea}. Roman numerals will be left unchanged.
      
  --escape, --no-escape
      Escape special characters, such as umlaut. This ensures correct typesetting
      with latex. Enabled by default.
      
  --sort-fields
      Sort the fields within entries.
      
      If no fields are specified fields will be sorted by: title, shorttitle,
      author, year, month, day, journal, booktitle, location, on, publisher,
      address, series, volume, number, pages, doi, isbn, issn, url, urldate,
      copyright, category, note, metadata
      
      Examples:
      --sort-fields=name,author
      
  --strip-comments, --no-strip-comments
      Remove all comments from the bibtex source.
      
  --trailing-commas, --no-trailing-commas
      End the last key value pair in each entry with a comma.
      
  --encode-urls, --no-encode-urls
      Replace invalid URL characters with percent encoded values.
      
  --tidy-comments, --no-tidy-comments
      Remove whitespace surrounding comments.
      
  --remove-empty-fields, --no-remove-empty-fields
      Remove any fields that have empty values.
      
  --remove-dupe-fields, --no-remove-dupe-fields
      Only allow one of each field in each entry. Enabled by default.
      
  --generate-keys
      For all entries replace the key with a new key of the form
      <author><year><title>. A JabRef citation pattern can be provided. This is an
      experimental option that may change without warning.
      
  --max-authors
      Truncate authors if above a given number into "and others".
      
  --no-lowercase
      Lowercase field names and entry type. Enabled by default.
      
  --enclosing-braces
      Enclose the given fields in double braces, such that case is preserved during
      BibTeX compilation.
      
      Examples:
      --enclosing-braces=title,journal (output title and journal fields will be of
      the form {{This is a title}}), --enclosing-braces (equivalent to
      ---enclosing-braces=title)
      
  --remove-braces
      Remove any curly braces within the value, unless they are part of a command.
      
      Examples:
      --remove-braces=title,journal, --remove-braces (equivalent to
      ---remove-braces=title)
      
  --wrap, --no-wrap
      Wrap long values at the given column
      
      Examples:
      --wrap (80 by default), --wrap=82
      
  --version, -v
      Show bibtex-tidy version.
      
  --quiet
      Suppress logs on stdout.
      

Javascript/Typescript API

npm install bibtex-tidy
const tidy = require('bibtex-tidy');
const bibtex = fs.readFileSync('references.bib', 'utf8');
tidy.tidy(bibtex, { curly: true });

Documentation for the options can be found here

Docker

The web application can be deployed locally using the provided Docker configuration:

  1. Build the Docker container: docker build -t bibtex-tidy . -f docker/Dockerfile
  2. Start the docker container as a service: cd docker && docker-compose up -d
  3. Visit the web application at http://localhost:8080 and do your BibTeX work
  4. Stop the docker service, when you don't need it anymore: cd docker && docker-compose down