google-research
arxiv-latex-cleaner
Python

arXiv LaTeX Cleaner: Easily clean the LaTeX code of your paper to submit to arXiv

Last updated Jul 7, 2026
6.9k
Stars
408
Forks
36
Issues
+12
Stars/day
Attention Score
83
Topics
Language breakdown
Python 95.2%
TeX 4.8%
โ–ธ Files click to expand
README

arxivlatexcleaner

This tool allows you to easily clean the LaTeX code of your paper to submit to arXiv. From a folder containing all your code, e.g. /path/to/latex/, it creates a new folder /path/to/latex_arXiv/, that is ready to ZIP and upload to arXiv.

Example call:

arxivlatexcleaner /path/to/latex --resizeimages --imsize 500 --images_allowlist='{"images/im.png":2000}'

Or simply from a config file

arxivlatexcleaner /path/to/latex --config cleaner_config.yaml

Installation:

pip install arxiv-latex-cleaner

| :exclamation: arxivlatexcleaner is only compatible with Python >=3.9 :exclamation: | | ---------------------------------------------------------------------------------- |

If using MacOS, you can install using Homebrew:

brew install arxivlatexcleaner

Alternatively, you can download the source code:

git clone https://github.com/google-research/arxiv-latex-cleaner
cd arxiv-latex-cleaner/
python -m arxivlatexcleaner --help

And install as a command-line program directly from the source code:

python setup.py install

Main features:

Privacy-oriented

  • Removes all auxiliary files (.aux, .log, .out, etc.).
  • Removes all comments from your code (yes, those are visible on arXiv and you
do not want them to be). These also include \begin{comment}\end{comment}, \iffalse\fi, and \if0\fi environments.
  • Optionally removes user-defined commands entered with commandstodelete
(such as \todo{} that you redefine as the empty string at the end).
  • Optionally allows you to define custom regex replacement rules through a
cleaner_config.yaml file.

Size-oriented

There is a 50MB limit on arXiv submissions, so to make it fit:

  • Removes all unused .tex files (those that are not in the root and not
included in any other .tex file).
  • Removes all unused images that take up space (those that are not actually
included in any used .tex file).
  • Optionally resizes all images to im_size pixels, to reduce the size of the
submission. You can allowlist some images to skip the global size using images_allowlist.
  • Optionally compresses .pdf files using ghostscript (Linux and Mac only).
You can allowlist some PDFs to skip the global size using images_allowlist.
  • Optionally converts PNG images to JPG format to reduce file size.

TikZ picture source code concealment

To prevent the upload of tikzpicture source code or raw simulation data, this feature:

  • Replaces the tikzpicture environment \begin{tikzpicture} ...
\end{tikzpicture} with the respective \includegraphics{EXTERNALTIKZFOLDER/picture_name.pdf}.
  • Requires externally compiled TikZ pictures as .pdf files in folder
EXTERNALTIKZFOLDER. See section 52 (Externalization Library) in the PGF/TikZ manual on TikZ picture externalization.
  • Only replaces environments with preceding
\tikzsetnextfilename{picture_name} command (as in \tikzsetnextfilename{picture_name}\begin{tikzpicture} ... \end{tikzpicture}) where the externalized picture_name.pdf filename matches picture_name.

More sophisticated pattern replacement based on regex group captures

Sometimes it is useful to work with a set of custom LaTeX commands when writing a paper. To get rid of them upon arXiv submission, one can simply revert them to plain LaTeX with a regular expression insertion.

{
    "pattern" : '(?:\\figcomp{\s)(?P<first>.?)\s}\s{\s(?P<second>.?)\s}\s{\s(?P<third>.?)\s*}',
    "insertion" : '\parbox[c]{{ {second} \linewidth}} {{ \includegraphics[width= {third} \linewidth]{{figures/{first} }} }}',
    "description" : "Replace figcomp"
}

The pattern above will find all \figcomp{path}{w1}{w2} commands and replace them with \parbox[c]{w1\linewidth}{\includegraphics[width=w2\linewidth]{figures/path}}. Note that the insertion template is filled with the named groups captures from the pattern. Note that the replacement is processed before all \includegraphics commands are processed and corresponding file paths are copied, making sure all figure files are copied to the cleaned version. See also cleaner_config.yaml for details on how to specify the patterns.

Usage:

