✅ Overview
Scimax VS Code provides comprehensive BibTeX file editing support with speed commands, batch operations, and intelligent author name handling. This complements the citation management features in References and Citations.
✅ Features
Speed Commands - Single-key commands when cursor is at the start of an entry
Entry Operations - Clean, format, and transform individual entries
File Operations - Sort entries, apply batch transformations, validate files
Smart Author Parsing - Proper handling of particles (von, van der), suffixes (Jr., III), and corporate authors
Journal Abbreviations - Toggle journal names between full and abbreviated forms using 50,000+ abbreviation database
✅ When to Use This
This document covers editing .bib files directly. For inserting and managing citations in org/markdown/LaTeX documents, see References and Citations.
✅ Speed Commands
BibTeX speed commands are single-key shortcuts available when your cursor is at column 0 of a line starting with @ (an entry definition line like @article{).
✅ Enabling Speed Commands
Speed commands are enabled by default for BibTeX files. The context scimax.atBibtexEntryStart is automatically set when appropriate.
✅ Available Speed Commands
✅ Entry Formatting
| Key | Command | Description |
|---|---|---|
| s | scimax.bibtex.sortFields | Sort fields in standard order |
| d | scimax.bibtex.downcaseEntry | Lowercase entry type and field names |
| t | scimax.bibtex.titleCase | Convert title to Title Case |
| S | scimax.bibtex.sentenceCase | Convert title to sentence case |
| c | scimax.bibtex.cleanEntry | Clean entry (normalize, sort, trim) |
| K | scimax.bibtex.generateKey | Generate citation key from pattern |
| b | scimax.bibtex.wrapBraces | Wrap selection in braces (for case protection) |
| B | scimax.bibtex.stripBraces | Strip all internal braces from entry |
✅ External Resources
| Key | Command | Description |
|---|---|---|
| o | scimax.bibtex.openPdf | Open associated PDF file |
| u | scimax.bibtex.openUrl | Open URL field in browser |
| N | scimax.bibtex.openNotes | Open/create notes file for entry |
| g | scimax.bibtex.googleScholar | Search entry on Google Scholar |
| x | scimax.bibtex.crossref | Search entry on CrossRef |
| w | scimax.bibtex.webOfScience | Search entry on Web of Science |
✅ OpenAlex Integration
| Key | Command | Description |
|---|---|---|
| C | scimax.bibtex.showCitingWorks | Show papers citing this work |
| R | scimax.bibtex.showRelatedWorks | Show related works |
| r | scimax.bibtex.showReferences | Show references cited by this work |
✅ Clipboard Operations
| Key | Command | Description |
|---|---|---|
| k | scimax.bibtex.copyKey | Copy citation key to clipboard |
| y | scimax.bibtex.copyBibtex | Copy full BibTeX entry |
| K | scimax.bibtex.killEntry | Delete entire entry |
✅ Using Speed Commands
Open a
.bibfileMove cursor to column 0 of an
@entry{linePress a single key from the tables above
Press
?to see available commands
Example:
@article{smith2020machine, <-- cursor at column 0 here
author = {John Smith},
title = {Machine Learning},
year = {2020}
}
✅ Entry Operations
These commands operate on the entry at the cursor position.
✅ Clean Entry
Command: scimax.bibtex.cleanEntry (speed key: c)
Cleans the current entry by:
Normalizing whitespace (single spaces, trimmed)
Lowercasing field names
Sorting fields in standard BibTeX order
Removing duplicate outer braces (
{{Title}}→{Title})Preserving inner braces for case protection (
{DNA}stays as-is)
Before:
@Article{Smith2020,
AUTHOR = { John Smith },
TITLE = {{A Machine Learning Approach}},
Year = {2020},
Journal = {Nature}
}
After:
@article{Smith2020,
author = {John Smith},
title = {A Machine Learning Approach},
journal = {Nature},
year = {2020},
}
✅ Title Case
Command: scimax.bibtex.titleCase (speed key: T)
Converts the title field to Title Case while preserving:
Braced content (
{DNA},{NASA})Small words (a, an, the, and, but, or, for, in, of, on, to, etc.)
Example:
"the effects of machine learning on {DNA} analysis" → "The Effects of Machine Learning on {DNA} Analysis"
Sentence Case
Command: scimax.bibtex.sentenceCase (speed key: t)
Converts the title field to sentence case (only first word capitalized) while preserving braced content.
Example:
"The Effects Of Machine Learning" → "The effects of machine learning"
"Analysis of {DNA} Sequences" → "Analysis of {DNA} sequences"
✅ Generate Key
Command: scimax.bibtex.generateKey (speed key: K)
Generates a citation key based on a configurable pattern. The pattern is set via the scimax.bibtex.keyPattern setting.
Pattern Configuration
Setting: scimax.bibtex.keyPattern
Default: {lastname}-{year}-{title}
Available placeholders:
| Placeholder | Description |
|---|---|
| {lastname} | First author's last name (lowercase) |
| {Lastname} | First author's last name (capitalized) |
| {year} | Publication year |
| {title} | First significant word from title |
| {title:N} | First N significant words (hyphenated) |
| {journal} | Journal abbreviation (initials) |
| {keywords} | First keyword |
| {type} | Entry type (article, book, etc.) |
Pattern Examples
| Pattern | Result |
|---|---|
| {lastname}-{year}-{title} | kitchin-2015-machine |
| {Lastname}{year} | Kitchin2015 |
| {lastname}-{title:2}-{year} | kitchin-machine-learning-2015 |
| {lastname}-{year}-{keywords} | kitchin-2015-catalysis |
Sort Fields
Command: scimax.bibtex.sortFields (speed key: s)
Reorders fields in standard BibTeX order:
author, title, journaltitle/journal, booktitle
editor, edition, volume, number, issue, pages
publisher, location/address, year, date, month
doi, url, urldate, isbn, issn
eprint, eprinttype, archiveprefix, primaryclass
note, annote, abstract, keywords, file
Any remaining fields
Downcase Entry
Command: scimax.bibtex.downcaseEntry (speed key: d)
Lowercases the entry type and all field names:
@Article→@article=Author = = → =author ==
=JOURNAL = = → =journal ==
Wrap in Braces
Command: scimax.bibtex.wrapBraces (speed key: b, keybinding: Cmd+Shift+])
Wraps the current selection or word in curly braces for case protection.
Use this to protect:
Acronyms: DNA → {DNA}
Proper nouns: Python → {Python}
Chemical formulas: H2O → {H2O}
✅ Strip Braces
Command: scimax.bibtex.stripBraces (speed key: B, keybinding: Cmd+Shift+[)
Strips all internal braces from the current entry. Useful for cleaning up entries where braces have been overused.
Before:
@article{smith2024,
author = {John Smith},
title = {{A} {Study} of {Machine} {Learning}},
journal = {{Nature}},
year = {2024}
}
After:
@article{smith2024,
author = {John Smith},
title = {A Study of Machine Learning},
journal = {Nature},
year = {2024}
}
Note: This removes ALL internal braces. If you need to preserve specific braces (like {DNA}), you'll need to re-add them after running this command.
✅ File Operations
These commands operate on the entire BibTeX file.
Sort Entries
Command: scimax.bibtex.sortEntries
Sorts all entries in the file. Shows a menu to choose sort order:
| Option | Description |
|---|---|
| By Key | Alphabetically by citation key |
| By Year | Oldest to newest (secondary: key) |
| By Author | Alphabetically by first author last name |
| (secondary: year, then key) |
The command preserves any preamble content (comments, @string definitions) at the top of the file.
Apply Operation to All Entries
Command: scimax.bibtex.applyToAllEntries
Applies a transformation to every entry in the file. Shows a menu of operations:
| Operation | Description |
|---|---|
| Clean Entries | Normalize whitespace, sort fields, lowercase names |
| Title Case Titles | Convert all titles to Title Case |
| Sentence Case Titles | Convert all titles to sentence case |
| Standardize Keys | Regenerate all keys as author-year-word format |
| Sort Fields | Reorder fields in standard BibTeX order |
| Downcase Entries | Lowercase all entry types and field names |
Standardize Keys Warning
The "Standardize Keys" option shows a confirmation dialog because it can break existing citations in your documents. It also:
Handles duplicate keys by adding suffixes (a, b, c, ...)
Reports how many duplicates were resolved
Validate File
Command: scimax.bibtex.validateFile
Validates the BibTeX file and reports:
Total number of entries
Entry types and counts
Syntax style (BibTeX vs BibLaTeX vs mixed)
Duplicate keys
Missing required fields
Syntax errors
Results are shown in an output channel with severity indicators:
❌ Errors (must fix)
⚠️ Warnings (should fix)
Show Statistics
Command: scimax.bibtex.showStatistics
Shows a quick overview of the BibTeX file:
Total entries
Entries by type (article, book, etc.)
Syntax style detection
Field usage statistics
✅ Best Practices
✅ Entry Formatting
Use consistent case - Run "Downcase Entries" on your file
Sort fields consistently - Use "Clean Entries" or "Sort Fields"
Protect case-sensitive text - Wrap in braces:
{DNA},{Python},{NASA}Include DOIs - Enables OpenAlex integration and hover previews
✅ Key Naming
Recommended format: author-year-keyword or authoryearkeyword
Good keys:
smith-2024-machineorsmith2024machinevandenberg-2023-neural(note: particle stripped)nasa-2022-report
Bad keys:
ref1,paper2(not memorable)ML_Paper_2024(inconsistent format)
✅ File Organization
One bibliography file per project or topic
Use
@stringdefinitions for common journalsKeep entries in consistent order (by key or year)
Regularly validate files for errors
✅ Before Sharing
Run
scimax.bibtex.validateFileto check for errorsRun "Clean Entries" via
scimax.bibtex.applyToAllEntriesOptionally sort entries by key or year
Journal Abbreviations
Scimax includes a comprehensive journal abbreviation database that allows you to toggle between full journal names and their standardized ISO 4 abbreviations.
Data Sources
The abbreviation database is sourced from the JabRef Abbreviation Repository, which aggregates abbreviations from multiple authoritative sources:
| Source | Description | Entries |
|---|---|---|
| General | Cross-discipline abbreviations | ~1,900 |
| ACS (Chemistry) | American Chemical Society journals | ~1,700 |
| AMS (Mathematics) | American Mathematical Society journals | ~2,500 |
| IEEE | IEEE journals and conferences | ~280 |
| Entrez/PubMed | Medline abbreviations (dotless format) | ~19,500 |
| Life Science | Biology and life science journals | ~9,700 |
| Index Medicus | NLM/Index Medicus abbreviations | ~3,200 |
| Mathematics | Mathematics journals from MathSciNet | ~3,800 |
| Geology & Physics | Geology and physics journals | ~1,300 |
| Mechanical | Mechanical and biomechanical engineering | ~4,800 |
| Astronomy | Astronomy and astrophysics journals | ~20 |
| Meteorology | Atmospheric science journals | ~120 |
| Sociology | Sociology journals | ~100 |
| AEA (Economics) | American Economic Association journals | ~1,000 |
Total: approximately 50,000 abbreviation entries.
✅ Important: Use Version Control
Before making batch changes to your bibliography files, ensure your files are under version control (git). This allows you to:
Review changes with
git diffUndo changes with
git checkoutif something goes wrongTrack the history of modifications
Tip: Commit your .bib file before running batch abbreviation operations. If anything goes wrong, you can always revert.
✅ Toggling Journal Names
✅ Single Entry (Speed Key: A)
Command: scimax.bibtex.toggleJournalAbbreviation (speed key: A)
Toggles the journal field between full name and abbreviation:
Before:
@article{smith2024,
author = {John Smith},
title = {A Great Paper},
journal = {Journal of the American Chemical Society},
year = {2024}
}
After pressing A:
@article{smith2024,
author = {John Smith},
title = {A Great Paper},
journal = {J. Am. Chem. Soc.},
year = {2024}
}
Press A again to toggle back to the full name.
✅ All Entries
| Command | Description |
|---|---|
| scimax.bibtex.abbreviateAllJournals | Abbreviate all journals in the file |
| scimax.bibtex.expandAllJournals | Expand all journals to full names |
These commands:
Validate syntax before starting - warns if parse errors exist
Process every entry in the file
Validate results - checks that entry count is preserved
Report how many journals were changed and not found
If validation fails, changes are not applied.
✅ Undo Behavior
All batch changes are applied as a single edit operation, so:
Press
Ctrl+Z(Cmd+Zon Mac) once to undo all changes at onceYou cannot undo individual journal changes within a batch operation
For more granular control, use the single-entry toggle (
Aspeed key) instead
For single-entry toggles (speed key A), each toggle is a separate undo operation.
✅ Searching Abbreviations
Command: scimax.bibtex.searchJournalAbbreviations
Search the abbreviation database by full name or abbreviation:
Enter search query (e.g., "chemistry", "J. Am.")
Browse matching results
Select an entry to copy the abbreviation to clipboard
✅ Custom Abbreviations
You can add your own journal abbreviations that override the built-in database.
✅ Adding Custom Abbreviations
Command: scimax.bibtex.addJournalAbbreviation
Enter the full journal name
Enter the abbreviation
The mapping is saved to your VS Code user storage
Custom abbreviations take priority over the bundled database, so you can correct or override any entry.
✅ Managing Custom Abbreviations
Command: scimax.bibtex.manageJournalAbbreviations
View and remove your custom abbreviations.
✅ Updating the Database
Command: scimax.bibtex.updateJournalAbbreviations
Downloads the latest abbreviation lists from the JabRef repository:
Select which sources to download (multi-select)
Wait for downloads to complete
Abbreviations are immediately available
Use this to get the latest additions and corrections.
✅ Statistics
Command: scimax.bibtex.journalAbbreviationStats
Shows the number of abbreviations loaded from each source.
✅ Speed Command
| Key | Command | Description |
|---|---|---|
| A | scimax.bibtex.toggleJournalAbbreviation | Toggle journal abbreviation |
Command Reference
✅ Entry Commands (require cursor in entry)
| Command | Speed Key | Description |
|---|---|---|
| scimax.bibtex.nextEntry | n | Navigate to next entry |
| scimax.bibtex.previousEntry | p | Navigate to previous entry |
| scimax.bibtex.jumpToEntry | j | Jump to entry by key |
| scimax.bibtex.sortFields | s | Sort fields in entry |
| scimax.bibtex.downcaseEntry | d | Lowercase entry type/fields |
| scimax.bibtex.titleCase | t | Title case the title field |
| scimax.bibtex.sentenceCase | S | Sentence case the title field |
| scimax.bibtex.cleanEntry | c | Clean and normalize entry |
| scimax.bibtex.generateKey | K | Generate key from pattern |
| scimax.bibtex.wrapBraces | b | Wrap selection in braces |
| scimax.bibtex.stripBraces | B | Strip internal braces |
| scimax.bibtex.openPdf | o | Open associated PDF |
| scimax.bibtex.openUrl | u | Open URL in browser |
| scimax.bibtex.openNotes | N | Open/create notes file |
| scimax.bibtex.copyKey | y | Copy citation key |
| scimax.bibtex.copyBibtex | b | Copy full BibTeX entry |
| scimax.bibtex.killEntry | k | Delete entry |
| scimax.bibtex.googleScholar | g | Search on Google Scholar |
| scimax.bibtex.crossref | x | Search on CrossRef |
| scimax.bibtex.webOfScience | w | Search on Web of Science |
| scimax.bibtex.showCitingWorks | C | Show citing works |
| scimax.bibtex.showRelatedWorks | R | Show related works |
| scimax.bibtex.showReferences | r | Show references |
| scimax.bibtex.toggleJournalAbbreviation | A | Toggle journal abbreviation |
| scimax.bibtex.help | ? | Show speed command help |
✅ File Commands (operate on entire file)
| Command | Description |
|---|---|
| scimax.bibtex.sortEntries | Sort all entries (by key/year/author) |
| scimax.bibtex.applyToAllEntries | Apply operation to all entries |
| scimax.bibtex.validateFile | Validate file and show report |
| scimax.bibtex.showStatistics | Show file statistics |
| scimax.bibtex.abbreviateAllJournals | Abbreviate all journals in file |
| scimax.bibtex.expandAllJournals | Expand all journals to full names |
| scimax.bibtex.searchJournalAbbreviations | Search journal abbreviation database |
| scimax.bibtex.updateJournalAbbreviations | Update abbreviations from online |
| scimax.bibtex.addJournalAbbreviation | Add custom journal abbreviation |
| scimax.bibtex.manageJournalAbbreviations | Manage custom abbreviations |
| scimax.bibtex.journalAbbreviationStats | Show abbreviation statistics |