This service is developed to compile latex documents online. It can build PDF directly from GIT repository with TeX sources or from any link to TeX file.
In addition, the service provides command-line utility (for compiling local documents), API and Stand-Alone version. See more below.
.TEX file via link. (Limitation: includes will be ignored)HTTP Response Codes
The service will return HTTP.2xx on success and compiled PDF file. Otherwise a HTTP.4xx code will be returned with a compilation error log in response body.
Format:
/compile?url=<url to tex file>
Example:
latexonline.cc/compile?url=https://raw.githubusercontent.com/aslushnikov/latex-online/master/sample/sample.tex
Limitation: this command will ignore all includes during compiling
Format:
/compile?text=<tex file content>
Example:
latexonline.cc/compile?text=%5Cdocumentclass%5B%5D%7Barticle%7D%0A%5Cusepackage%5BT1%5D%7Bfontenc%7D%0A%5Cusepackage%7Blmodern%7D%0A%5Cusepackage%7Bamssymb%2Camsmath%7D%0A%5Cusepackage%7Bifxetex%2Cifluatex%7D%0A%5Cusepackage%7Bfixltx2e%7D%20%25%20provides%20%5Ctextsubscript%0A%25%20use%20microtype%20if%20available%0A%5CIfFileExists%7Bmicrotype.sty%7D%7B%5Cusepackage%7Bmicrotype%7D%7D%7B%7D%0A%5Cifnum%200%5Cifxetex%201%5Cfi%5Cifluatex%201%5Cfi%3D0%20%25%20if%20pdftex%0A%20%20%5Cusepackage%5Butf8%5D%7Binputenc%7D%0A%5Celse%20%25%20if%20luatex%20or%20xelatex%0A%20%20%5Cusepackage%7Bfontspec%7D%0A%20%20%5Cifxetex%0A%20%20%20%20%5Cusepackage%7Bxltxtra%2Cxunicode%7D%0A%20%20%5Cfi%0A%20%20%5Cdefaultfontfeatures%7BMapping%3Dtex-text%2CScale%3DMatchLowercase%7D%0A%20%20%5Cnewcommand%7B%5Ceuro%7D%7B%E2%82%AC%7D%0A%5Cfi%0A%5Cusepackage%5Ba4paper%5D%7Bgeometry%7D%0A%5Cifxetex%0A%20%20%5Cusepackage%5Bsetpagesize%3Dfalse%2C%20%25%20page%20size%20defined%20by%20xetex%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20unicode%3Dfalse%2C%20%25%20unicode%20breaks%20when%20used%20with%20xetex%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20xetex%5D%7Bhyperref%7D%0A%5Celse%0A%20%20%5Cusepackage%5Bunicode%3Dtrue%5D%7Bhyperref%7D%0A%5Cfi%0A%5Chypersetup%7Bbreaklinks%3Dtrue%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20bookmarks%3Dtrue%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20pdfauthor%3D%7B%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20pdftitle%3D%7B%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20colorlinks%3Dtrue%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20urlcolor%3Dblue%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20linkcolor%3Dmagenta%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20pdfborder%3D%7B0%200%200%7D%7D%0A%5Csetlength%7B%5Cparindent%7D%7B0pt%7D%0A%5Csetlength%7B%5Cparskip%7D%7B6pt%20plus%202pt%20minus%201pt%7D%0A%5Csetlength%7B%5Cemergencystretch%7D%7B3em%7D%20%20%25%20prevent%20overfull%20lines%0A%5Csetcounter%7Bsecnumdepth%7D%7B0%7D%0A%0A%5Cauthor%7B%7D%0A%5Cdate%7B%7D%0A%0A%5Cbegin%7Bdocument%7D%0A%5Csection%7BHello%20World%7D%5Clabel%7Bhello-world%7D%0A%0AThis%20is%20your%20first%20%5Cemph%7BC%7D%20program%3A%0A%0A%5Cbegin%7Bverbatim%7D%0A%23include%20%3Cstdio.h%3E%0A%0Aint%20main(void)%20%0A%7B%0A%20%20printf(%22hello%2C%20world%5Cn%22)%3B%0A%20%20return%200%3B%0A%7D%0A%5Cend%7Bverbatim%7D%0A%0ALet's%20write%20some%20math%3A%0A%5C%5B%20%5Cfrac%7Bdf(x)%7D%7Bdx%7D%3D%5Clim_%7Bh%20%5Cto%200%7D%7B%5Cfrac%7Bf(x%2Bh)-f(x)%7D%7Bh%7D%7D%20%5C%5D%0A%5Cend%7Bdocument%7D
Format:
/compile?git=<repo>&target=<target file>
This will fetch git repo and compile the target. target should be a relative path to the repository root.
Example:
latexonline.cc/compile?git=https://github.com/aslushnikov/diplom-latex&target=diplom.tex
For every compilation request you can pass the following additional arguments:
force=true This will force cache skipping and document recompilationcommand=xelatex This will compile document with xelatex compiler. Other available options are:
pdflatexxelatexlualatexdownload=sample.pdf This will initiate downloading of the resulting PDF
into the file with the name “sample.pdf”The command-line interface makes it possible to edit TeX documents in
vim/emacs and compile them whenever you want from the command-line. To do so, you will
need a tool called laton.
curl -L https://raw.githubusercontent.com/aslushnikov/latex-online/master/util/latexonline > laton && chmod 755 laton
This command will result in a laton script created in a current directory. Put it somewhere
your $PATH references to make it available around the system.
If you’ve got a single file (say main.tex) that doesn’t have any includes,
then you can compile it like this:
laton main.tex
After compiling file main.pdf will be created in the current dir
If your paper includes some files, you have to declare them to the
laton.
laton main.tex some-image.jpg some-cool-file.tex
NB The first file should be the file you want to compile, all others are supporting files.
In case you store all your .tex and supporting files in a git repo, you
can compile the project with the command
laton -g main.tex
The script will behave as if main.tex includes each file stored in your git repo.
In this section a brief description of the service from the inside is given.
Generally speaking the service is made out of two parts
Node.js part which with the help of express.js provides the REST API, and
with the help of mc bridges the gap with memcached instanceBash scripts which handle all the jobs related to the service (fetching
files, hashSumming them, compiling e.t.c)There are three types of requests:
.TEX file, compile itEvery request is handled in a bit special way
.TEX file, compile it.TEX file content, compile itThis kind of request is handled in a bit different way, as we can get a hashSum of the repo without cloning the entire repository.
git ls-remote extracting sha1 of the master branchsha1This part is for you if you’d like to deploy the service on your own machine. There are two ways to do it:
A Docker image is hosted and auto-updated on hub.docker.com
docker pull aslushnikov/latex-onlinedocker run -d -p 2700:2700 -t aslushnikov/latex-onlinepdflatex command to compile documentsbc to estimate some values in scriptscurl to fetch documents from webnode.js to run servernpm to install node dependenciesmemcached for caching compiled documentsmd5 or md5sum utility to hash documents according to their valuepython3 to run the latexrun build systemgit clone git@github.com:aslushnikov/latex-online.git to clone reposh util/check.sh to check if all dependencies are satisfied and create
tmp/ dirnpm install to install node dependenciesInstallation of pdflatex is beyond the scope of the document.
node app.js - runs node servermemcached - runs local memcached instance