usage: arxivlatexcleaner@v1.0.11 [-h] [--resizeimages] [--imsize IM_SIZE]
                                   [--compress_pdf]
                                   [--pdfimresolution PDFIMRESOLUTION]
                                   [--imagesallowlist IMAGESALLOWLIST]
                                   [--keep_bib]
                                   [--commandstodelete COMMANDSTODELETE [COMMANDSTODELETE ...]]
                                   [--commandsonlytodelete COMMANDSONLYTODELETE [COMMANDSONLYTO_DELETE ...]]
                                   [--environmentstodelete ENVIRONMENTSTODELETE [ENVIRONMENTSTODELETE ...]]
                                   [--ifexceptions IFEXCEPTIONS [IF_EXCEPTIONS ...]]
                                   [--useexternaltikz USEEXTERNALTIKZ]
                                   [--svginkscape [SVGINKSCAPE]]
                                   [--convertpngto_jpg]
                                   [--pngquality PNGQUALITY]
                                   [--pngsizethreshold PNGSIZETHRESHOLD]
                                   [--config CONFIG] [--verbose]
                                   input_folder

Clean the LaTeX code of your paper to submit to arXiv. Check the README for more information on the use.

positional arguments: input_folder Input folder containing the LaTeX code.

optional arguments: -h, --help show this help message and exit --resize_images Resize images. --imsize IMSIZE Size of the output images (in pixels, longest side). Fine tune this to get as close to 10MB as possible. --compress_pdf Compress PDF images using ghostscript (Linux and Mac only). --pdfimresolution PDFIMRESOLUTION Resolution (in dpi) to which the tool resamples the PDF images. --imagesallowlist IMAGESALLOWLIST Images (and PDFs) that won't be resized to the default resolution, but the one provided here. Value is pixel for images, and dpi forPDFs, as in --im_size and --pdfimresolution, respectively. Format is a dictionary as: '{"path/to/im.jpg": 1000}' --keep_bib Avoid deleting the *.bib files. --commandstodelete COMMANDSTODELETE [COMMANDSTODELETE ...] LaTeX commands that will be deleted. Useful for e.g. user-defined \todo commands. For example, to delete all occurrences of \todo1{} and \todo2{}, run the tool with --commandstodelete todo1 todo2.Please note that the positional argument input_folder cannot come immediately after commandstodelete, as the parser does not have any way to know if it's another command to delete. --commandsonlytodelete COMMANDSONLYTODELETE [COMMANDSONLYTO_DELETE ...] LaTeX commands that will be deleted but the text wrapped in the commands will be retained. Useful for commands that change text formats and colors, which you may want to remove but keep the text within. Usages are exactly the same as commandstodelete. Note that if the commands listed here duplicate that after commandstodelete, the default action will be retaining the wrapped text. --environmentstodelete ENVIRONMENTSTODELETE [ENVIRONMENTSTODELETE ...] LaTeX environments that will be deleted. Useful for e.g. user-defined comment environments. For example, to delete all occurrences of \begin{note} ... \end{note}, run the tool with --environmentstodelete note. Please note that the positional argument input_folder cannot come immediately after environmentstodelete, as the parser does not have any way to know if it's another environment to delete. --ifexceptions IFEXCEPTIONS [IF_EXCEPTIONS ...] Constant TeX primitive conditionals (\iffalse, \iftrue, etc.) are simplified, i.e., true branches are kept, false branches deleted. To parse the conditional constructs correctly, all commands starting with \if are assumed to be TeX primitive conditionals (e.g., declared by \newif\ifvar). Some known exceptions to this rule are already included (e.g., \iff, \ifthenelse, etc.), but you can add custom exceptions using --if_exceptions iffalt. --useexternaltikz USEEXTERNALTIKZ Folder (relative to input folder) containing externalized tikz figures in PDF format. --svginkscape [SVGINKSCAPE] Include PDF files generated by Inkscape via the \includesvg command from the svg package. This is done by replacing the \includesvg calls with \includeinkscape calls pointing to the generated .pdf_tex files. By default, these files and the generated PDFs are located under ./svg-inkscape (relative to the input folder), but a different path (relative to the input folder) can be provided in case a different inkscapepath was set when loading the svg package. --convertpngto_jpg Convert PNG images to JPG format to reduce file size --pngquality PNGQUALITY JPG quality for PNG conversion (0-100, default: 50) --pngsizethreshold PNGSIZETHRESHOLD Minimum PNG file size in MB to apply quality reduction (default: 0.5) --config CONFIG Read settings from .yaml config file. If command line arguments are provided additionally, the config file parameters are updated with the command line parameters. --verbose Enable detailed output.

Testing:

python -m unittest arxivlatexcleaner.tests.arxivlatexcleaner_test

Note

This is not an officially supported Google product.

ยฉ 2026 GitRepoTrend ยท google-research/arxiv-latex-cleaner ยท Updated daily from GitHub