### 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.
---