Project

texrack

0.0
No commit activity in last 3 years
No release in over 3 years
texrack is a microservice that renders LaTeX as PNG files. Can be mounted in a Rack app
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Runtime

~> 0.5.3
~> 1.4.4
 Project Readme

texrack Code Climate

Simple Rack middleware to render LaTeX to PNGs on the fly.

Requirements

  • pdflatex must be installed
  • convert (from ImageMagick) must be installed

Configuration

If "pdflatex" or "convert" is not available in PATH, you can change Texrack.config and specify where to find them.

If you want a custom logger, set Texrack.config[:logger] to anything responding to #warn, #debug, #info and so on. For example Rails.logger if mounting inside a Rails application.

The default configuration is

Texrack.config = {
  pdflatex: "pdflatex",
  convert:  "convert",
  logger:   nil,
  cache_dir: Dir.mktmpdir,
  allowed_domains: ['*.example.com']
}

Usage

Either POST or GET to the configured URL with data set to the LaTeX source to compile.

If you GET / without setting data, you get a simple form.

Display mode

Everything is rendered inside a displaymath block (\[ or $$) by default. To disable the displaymath block, pass math=0.

Packages

The only included package is amsmath. To add more, send a pipe-separated string as packages. Arguments can be prepended.

For example: packages="[usenames,dvipsnames,svgnames,table]xcolor|amssymb" turns into

\usepackage[usenames,dvipsnames,svgnames,table]{xcolor}
\usepackage{amssymb}

Always respond with 200 OK

If you are dealing with software incapable of proper status codes (looking at you, Flash), you can pass always_200=1 and it'll respond with 200 OK even though we should really respond with a 5xx.

Trim result image

Pass trim=1 to tell ImageMagick to trim the result using -trim.

crossdomain.xml

If TexRack is used from Flash, and hosted on a different domain, you might need a crossdomain.xml file. Set Texrack.config[:allowed_domains] to an array of domains that should be allowed access.

Example: allowed_domains: ['*.example.com']

Caching

Generated images are cached by default, so we don't have to shell out to pdflatex and imagemagick all the time. Configure cache_dir to store the files somewhere safe, otherwise a tempdir is created and used.

The application sends ETags for each generated image.