Package LaTeX projects into clean, submission-ready archives.
Project description
UploadAssistSubmission-ready LaTeX project packaging. |
UploadAssist packages the local files used by a LaTeX document into a clean submission directory and .tar.gz archive. It is designed for journal, conference, and repository submission systems, many of which require a flat source bundle.
Version 1.0 is a modern, dependency-free successor to arxiv-collector. It supports Python 3.9 and newer.
Highlights
- Recursively discovers
\input,\include,\subfile, import-family commands, graphics, bibliographies, and local classes/styles. - Flattens the bundle by default and rewrites source references accordingly.
- Detects duplicate basenames before flattening instead of silently overwriting files.
- Strips LaTeX comments by default while preserving escaped percent signs.
- Replaces stale output atomically and creates a ready-to-upload archive.
- Requires no Python dependencies and no TeX installation.
Installation
python -m pip install uploadassist
Usage
Run the command from the directory containing your main document:
uploadassist
If there is one .tex file, it is selected automatically. If there are several, main.tex or paper.tex is preferred when unambiguous. You can always specify the document:
uploadassist path/to/main.tex
The default output is output/ next to the main document, plus output.tar.gz.
Common options:
uploadassist --noflatten main.tex # preserve directories
uploadassist --no-strip-comments main.tex # retain comments
uploadassist --no-archive main.tex # omit the tar.gz file
uploadassist -o submission main.tex # choose the output directory
uploadassist --include journal-template.sty main.tex
uploadassist --include extra-files/ main.tex # repeatable
uploadassist --version
To extract only cited BibTeX entries:
uploadassist --extract-bib references.bib main.tex > cited.bib
Run uploadassist --help for the complete command reference.
Python API
from uploadassist import collect, get_deps
dependencies = get_deps("main.tex")
files = collect("main.tex", "submission", flatten=True)
collect returns the generated file paths. Pass create_archive=False to omit the archive.
Discovery and limitations
UploadAssist uses static source discovery so it can run without compiling the document. This covers conventional literal paths in common LaTeX commands. Paths assembled through custom macros, generated during compilation, or selected only through TeX conditionals cannot be inferred; add those files with --include.
Flattening changes every dependency to its basename. If two used files have the same basename, UploadAssist stops with an actionable error; rename one file or use --noflatten. Always compile and inspect the generated bundle before submitting it.
Development
python -m pip install -e ".[dev]"
ruff check uploadassist tests examples
ruff format --check uploadassist tests examples
python -m pytest
python -m build
python -m twine check dist/*
Bug reports are welcome in the issue tracker. Maintainers can use the release checklist for PyPI publishing.
License
UploadAssist is distributed under the BSD 3-Clause License. See LICENSE.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file uploadassist-1.0.0.tar.gz.
File metadata
- Download URL: uploadassist-1.0.0.tar.gz
- Upload date:
- Size: 17.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c06899a05bb9d3721d31a6842ebca9cbb7edc39210865ed1a3523548332abda9
|
|
| MD5 |
370e331d95f55a72aaaa4f989c7601db
|
|
| BLAKE2b-256 |
a84bff42783caf8419b575dc2de64c2ce90c1e7fa7c1bbbafa626cc4cc54dee8
|
Provenance
The following attestation bundles were made for uploadassist-1.0.0.tar.gz:
Publisher:
publish.yml on cvanelteren/UploadAssist
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
uploadassist-1.0.0.tar.gz -
Subject digest:
c06899a05bb9d3721d31a6842ebca9cbb7edc39210865ed1a3523548332abda9 - Sigstore transparency entry: 2179807205
- Sigstore integration time:
-
Permalink:
cvanelteren/UploadAssist@9e44055ad3df99e4c2d864298dad02d02b115e6a -
Branch / Tag:
refs/heads/main - Owner: https://github.com/cvanelteren
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@9e44055ad3df99e4c2d864298dad02d02b115e6a -
Trigger Event:
workflow_dispatch
-
Statement type:
File details
Details for the file uploadassist-1.0.0-py3-none-any.whl.
File metadata
- Download URL: uploadassist-1.0.0-py3-none-any.whl
- Upload date:
- Size: 11.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0ac9901580618c463b6c1875e68451d1677615dd9ed43ae8f2ed94aa3493ac0a
|
|
| MD5 |
6dae077b5c5b377e70ac7c1cc8d88bb6
|
|
| BLAKE2b-256 |
2dba7cda4d8cad99c3d18542a3d74857b1bbd2b38f82a893580fae2ac2005c02
|
Provenance
The following attestation bundles were made for uploadassist-1.0.0-py3-none-any.whl:
Publisher:
publish.yml on cvanelteren/UploadAssist
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
uploadassist-1.0.0-py3-none-any.whl -
Subject digest:
0ac9901580618c463b6c1875e68451d1677615dd9ed43ae8f2ed94aa3493ac0a - Sigstore transparency entry: 2179807306
- Sigstore integration time:
-
Permalink:
cvanelteren/UploadAssist@9e44055ad3df99e4c2d864298dad02d02b115e6a -
Branch / Tag:
refs/heads/main - Owner: https://github.com/cvanelteren
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@9e44055ad3df99e4c2d864298dad02d02b115e6a -
Trigger Event:
workflow_dispatch
-
Statement type: