Skip to content

An extremely fast LaTeX formatter written in Rust

License

Notifications You must be signed in to change notification settings

Kfftfuftur/tex-fmt

Repository files navigation

tex-fmt tex-fmt

CI crates.io license: MIT

An extremely fast LaTeX formatter written in Rust.

Input Output
\documentclass{article}

\begin{document}

\begin{itemize}
\item Lists with items
over multiple lines
\end{itemize}

\begin{equation}
E = m c^2
\end{equation}

\end{document}
\documentclass{article}

\begin{document}

\begin{itemize}
  \item Lists with items
    over multiple lines
\end{itemize}

\begin{equation}
  E = m c^2
\end{equation}

\end{document}
  • ⚡ Extremely fast run-time performance
  • 🔧 No configuration necessary
  • 📟 Command-line interface
  • 📜 Handles LaTeX file types .tex, .bib, .cls, and .sty
  • 🦀 Written entirely in safe Rust

Installation

Cargo

# install stable release
cargo install tex-fmt

# install from github
cargo install --git "https://github.com/wgunderwood/tex-fmt"

Nix

nix build "github:wgunderwood/tex-fmt"

Usage

tex-fmt file.tex        # format file.tex and overwrite
tex-fmt -c file.tex     # check if file.tex is correctly formatted
tex-fmt -p file.tex     # format file.tex and print to STDOUT
tex-fmt -h              # view help information

Performance

When formatting all of the test cases, tex-fmt is hundreds of times faster than latexindent.

Files Lines Size tex-fmt latexindent latexindent -m
47 93k 3.5M 0.143s 102.1s [x714] 128.4s [x898]

Limitations

  • Semantic parsing of LaTeX code not conducted
  • No linting or correction of syntax errors
  • Customization via configuration files not supported
  • Compliance with existing formatting guidelines not guaranteed
  • Editor integration not currently provided
  • No spelling or grammar checking

Existing tools

  • latexindent. Perl script, many configuration options, slow on large files.

  • LaTeXTidy. Perl script, download links seem to be broken.

  • latex-pretty. Browser-based, uses latexindent as the backend.

  • latexformat.com. Browser-based.

  • texpretty. C program which works sometimes and appears to be fast. Fails with certain keywords inside brackets.

  • latex-editor. Browser-based.

  • LaTeXFmt. Vim plugin, does not apply indentation.

  • latex-formatter. Visual Studio plugin, uses latexindent as the backend.

About

An extremely fast LaTeX formatter written in Rust

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Rust 93.5%
  • Nix 3.9%
  • Just 2.6%