How to submit a research paper, a technical report, a grant proposal , or a curriculum vitae that respect imposed constraints such as formatting instructions and page limits? It is a challenging task, especially when coping with time pressure, isn't it? With VaryLaTeX, simply drop your archive into your Web browser! VaryLaTeX makes automatically vary your PDF to fit the pages limit... and if you're unhappy, you can still control different aspects of your document with a configurator.
http://phdcomics.com/comics.php?f=1971
VaryLaTeX is a solution based on variability, constraint programming , and machine learning techniques for documents written in LaTeX to meet constraints and deliver on time. VaryLaTeX allows users annotating LaTeX source files with variability information, e.g., (de)activating portions of text, tuning figures' sizes, or tweaking line spacing. Then, a fully automated procedure learns constraints among Boolean and numerical values for avoiding non-acceptable paper variants, and finally, users can further configure their papers (e.g., aesthetic considerations) or pick a (random) paper variant that meets constraints, e.g., page limits.
Feel free to contribute, suggest features, provide feedbacks, use cases
There is a short demonstration: https://www.youtube.com/watch?v=u1ralqbHCyM&list=PLcDsXHkK7hJ3n9v7VAMbZCIV6egreI8OL and some technical explanations in this Youtube playlist
To run it, you need have texlive
and python
(3) installed, then
pip install -r requirements.txt
python main_server.py
If it does not work, you may want to use python3
and pip3
instead of python
and pip
.
The app can then be accessed in a browser at 0.0.0.0:5000.
You can also run the app within a Docker
container : to do this, install docker then, in the project folder
# Create the image
sudo docker build -t varylatex .
# Create the container
sudo docker run -it --rm -p 5000:5000 varylatex
And inside the container you can run
python main_server.py
To learn about the implementation and the choices that were made for the project, see about.md.
It's a complete rewrite/extension of https://github.com/FAMILIAR-project/varylatex (originally written in Java, Bash scripts, and some R code). To re-initiate the work, we build upon the implementation described on this blog post LaTeX writing as a constrained non-convex optimization problem and available on gitlab: https://gitlab.com/martisak/latex-optimizer/ (note: "fork" of gitlab as described here: http://ruby.zigzo.com/2015/03/23/moving-from-gitlab-to-github/)
Corentin Ollivier realized the whole implementation during an internship at DiverSE
More details can be found in the following paper, published/presented at 12th International Workshop on Variability Modelling of Software-Intensive Systems https://vamos2018.wordpress.com/: "VaryLaTeX: Learning Paper Variants That Meet Constraints" by Mathieu Acher, Paul Temple, Jean-Marc Jézéquel, José A. Galindo, Jabier Martinez, Tewfik Ziadi: https://hal.inria.fr/hal-01659161/