### CONTRIBUTING # How to Contribute We'd love to accept your patches and contributions to this project. There are just a few small guidelines you need to follow. ## Contributor License Agreement Contributions to this project must be accompanied by a Contributor License Agreement. You (or your employer) retain the copyright to your contribution; this simply gives us permission to use and redistribute your contributions as part of the project. Head over to to see your current agreements on file or to sign a new one. You generally only need to submit a CLA once, so if you've already submitted one (even if it was for a different project), you probably don't need to do it again. ## Code reviews All submissions, including submissions by project members, require review. We use GitHub pull requests for this purpose. Consult [GitHub Help](https://help.github.com/articles/about-pull-requests/) for more information on using pull requests. ## Community Guidelines This project follows [Google's Open Source Community Guidelines](https://opensource.google.com/conduct/). --- ### README # `arxiv_latex_cleaner` 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: ```bash arxiv_latex_cleaner /path/to/latex --resize_images --im_size 500 --images_allowlist='{"images/im.png":2000}' ``` Or simply from a config file ```bash arxiv_latex_cleaner /path/to/latex --config cleaner_config.yaml ``` ## Installation: ```bash pip install arxiv-latex-cleaner ``` | :exclamation: arxiv_latex_cleaner is only compatible with Python >=3.9 :exclamation: | | ---------------------------------------------------------------------------------- | If using MacOS, you can install using [Homebrew](https://brew.sh/): ```bash brew install arxiv_latex_cleaner ``` Alternatively, you can download the source code: ```bash git clone https://github.com/google-research/arxiv-latex-cleaner cd arxiv-latex-cleaner/ python -m arxiv_latex_cleaner --help ``` And install as a command-line program directly from the source code: ```bash 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 `commands_to_delete` (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{EXTERNAL_TIKZ_FOLDER/picture_name.pdf}`. * Requires externally compiled TikZ pictures as `.pdf` files in folder `EXTERNAL_TIKZ_FOLDER`. See section 52 (Externalization Library) in the [PGF/TikZ manual](https://ctan.org/pkg/pgf?lang=en) 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. ```yaml { "pattern" : '(?:\\figcomp{\s*)(?P.*?)\s*}\s*{\s*(?P.*?)\s*}\s*{\s*(?P.*?)\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](https://docs.python.org/3/library/re.html#regular-expression-examples) 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](cleaner_config.yaml) for details on how to specify the patterns. ## Usage: ``` /* Detailed source-code truncated for AI context efficiency. */ ``` ## Testing: ```bash python -m unittest arxiv_latex_cleaner.tests.arxiv_latex_cleaner_test ``` ## Note This is not an officially supported Google product. ---